Lazy Object Initialization

Lazy Object Initialization

Il codice sottostante di Firefox DevTools, che è scritto con JavaScript e HTML, è un’applicazione complessa. A causa della complessità e della quantità di lavoro in corso, il team DevTools ha fatto tutto il possibile per caricare il meno possibile. Inoltre, il team ha un sistema di importazione e inizializzazione pigramente di oggetti quando sono necessari. Ho impiegato un po ‘di tempo per ridurre l’inizializzatore, diamo un’occhiata!

Il sistema si basa sull’utilizzo della funzione get di Object.defineProperty per inizializzare un oggetto quando necessario:

// 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 });
}

Con la funzione lazyGet , la proprietà desiderata viene inizializzata ed elaborata verso il basso solo quando viene chiamato il suo getter:

// 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;

L’inizializzatore di Mozilla è molto più complesso in quanto funge anche da caricatore, ma ti viene l’idea. Pensiamo sempre alle risorse di caricamento lento ma è anche bene pensare a inizializzare le proprietà in quanto potrebbero non essere necessarie! Mantieni un minimo ingombro se puoi!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Categorie




Related posts





Social Share


Feedback

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Web Hosting