Sự hiểu biết của tôi về công nghệ này là nó được biên dịch khi bay vào lắp ráp. Trên phổ tốc độ, nó chậm hơn Java nhưng nhanh hơn Ruby và Python. Về phía client, một thông dịch viên có ý nghĩa nhưng ở phía máy chủ, suy nghĩ đầu tiên của tôi là biên dịch trước khi chạy, hoặc ít nhất có tùy chọn để làm như vậy, là một kiến trúc tối ưu. Nếu JavaScript được biên dịch trước theo cách này thì nó có chạy nhanh hơn Java không? Hoặc là nó liên quan đến các ngôn ngữ gõ nhẹ có nghĩa là JavaScript sẽ luôn chậm hơn Java?Tại sao Node.js không được biên dịch trước khi chạy?
Trả lời
Một số Node.js là C++ và được biên dịch trước. Mặc dù sự hiểu biết của tôi là có một nỗ lực để giữ càng nhiều càng tốt trong Javascript càng tốt, nhưng khi hiệu năng kém thì C++ đã được sử dụng.
Node.js sẽ không thể thực hiện được nếu không có V8 JavaScript Engine, đó là những gì biên dịch javascript. Động cơ này nổi tiếng với tốc độ cực nhanh. Nó được xây dựng cho trình duyệt Chrome, nhưng hiệu năng cũng trả tiền trong Node.js.
Về hiệu suất của Node.js, dưới dạng máy chủ web, nó là ít nhất ngang hàng với các máy chủ web hàng đầu khác như Apache + PHP. Vì vậy, hiệu suất không phải là một vấn đề trong trường hợp sử dụng phổ biến. Điều đó nói rằng, có những công nghệ nhanh hơn. Erlang dựa trên các máy chủ được biết đến là nhanh hơn dưới tải đồng thời (thú vị, Erlang cũng là một ngôn ngữ động gõ).
Đối với các nhiệm vụ chuyên sâu cpu/gpu crunching số nguyên, Node.js không phải là lựa chọn tốt, trừ khi bạn làm nóng nó với Fabric Engine, trong trường hợp này có thể ngang bằng với C++.
Có một vài dự án hiện đang khám phá các vấn đề tốc độ với JavaScript:
- Dart - http://www.dartlang.org/support/faq.html. (Nó không chỉ về tốc độ nhưng đó là một phần của nó).
- Node Native - https://github.com/d5/node.native/
- 1. Tại sao biên dịch này?
- 2. Tại sao Python không đánh giá số học liên tục trước khi biên dịch sang bytecode?
- 3. Đường dẫn tải I18n không được đặt khi chạy "tài sản bin/cào: biên dịch trước"!
- 4. Tại sao Heroku trở lại 'devise/sessions.js không được biên dịch trước'?
- 5. Tại sao NULL không được xác định trước bởi trình biên dịch
- 6. Tại sao mã này không biên dịch?
- 7. tại sao --list.end() biên dịch?
- 8. Tại sao node.js không thể chạy trên shared hosting?
- 9. Tại sao python biên dịch nguồn thành bytecode trước khi diễn giải?
- 10. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 11. Tại sao nên sử dụng các tiêu đề được biên dịch trước (C/C++)?
- 12. Tại sao mã C này biên dịch?
- 13. Mã C# không được biên dịch có biên dịch thành IL và chạy trên CLR không?
- 14. Tại sao điều này lại biên dịch?
- 15. Tại sao erlang: foo() biên dịch?
- 16. sản xuất đường ray 'css không được biên dịch trước'
- 17. Tại sao biên dịch sbt không sao chép tài nguyên không được quản lý sang classpath?
- 18. Tại sao các tập lệnh Python chạy được chính không được biên dịch thành các tệp pyc như mô-đun?
- 19. Tại sao mã C# được biên dịch khi không hoạt động khi trình gỡ lỗi được đính kèm?
- 20. ActionView :: Mẫu :: Lỗi (960.css không được biên dịch trước)
- 21. Sự tò mò: Tại sao biểu thức <...> khi được biên dịch chạy nhanh hơn một DynamicMethod tối thiểu?
- 22. Tại sao trình biên dịch không biết địa chỉ của các biến cục bộ tại thời gian biên dịch?
- 23. Tại sao mã mẫu này biên dịch?
- 24. Tại sao biên dịch lỗi với enable_if
- 25. khi nào java nhanh hơn C++ (hoặc khi nào JIT nhanh hơn được biên dịch trước)?
- 26. Tại sao mã Haskell này biên dịch?
- 27. Tại sao biểu thức kết hợp chuỗi không biên dịch?
- 28. Tại sao không NSAssert này với biên dịch stringWithFormat?
- 29. Tại sao điều này không cung cấp lỗi biên dịch?
- 30. Tại sao "ELSE:" biên dịch trong vb.net?
này sẽ trả lời câu hỏi của bạn: http://java.dzone.com/articles/what-javascript-equivalent – alfasin
dịch viên JavaScript hiện đại là không thực sự thông dịch viên nhưng trình biên dịch thích ứng. Nhưng các ngôn ngữ động thường chậm hơn để thực thi (vì kiểm tra kiểu) so với các ngôn ngữ tĩnh, vì vậy nó có thể sẽ không nhanh như Java. –
Có gõ tĩnh (hoặc "gõ mạnh" nếu nó làm cho bạn cảm thấy tốt) là một yếu tố cung cấp cho một số ngôn ngữ một cải tiến hiệu suất, nhưng nó là xa yếu tố duy nhất. Điều tôi đang nói là bạn không nhất thiết phải dịch hiệu suất trong các tiêu chuẩn cụ thể thành một sự lựa chọn công nghệ cấp cao. Ví dụ, tôi thường xuyên sử dụng Grails (JVM) và Express (node.js). Tôi sẽ may mắn nếu Grails bắt đầu dưới 10 giây, nhưng Express, cung cấp cho tôi chức năng tương đương, bắt đầu bằng mili giây. –