Tengo una aplicación web que envía a google.script.run.withFailureHanlder(data).withSuccesHandler(data).someFunction(data) algunos atributos para filtrar y recuperar datos de una hoja de cálculo en Drive. Por ejemplo
Lado del anfitrión
google.script.run.withSuccesHandler(e => { console.log(e); }).someFunction(data);Lado del servidor de Google Apps:
function someFunction(data){ let book = SpreadsheetApp.openByUrl(url).getSheetByName(data.name); let info = book.getDataRange().getDisplayValues().filter(x => { return new Date(data.start) > new Date(x[0]); }); return result; }Estas hojas de cálculo son consultadas por varias personas al mismo tiempo. Al principio iba bien pero ahora los datos han crecido mucho y las consultas se han vuelto lentas por la cantidad de datos.
¿Hay alguna forma de optimizar estas consultas sin afectar el resultado de las otras personas al consultar al mismo tiempo?
Si los datos en sus hojas de cálculo no cambian con frecuencia, puede intentar almacenar en caché los datos en el lado del cliente.
Puede usar IndexedDB como caché para almacenar los resultados de consultas comunes en los navegadores de sus clientes, suponiendo que sus navegadores lo admitan. También deberá configurar algún código para verificar periódicamente la hoja en busca de cambios para actualizar el caché/base de datos en el lado del cliente cuando sea necesario.
Dexie es un buen contenedor de IndexedDB, por lo que recomiendo usar esa biblioteca para comenzar.