Servir des scripts personnalisés par l’utilisateur en grand volume

Nous avons actuellement un script qui est servi via un serveur Web (Flask par Apache WSGI).

Ceci est un fichier Javascript personnalisable par l’utilisateur qui inclut une logique commune et des parameters personnalisables par l’utilisateur, différents d’un utilisateur à l’autre.

La méthode actuelle pour le dissortingbuer me semble très inefficace, et cela pour stocker la configuration de chaque utilisateur dans une firebase database locale et append le code de la logique commune avant de l’envoyer. Par exemple:

var user_config = {...}; // ====== separation ====== var logic = (function() { // Consume config data here }); 

La configuration est effectuée avec les utilisateurs se connectant à notre site Web et personnalisant un certain nombre de fonctionnalités, mais la configuration est fondamentalement un très grand JSON.

La raison pour laquelle cela a été fait à l’origine était de rendre le code client aussi simple que possible. Ils doivent simplement inclure une balise de script sur leur site Web avec leur identifiant:

  

Le problème que je trouve maintenant, c’est que j’essaie de modifier la méthode développée à l’origine pour mieux gérer une charge élevée, car elle semble actuellement en difficulté.

Quelle serait la manière de diffuser ces scripts personnalisés pour chaque utilisateur afin de réduire au mieux la charge sur nos serveurs, tout en tirant parti de certaines fonctionnalités de mise en cache ou de réduction de la charge.

Cela dépend exactement de ce qui est personnalisé et comment. Si possible, faites en sorte que les utilisateurs serialise / json encodent leurs parameters de configuration dans les parameters de requête du script.

modifier

Maintenant que j’ai un peu plus d’informations sur la situation, je pense que vous n’êtes pas loin d’une configuration optimale.

Comme la configuration est assez volumineuse lorsqu’elle est sérialisée / convertie en JSON, alors je pense que oui – vous allez devoir le conserver sur une firebase database. Peut-être faire un tableau / DB dédié à cela. Champ UserId + Config JSON.

La meilleure façon pour IMO d’atténuer la charge élevée sur le serveur serait d’implémenter une couche de mise en cache basée sur la RAM comme memcached.

Assurez-vous que votre firebase database est également optimisée, indexez le champ ID s’il n’est pas déjà indexé.

Ensuite, mettez tout cela derrière quelque chose comme le vernis.

Si votre charge élevée est due au grand nombre de requêtes différentes qui peuvent survenir à un moment donné, alors je pense que vous devez travailler pour garder le cache constamment au chaud pour tous vos utilisateurs actifs.

Si vos scripts requièrent une écriture de firebase database pour enregistrer les mésortingques, envisagez peut-être de déplacer cette fonctionnalité dans le script côté client et de lui faire passer un appel AJAX.

J’espère que cela t’aides.