0

Mon application Web google script atteint récemment les limites qps. Quel serait un meilleur moyen d'améliorer les performances.Google Apps Script Web App limite les exécutions simultanées et les exécutions simultanées

J'ai environ 50 utilisateurs actifs. J'utilise une feuille de calcul google de 15 000 lignes comme base de données et mon application traite les données json demandées par les utilisateurs de cette feuille de calcul. J'utilise un sondage long pour garder la connexion active pendant 5 min et la ferme si aucune mise à jour dans la feuille de calcul n'arrive. Puis le client se reconnecte. Web App est publié pour être exécuté comme moi.

Mes œuvres polling comme ceci:

function doGet(e){ 
    var userHasVersion = e.parameter.userVersion 
    while (runningTime < 300001) { 
      var currentServerVersion = parseInt(cache.get("currentVersion"),10) 
      if(userVersion<currentServerVersion){ 
      var returndata = [] 
      for(var i = userVersion+1; i <= currentServerVersion;i++){ 
       var newData = cache.get(i) 
       if(newData!=null){returnData.push(JSON.parse(cache.get(newData)))} 
      } 
      return ContentService.createTextOutput(JSON.stringify({currentServerVersion,data:returnData })).setMimeType(ContentService.MimeType.JSON); 
      } else { 
      Utilities.sleep(20000) 
      } 
      runningTime = calculateRunningTime() 
    } 
} 

Ce que j'ai essayé jusqu'à présent:

1) Je demande avec CacheService optimisé pour réduire les appels à la feuille de calcul. Cela m'a aidé pendant quelques mois, mais maintenant je reçois de plus en plus d'erreurs qps.

2) Demander à l'équipe de Google des quotas. Ils m'ont expliqué qu'il n'y a pas de quotas/limites publiés pour les exécutions simultanées et qu'ils sont sujets à changement sans préavis. Ils ont conseillé l'utilisation de cacheService et une meilleure gestion des erreurs.

Je pense passer d'une interrogation longue à une scrutation rapide. Mais il se sent comme un inconvénient. Devrais-je essayer d'optimiser davantage les performances ou passer à un autre service?

Vous essayez d'utiliser l'application "Exécuter l'application en tant qu'utilisateur accédant à l'application"? (les utilisateurs doivent utiliser la même base de données)

Est-ce que Google Script API Executable est différent de Web App? Il semble que cela puisse convenir, mais je ne suis pas sûr qu'ils partagent les mêmes quotas qps.

Je considère également le service GAE, mais je voudrais éviter de dépasser le quota gratuit.

Un conseil sera grandement apprécié!

Répondre

1

Je pense que la partie suivante peut être améliorée. Lorsque les données sont extraites du service de cache, getAll() est plus efficace que get(). J'ai déjà mesuré la différence. C'est environ 890 fois plus rapide que get(). Si le nombre de données récupérées du service de cache est important, je pense que l'amélioration de cette partie est importante pour la performance.

Votre script:

var returndata = [] 
for(var i = userVersion+1; i <= currentServerVersion;i++){ 
    var newData = cache.get(i) 
    if(newData!=null){returnData.push(JSON.parse(cache.get(newData)))} 
} 

script renforcé:

var ar = []; 
for(var i = userVersion+1; i <= currentServerVersion;i++){ 
    ar.push([i]); 
} 
var r = JSON.parse(JSON.stringify(cache.getAll(ar))); // Since key is number, I used this. 
var returnData = [r[j] for each (j in r)if (!r[j])]; 

Puisque je ne peux pas voir vos données, je ne peux pas confirmer cette exécution. Donc, si des erreurs se produisent, dites-le moi s'il vous plaît. Si je ne comprends pas votre question, je suis désolé.

+0

Merci! Je vais essayer de tester cela. Je ne savais pas à propos de ce tour. Cela devrait être utile si je passe à l'interrogation courte. Alors cette différence de performance aura certainement du sens! –

+0

@Evgeny Vostok Je suis heureux de vous aider. Si mon échantillon ne fonctionne pas, n'hésitez pas à me le dire. Et si vous utilisez '' put() '' pour mettre les données dans le cache, '' putAll() '' est meilleur. – Tanaike