Existe-t-il une limite à la quantité de données que je devrais mettre en cache dans la mémoire du navigateur?

Je dois charger un couple de milliers d'enregistrements de données utilisateur (contacts utilisateur dans un système de gestion des contacts, pour être précis) à partir d'un service REST et exécuter une recherche sur eux. Malheureusement, le service REST n'offre pas une recherche qui répond à mes besoins, donc je suis réduit à charger tout un tas de données et à la rechercher moi-même. Le chargement des enregistrements prend beaucoup de temps, donc je ne veux que le faire une fois pour chaque utilisateur.

De toute évidence, ces données doivent être mises en cache. Malheureusement, la mise en cache côté serveur n'est pas une option. Mon client exécute des applications sur plusieurs serveurs, et il n'y a aucun moyen de prévoir quel serveur une demande donnée atterrira.

Donc, la prochaine option consiste à mettre en cache ces données sur le côté du navigateur et à y effectuer des recherches. Pour un utilisateur avec des milliers de contacts, cela pourrait signaler la mise en cache de plusieurs données. Quels problèmes pourrais-je exécuter pour stocker plusieurs mémoires de données javascript dans la mémoire du navigateur?

Le stockage de plusieurs milliers de données Javascript ne devrait pas poser de problèmes. Les fuites de mémoire seront. Pensez à combien de RAM les ordinateurs modernes ont – quelques mégaoctets est une molécule dans la goutte dans le seau proverbiale.

Faites attention lorsque vous faites quelque chose côté client si vous souhaitez que vos utilisateurs utilisent des appareils mobiles. Bien que les ordinateurs de bureau n'auront aucun problème, Mobile Safari cessera de fonctionner (je crois) 10Mb de données JavaScript. (Voir cet article pour plus d'informations sur Mobile Safari). D'autres navigateurs mobiles sont susceptibles d'avoir des restrictions de mémoire similaires. Déterminez l'ensemble minimal d'informations que vous pouvez revenir pour permettre à l'utilisateur d'effectuer la recherche, puis enregistrez les enregistrements plus riches par défaut de l'API REST comme vous en avez besoin.

En tant que solution de rechange, proxy du service REST en question, et créez votre propre recherche sur un serveur que vous contrôlez. Vous pouvez le faire avec assez rapidement et facilement avec Python + Django + XML Models . Il ne fait aucun doute qu'il existe des façons tout aussi simples de le faire avec quel que soit votre langue de développeur préférée. (En relisant, je vois que vous ne pouvez pas faire de mise en cache côté serveur qui peut rendre ce point discutable).

Vous pouvez gérer des dizaines de milliers d'enregistrements en toute sécurité dans le navigateur. Je lance des critères de recherche et de tri avec jOrder ( http://github.com/danstocker/jorder ) sur ces jeux de données sans problème.

Je regarderais un cache côté serveur distribué. Si vous conservez les données dans le navigateur, au fur et à mesure que le système augmentera, vous devrez augmenter la durée de vie du cache du navigateur pour réduire le trafic.