Utilisateur:Od1n/Snippets JavaScript - 2

// diverses méthodes de mise en cache automatique
// pour l'exemple, factorisation du code de récupération du #bodyContent

(function () {

    // méthode "lazy function definition"
    var getElementContenuPage_1 = function () {
        var bc = document.getElementById('bodyContent');
        if (!bc) { bc = document.getElementById('mw_contentholder'); }
        if (!bc) { bc = document.getElementById('article'); }
        if (bc) {
            getElementContenuPage_1 = function () {
                return bc;
            };
        }
        return bc;
    };

    // méthode "object property"
    function getElementContenuPage_2() {
        var self = getElementContenuPage_2;
        if (!self.bc) {
            self.bc = document.getElementById('bodyContent');
            if (!self.bc) { self.bc = document.getElementById('mw_contentholder'); }
            if (!self.bc) { self.bc = document.getElementById('article'); }
        }
        return self.bc;
    }

    // méthode "closure"
    var getElementContenuPage_3 = (function () {
        var bc;
        return function () {
            if (!bc) {
                bc = document.getElementById('bodyContent');
                if (!bc) { bc = document.getElementById('mw_contentholder'); }
                if (!bc) { bc = document.getElementById('article'); }
            }
            return bc;
        };
    })();

    // pas de cache
    function getElementContenuPage_4() {
        var bc = document.getElementById('bodyContent');
        if (!bc) { bc = document.getElementById('mw_contentholder'); }
        if (!bc) { bc = document.getElementById('article'); }
        return bc;
    }

    var i, nb = 100000;

    var T1 = new Date();
    for (i = nb; i--; ) {
        getElementContenuPage_1();
    }
    var T2 = new Date();
    for (i = nb; i--; ) {
        getElementContenuPage_2();
    }
    var T3 = new Date();
    for (i = nb; i--; ) {
        getElementContenuPage_3();
    }
    var T4 = new Date();
    for (i = nb; i--; ) {
        getElementContenuPage_4();
    }
    var T5 = new Date();

    console.log(T2 - T1);
    console.log(T3 - T2);
    console.log(T4 - T3);
    console.log(T5 - T4);
   
})();