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!
Dopo una pluriennale esperienza professionale in qualità di ‘web developer’ presso agenzie di comunicazione e aziende informatiche, ho deciso di intraprendere la sfida della libera professione. Da oltre 13 anni collaboro stabilmente con agenzie di comunicazioni e agenzie turistiche e freelance sia nel panorama nazionale e internazionale. Sviluppare software e creare applicazioni è una professione che richiede una grande passione, molta dedizione e massima precisione, oltre a tanta esperienza. Non basta essere programmatori. Non ci si improvvisa. Bisogna capire le esigenze del committente, conoscere i sistemi, i linguaggi, il mercato e, alla fine… programmare e rendere usabile un prodotto “virtuale”.
Lascia un commento