suchen
HeimWeb-Frontendjs-TutorialSo funktionieren JavaScript-Timer

So funktionieren JavaScript-Timer

Nov 25, 2016 am 09:15 AM
javascript

Bevor Sie den folgenden Inhalt lesen, lesen Sie einen kleinen Codeabschnitt. Wenn der Leser den Zweck des Codes erkennen kann, ist es nicht erforderlich, weiterzulesen, da Sie ihn verstehen werden.

setTimeout(function(){
/* Some long block of code… */
setTimeout(arguments.callee, 10);
}, 10);
setInterval(function(){
/* Some long block of code… */
}, 10);

Timer sind eine sehr coole Sache, aber viele Leute kennen nur ihre Syntax und haben kein Verständnis für ihre Prinzipien. Ein Timer führt einen Codeabschnitt asynchron aus, indem er eine bestimmte Zeitspanne (Millisekunden) festlegt. Da Javascript eine Single-Threaded-Sprache ist, bieten Timer die Möglichkeit, Code auszuführen, um diese Sprachbeschränkung zu umgehen.

Heute erkläre ich kurz, wie der Timer funktioniert.

JavaScript bietet drei Funktionen zum Erstellen und Betreiben von Timern

1 var id = setTimeout(fn, delay);

2 var id = setInterval(fn, delay) );

3 clearInterval(id); clearTimeout(id);

Ich werde nicht näher auf die spezifische Syntax eingehen, Sie können das Handbuch überprüfen. Um zu verstehen, wie Timer funktionieren, muss man eines im Hinterkopf behalten: Zeitverzögerungen sind nicht garantiert. Was bedeutet das? Nur weil Sie setTimeout(fn, 500) so schreiben, heißt das nicht, dass fn definitiv sofort nach 500 Millisekunden ausgeführt wird. Da es sich bei JavaScript um eine Single-Thread-Sprache handelt, werden alle asynchronen Ereignisse (einschließlich Timer, Mausereignisse oder der Abschluss einer XMLHttpRequest) nur ausgeführt, wenn während der Programmausführung eine Lücke besteht Geben Sie es an. Sie müssen wissen, dass der Benutzer nicht allmächtig ist und was Sie schreiben, hängt letztendlich vom Browser ab.

Das Bild unten kann das Problem sehr gut veranschaulichen, dank des Meisters John Resig.

So funktionieren JavaScript-Timer

Von oben nach unten betrachtet stellen die Zahlen auf der linken Seite die Zeit (Millisekunden) dar, der Text auf der rechten Seite stellt das Setzen und Auslösen einer Reihe asynchroner Ereignisse dar und der Codeblock in der Mitte. Der oberste JavaScript-Codeblock kann das Fragment sein, das Sie beim Laden des Browsers ausführen, was etwa 18 Millisekunden dauert. Der Mausklick-Callback-Codeblock direkt darunter kann Ihre Rückruffunktion sein, wenn ein Mausereignis ausgelöst wird, was etwa 11 Millisekunden dauert , und so weiter.

Die Single-Threaded-Natur von JavaScript bestimmt, dass immer nur ein Block gleichzeitig ausgeführt werden kann. Wenn also der erste Codeblock ausgeführt wird (er läuft insgesamt 18 Millisekunden), werden zwei Timer erstellt. Während dieser Zeit kann der Benutzer noch mit der Maus geklickt haben (haben Sie jemals auf eine Webseite geklickt, sobald diese geöffnet wurde, bevor der Ladevorgang abgeschlossen war)? Es liegt auf der Hand, dass die Rückruffunktion sofort ausgeführt werden sollte, nachdem der Benutzer mit der Maus geklickt hat, aber nein, es gibt nur eine Spur für die JavaScript-Ausführung. Vor Ablauf der 18 Millisekunden können andere Codeblöcke nur dann in die Warteschlange gestellt werden, wenn sie dies möchten ausgeführt werden, so dass Ihnen kein Platz zum Überholen bleibt. Beide Timer haben eine Verzögerung von 10 Millisekunden. Wie Sie auf dem Bild sehen können, wird setTimeout auch vor dem Ende der 18-Millisekunden-Ausführung ausgelöst.

Schließlich, 18 Millisekunden später, spaltete ein göttlicher Donner vom Himmel das Auto vor ihm direkt in die Luft. Die beiden Leute in der Reihe dahinter konnten vorbeikommen, aber sie mussten einer nach dem anderen gehen und konnten es nicht Seite an Seite. Wer würde also zuerst durchkommen? Schlagen sich da zwei Leute gegenseitig? Nein, der Browser hat das letzte Wort. Der Browser sagt, dass das Mausklick-Ereignis zuerst bestanden wird und setTimeout nur 11 Millisekunden weiter warten kann. Achten Sie auf das Bild. Wenn die Rückruffunktion für Mausereignisse ausgeführt wird, wird ein weiteres Timer-Ereignis ausgelöst (setInterval), das wartet und hinter setTimeout eingereiht werden muss.

11 Millisekunden sind vergangen und setTimeout ist endlich vergangen. Beachten Sie, dass setInterval zum zweiten Mal ausgelöst wird, obwohl es zum ersten Mal in der Warteschlange steht. Was wird passieren? Das Ende? In diesem Fall werden nach der Ausführung von setTimeout zwei setIntervals kontinuierlich ausgeführt und die von Ihnen festgelegte Verzögerung ist nutzlos. Daher ist der Browser ziemlich intelligent, wenn er bei der Verarbeitung von setInterval feststellt, dass sich bereits eins in der Warteschlange befindet, und das neue sofort beendet.

Schauen Sie sich an, dass das in der Warteschlange befindliche setInterval zum ersten Mal an der Reihe ist. Wenn es ausgeführt wird, wird es erneut in die Warteschlange gestellt, sodass der Browser es nicht beendet Wenn Sie eine Diashow erstellen und auf diese Situation stoßen, sollten Sie sorgfältig darüber nachdenken, ob ein Problem mit Ihrem Code vorliegt.

Schließlich stören keine anderen Faktoren setInterval (wenn der Benutzer von MM abgerufen wird) und setInterval wird entsprechend den von Ihnen gewünschten Schritten ausgeführt.

An diesem Punkt kann der Code am Anfang verstanden werden.

setTimeout(function(){
/* Some long block of code… */
setTimeout(arguments.callee, 10);
}, 10);
setInterval(function(){
/* Some long block of code… */
}, 10);

Diese beiden Funktionen scheinen die gleiche Wirkung zu haben, sind es aber nicht. Der erste Codeblock wird immer mit einer Verzögerung von 10 Millisekunden ausgeführt, obwohl sie meistens länger als 10 Millisekunden ist . Der zweite versucht alle 10 Millisekunden auszuführen, unabhängig davon, ob der vorherige Trigger ausgeführt wurde.

Um vier Punkte zusammenzufassen

• Die JavaScript-Engine hat nur einen Thread, wodurch bestimmte asynchrone Ereignisse in die Warteschlange gestellt werden

• Es gibt einen großen Unterschied zwischen setTimeout und setInterval bei der Ausführung von asynchronem Code

• Wenn die Ausführung eines Timers blockiert wird, wartet er, bis er auf eine Codeausführungslücke stößt, was normalerweise länger dauert als erwartet

• Intervalle können nacheinander ausgeführt werden, wenn Die Ausführungszeit der Callback-Funktion ist größer als das Intervall


Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Ist Python oder JavaScript besser?Ist Python oder JavaScript besser?Apr 06, 2025 am 12:14 AM

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools