Philip Roberts wykonuje genialną pracę wyjaśniając pętlę zdarzeń przeglądarki here zapewniając wyraźne wyjaśnienie między stosem wywołań, pętlą zdarzeń, kolejką zadań, a następnie "zewnętrznymi" wątkami, takimi jak webapis. Moje pytanie brzmi: czy są one równorzędne z równoważnymi komponentami w pętli zdarzeń węzła i są one nazywane w zasadzie to samo. Oznacza to, że kiedy wykonuję połączenie za pomocą plików Node i internetowych bibliotek I/O, są to rzeczy, które zdarzają się poza stos, którego callbacks są w kolejce w kolejce zadań?Czy istnieją znaczące różnice między pętlą zdarzeń przeglądarki Chrome a pętlą zdarzeń węzła?
Odpowiedz
... kiedy wykonuję połączenie za pomocą plików Node i internetowych i/o bibliotek, są to rzeczy, które zdarzają się poza stos, którego callbacks są w kolejce zadań w kolejce?
Tak, zdecydowanie; są asynchroniczne, podobnie jak Ajax i setTimeout
są asynchroniczne. Wykonują pewną operację poza stosem wywołań, a po zakończeniu tej operacji dodają zdarzenie do kolejki, które ma zostać przetworzone przez pętlę zdarzeń.
Interfejs API węzła zapewnia rodzaj asynchronicznego no-op, setImmediate
. W przypadku tej funkcji "pewna operacja", o której wspomniałem powyżej, to "nie rób nic", po czym element jest natychmiast dodawany na końcu kolejki zdarzeń.
Istnieje mocniejszy process.nextTick
, który dodaje zdarzenie do z przodu kolejki zdarzeń, skutecznie odcinając linię i powodując, że wszystkie inne oczekujące zdarzenia oczekują. Jeśli zostanie wywołany rekursywnie, może to spowodować przedłużone opóźnienie innych zdarzeń (do osiągnięcia maxTickDepth
).
FWIW: Node.js i Chrome ** nie ** używają tej samej implementacji pętli zdarzeń. Chrome/Chromium używa libevent, a node.js używa libuv. – mscdex
@mscdex powiedzieć whaaaat - dobrze wiedzieć; Będę edytować JAK NAJSZYBCIEJ. Jeśli masz jakieś referencje, z chęcią je wprowadzę (oczywiście sprawdzę to sam i zobaczę, czy mogę znaleźć własną). – apsillers
[tutaj] (https://chromium.googlesource.com/chromium/chromium/+/master/third_party/libevent/README.chromium) to drzewo źródłowe Chromium zawierające libevent. [Tutaj] (https://github.com/joyent/node/blob/962e651476ce2035ce6e15eff5abd0f9c54e039c/src/node.cc#L3629-L3640) jest węzłem używającym libuv dla głównej pętli zdarzeń. Oba używają jednak v8 i wszystkiego, co się z tym wiąże (chociaż węzeł może używać różnych wersji v8 niż Chrome, ponieważ Chrome regularnie aktualizuje się). – mscdex
- 1. Ruby: Jaka jest różnica między pętlą for a każdą pętlą?
- 2. Jak uruchomić własny kod wraz z pętlą zdarzeń Tkintera?
- 3. Jak wygenerować programy obsługi zdarzeń z pętlą w JavaScript?
- 4. Słuchaj zdarzeń przeglądarki w kreatorze
- 5. Wylicz instancję wyliczeniową pętlą
- 6. Jak rozwiązać problem z pętlą przekierowania
- 7. zmienić nazwę zmiennej z pętlą
- 8. Problemy z pętlą walidacji C++
- 9. zadeklaruj zmienną poza pętlą foreach
- 10. Korzystanie z ".." z pętlą for
- 11. Czy istnieją różnice pomiędzy "i"
- 12. Jak usunąć detektor zdarzeń w rozszerzeniu Chrome
- 13. Jak zrobić opóźnienie między każdą pętlą funkcji jQuery.each?
- 14. Dlaczego pętla while blokuje pętlę zdarzeń węzła?
- 15. Różnice w przypisywaniu procedur obsługi zdarzeń C#?
- 16. Różnica między zdarzeniem zdarzeń wskaźnika w jQuery a zwykłym JavaScriptem
- 17. Używanie zmiennej poza pętlą while (zakres)
- 18. Usuwanie elementów ze słownika z pętlą for
- 19. Monitorowanie wszystkich zdarzeń JavaScript w konsoli przeglądarki
- 20. kłopoty z pętlą for w Javie
- 21. Java - Wypełnianie ArrayList of Threads pętlą
- 22. Rozsyłanie grupowe na urządzeniu z pętlą zwrotną
- 23. Czy serwer jest nieskończoną pętlą działającą jako proces w tle?
- 24. Problem z pętlą przekierowania dla agenta zasad sieciowych?
- 25. Laravel 5 - Zamieszanie między manipulatorami zdarzeń a słuchaczami
- 26. IE 8-9 Problem z JavaScript z długą pętlą
- 27. Różnice między NCQRS a Lokad.CQRS
- 28. Różnice między GWT a Vaadin
- 29. Różnice między funktorami a endofunktami
- 30. Zapisywanie lub rejestrowanie wszystkich zdarzeń DOM/JQuery przeglądarki
Tak, podstawowa idea jest taka sama. node.js korzysta z mechanizmu JS Chrome. – dandavis
@apsillers Zgodne. Próbuję tylko ustalić, czy istnieją jakieś istotne różnice koncepcyjne, o których należy pamiętać. – JohnGalt
Przeglądarka może mieć wiele pętli zdarzeń (dla JS, dla DOM itp.), Ale koncepcja jest taka sama, tak. – Bergi