Nous développons une application dans un environnement intégré. C'est un environnement informatique de haut niveau avec un navigateur web complet sur un système Linux busybox. La seule exception est que le système dispose d'une quantité limitée de mémoire système.Est-il possible d'utiliser requirejs lorsque des modules doivent être retirés pour économiser de la mémoire?
Notre application est construite en JavaScript et tourne à l'intérieur d'un webbrowser basé sur Webkit et se compose de beaucoup de modules javascript qui sont chargés en séquence (ce qui n'est pas très efficace).
Certains modules fournissent des fonctionnalités communes utilisées par plusieurs modules. Nous sommes en train de convertir notre loader javascript actuel avec requirejs, mais il y a un besoin spécifique auquel nous devons répondre en premier.
Est-il possible de décharger un module lorsqu'il a été chargé en utilisant requirejs? Supposons que nous charge dynamiquement un module en utilisant:
require(["somemodule.js"], function(m) { m.run(); });
Cela fonctionne bien pour le chargement et l'exécution « UnModule » et résoudre aussi toutes les dépendances pour « UnModule » et le cadre de requirejs va stocker une référence à « UnModule » pour les futures demandes . Si, à un moment donné, nous avons besoin de récupérer de la mémoire, par exemple pour pouvoir charger et exécuter un nombre infini de modules, nous devons commencer à supprimer certains d'entre eux après un certain temps. Est-ce possible avec requirejs sans modifier l'implémentation interne?
Est-ce que quelqu'un a traité ce genre de problème avant? La plupart des applications JS d'une seule page s'exécutent dans un navigateur Web sur un PC de bureau où l'utilisation de la mémoire n'est généralement pas une préoccupation majeure.
Merci , Je reviendrai quand je l'ai testé plus.Nous utilisons toujours notre propre script loader mais nous allons convertir en requirejs, il y a quelques refactoring à venir car l'application utilise actuellement un espace de nommage global. J'ai remarqué dans la source pour requirejs que le onScriptLoad ne supprime pas le scriptTag, mais vous recommande de le faire dans votre réponse ci-dessus. Est-ce pour des raisons de performances que le scriptTag est conservé dans l'arborescence DOM dans requirejs? Par exemple, la suppression des scripts ajouterait un traitement supplémentaire dans le chargeur. Notre préchargeur supprime toujours le scriptTag dans le rappel onload pour préserver la mémoire. – Ernelli
Je ne supprime pas la balise de script pour faciliter le débogage (mon script se charge-t-il vraiment? D'où?) Et essaie également de réduire la taille du code du chargeur. Je pensais qu'il n'y aurait pas beaucoup d'économies en particulier sur une page qui avait les balises de script en ligne dans le HTML. Cependant, je vais faire une note pour tester si cela fait une différence pour l'enlever, et cela fonctionne à travers les navigateurs. Vous indiquez que cela fait une différence, peut-être que je devrais fournir une option pour le faire. Toute information sur la façon dont vous validez les économies de mémoire est appréciée. – jrburke
Le navigateur que nous utilisons dans notre système embarqué (un décodeur IPTV) est basé sur Webkit. Même lorsque les balises de script sont supprimées du document, les origines des exceptions sont correctement étiquetées. Je dois faire d'autres tests pour voir à quel point la suppression de scriptTag affecte l'utilisation de la mémoire. Même lorsque les scriptTags sont supprimés, les moteurs JS sont capables de recréer le code source pour une fonction donnée (bien que sans commentaires). Nous effectuons tous nos profils de mémoire en fonction de la quantité de mémoire disponible dans le système. – Ernelli