Le code principal de Firefox DevTools, qui est écrit en JavaScript et HTML, est une application complexe. Compte tenu de la complexité et de la quantité de travail à effectuer, l’équipe DevTools a tout mis en œuvre pour charger le moins possible. De plus, l’équipe dispose d’un système pour importer des objets et les initialiser paresseusement quand ils sont nécessaires. J’ai pris du temps pour réduire l’initialiseur, jetons un coup d’œil !
Le système est basé sur l’exploitation de Object.defineProperty
c’est get
Fonction pour initialiser un objet en cas de besoin :
// Lazily initializes an object's property until it's used function lazyGet(hostObj, name, initializer) { let defined = false; Object.defineProperty(hostObj, name, { get: function () { // If not already defined, define it by executing // its initializer and setting it as value if (!defined) { defined = true; // Overrides the original property definition // which is the initializer Object.defineProperty(hostObj, name, { configurable: true, enumerable: true, value: initializer.apply(hostObj), writable: true, }); return hostObj[name]; } }, configurable: true, enumerable: true }); }
avec le lazyGet
fonction, la propriété que vous voulez n’est initialisée et manipulée que lorsque son getter est appelé :
// Don't define window.myProp until someone tries to use it // Thus, if it's never used, it's never initialized lazyGet(window, "myProp", () => { return { message: "Hello!" }; }); // window.myProp is now undefined, since it hasn't been requested yet // Use it for something, which triggers initialization and returns its value console.log(window.myProp.message); // Using it again doesn't initialize again, since it was already created console.log(window.myProp.message); // And it can be reassigned later on: window.myProp = null;
Le configurateur de Mozilla est un peu plus compliqué car il agit également comme un chargeur, mais vous voyez l’idée. Nous pensons toujours aux ressources de chargement paresseux, mais c’est aussi une bonne idée de penser à l’initialisation des propriétés car elles peuvent ne pas être nécessaires ! Gardez une petite empreinte si vous le pouvez !