Moje zrozumienie technologii polega na tym, że jest ona przygotowywana w locie do montażu. Na spektrum prędkości jest wolniejszy niż Java, ale szybszy niż Ruby i Python. Po stronie klienta tłumacz ma sens, ale po stronie serwera moją pierwszą myślą jest to, że kompilacja przed uruchomieniem lub przynajmniej opcja ta jest optymalną architekturą. Jeśli JavaScript został wcześniej skompilowany w ten sposób, czy działałby szybciej niż Java? Czy ma to coś wspólnego ze słabo pisanymi językami, co oznacza, że JavaScript będzie zawsze wolniejszy niż Java?Dlaczego Node.js nie jest kompilowany przed uruchomieniem?
Odpowiedz
Niektóre z Node.js ma C++ i jest wstępnie skompilowany. Rozumiem jednak, że dołożono wszelkich starań, aby zachować jak najwięcej kodu w JavaScript, ale gdy wydajność była niska, użyto C++.
Node.js nie byłoby możliwe bez V8 JavaScript Engine, która jest tym, co kompiluje javascript. Ten silnik jest znany z tego, że jest niezwykle szybki. Został zbudowany dla przeglądarki Chrome, ale wydajność również się opłaca w Node.js.
Jeśli chodzi o wydajność Node.js, jako serwer internetowy jest to co najmniej na równi z innymi wiodącymi serwerami WWW, takimi jak Apache + PHP. Więc wydajność nie jest problemem w powszechnym użyciu. Powiedział, że istnieją szybsze technologie. Serwery oparte na Erlangu są znane z tego, że są szybsze przy jednoczesnym ładowaniu (co ciekawe, Erlang jest również językiem o dynamicznym typie).
W celu wykonywania intensywnych zadań cpu/gpu w liczbie mnogiej, Node.js nie jest dobrym wyborem, chyba że go hartujesz z Fabric Engine, w którym to przypadku może być równy C++.
Istnieje kilka projektów, które są obecnie badających zagadnienia prędkości z javascript:
- Dart - http://www.dartlang.org/support/faq.html. (Nie chodzi tylko o prędkość, ale jest jej częścią).
- Węzeł Native - https://github.com/d5/node.native/
- 1. Dlaczego ten równoważny program nie jest kompilowany?
- 2. Dlaczego ten kod nie jest kompilowany?
- 3. Dlaczego poniższy kod jest kompilowany bez błędów?
- 4. Dlaczego ten szablon kodu C++ nie jest kompilowany?
- 5. Dlaczego następujący kod z Cyclic Generics nie jest kompilowany?
- 6. Sprawdzanie zależności .NET przed uruchomieniem
- 7. Uruchom eslint przed uruchomieniem działa
- 8. PhantomJS: wstrzykiwanie skryptu przed uruchomieniem innych skryptów.
- 9. Dlaczego element nie jest wyświetlany przed ostrzeżeniem?
- 10. inicjującego: Sprawdź, czy wersja MSI jest zainstalowany przed uruchomieniem
- 11. Jak powstrzymać grails przed uruchomieniem w Intellijlu?
- 12. Ładowanie wszystkich obrazów przed uruchomieniem JQuery Slideshow
- 13. Inicjalizuj pole przed uruchomieniem super-konstruktora?
- 14. Składanie woluminu Docker-compose przed uruchomieniem
- 15. Ładowanie dumpa SQL przed uruchomieniem testów Django
- 16. Zatrzymaj aplikację przed uruchomieniem w tle?
- 17. Dlaczego kompilowany jest kod "foo :: foo :: foo :: foob"?
- 18. Dlaczego program Node.js jest skalowalny?
- 19. PCRE jest kompilowany bez obsługi UTF
- 20. Jak zatrzymać czas przed uruchomieniem w systemie Linux?
- 21. Dlaczego moduł podkreślenia nie jest dostępny w konsoli Node.js?
- 22. Dlaczego IndexedDB nie jest dostępny w pliku node.js?
- 23. Dlaczego plik node.js nie jest odpowiedni dla ciężkich aplikacji procesora?
- 24. W jaki sposób kompilowany jest aspx?
- 25. Czy JavaScript jest kompilowany czy dwu-przebiegowy?
- 26. Android Studio musi przebudować projekt przed każdym uruchomieniem.
- 27. Dzisiejsze awarie rozszerzeń przed uruchomieniem na iOS 8.1.2
- 28. Czy można wyświetlić niestandardową wiadomość w oknie popup przed uruchomieniem?
- 29. Wymusza Eclipse, aby czyścił projekt automatycznie przed każdym uruchomieniem
- 30. Funkcje Node.js socket.send() nie kończą się przed zakończeniem
będzie odpowiedzieć na pytanie: http://java.dzone.com/articles/what-javascript-equivalent – alfasin
tłumaczy Nowoczesne JavaScript jest naprawdę nie tłumaczy jednak adaptacyjne kompilatory. Jednak języki dynamiczne są zwykle wolniejsze do wykonania (z powodu sprawdzania typów) niż języki statyczne, więc prawdopodobnie nie będzie tak szybko, jak Java. –
Posiadanie statycznego pisania (lub "silnego pisania", jeśli sprawia, że czujesz się dobrze) jest jednym z czynników, który poprawia jakość niektórych języków, ale nie jest to jedyny czynnik. To, co mówię, to to, że nie można przetłumaczyć wydajności w konkretnych testach porównawczych na wybór technologii na wysokim poziomie. Na przykład regularnie korzystam z Grails (JVM) i Express (node.js). Byłbym szczęśliwy, gdyby Grails zaczął w mniej niż 10 sekund, ale Express, który oferuje mi porównywalną funkcjonalność, zaczyna się w milisekundach. –