Die grundlegendste Funktion von JavaScript in Webseiten besteht darin, Benutzeraktionen zu überwachen oder darauf zu reagieren, was sehr nützlich ist. Einige Aktionen des Benutzers sind sehr häufig, andere sehr selten. Einige Listener-Funktionen werden blitzschnell ausgeführt, während andere schwerfällig sind und den Browser kaputt machen können. Nehmen Sie als Beispiel das Größenänderungsereignis des Browserfensters. Dieses Ereignis wird bei jeder Skalierungsänderung des Browserfensters einmal ausgelöst. Wenn der Listener groß ist, wird Ihr Browser bald überlastet.
Natürlich können wir nicht zulassen, dass der Browser heruntergefahren wird, aber wir können den Lösch-Listener nicht löschen. Wir können jedoch die Häufigkeit von Funktionsaufrufen begrenzen und die Auswirkungen der Ausführung von Ereignisfunktionen abschwächen. Anstatt die Listener-Funktion bei jeder Größenänderung des Fensters einmal auszulösen, können wir jetzt das Mindestintervall zum Auslösen der Listener-Funktion auf mehr als eine bestimmte Anzahl von Millisekunden festlegen, sodass ein angemessener Aufrufkanal aufrechterhalten und sichergestellt wird, dass der Benutzer Erfahrung wird nicht zerstört. Es gibt eine gute js-Tool-Bibliothek namens Underscore.js, die über eine einfache Methode verfügt, mit der Sie ganz einfach Listener erstellen können, die die Häufigkeit von Ereignisfunktionsauslösern reduzieren.
JavaScript-Code
Der Code des Frequenzreduktions-Listeners ist sehr einfach:
// Führt hier die gesamte Layoutaktualisierung durch
}, 500); // Mindestens alle 500 Millisekunden ausführen
// Fügen Sie den Ereignis-Listener hinzu
window.addEventListener("resize", updateLayout, false);
...Die unterste Ebene dieses Underscore.js-Codes verwendet tatsächlich Intervalle, um die Häufigkeit von Ereignisfunktionsaufrufen zu überprüfen:
// Gibt eine Funktion zurück, die nicht ausgeführt wird, solange sie weiterhin aufgerufen wird
// ausgelöst werden. Die Funktion wird aufgerufen, nachdem sie nicht mehr aufgerufen wird
// N Millisekunden. Wenn „sofort“ übergeben wird, lösen Sie die Funktion auf dem
aus
// Vorderkante statt Hinterkante.
_.debounce = function(func, warte, sofort) {
var timeout;
return function() {
var context = this, args = arguments;
var später = function() {
timeout = null;
If (!immediate) func.apply(context, args);
};
var callNow = sofort && !timeout;
clearTimeout(timeout);
timeout = setTimeout(später, warten);
if (callNow) func.apply(context, args);
};
};
window.addEvent("resize", myFn.debounce(500));