2013-05-13 20 views
10

Emscripten có thể tạo mã nhanh hơn từ C/C++ so với mã JS được viết bằng tay, nghĩa là chúng ta nên viết mã mới trong C/C++ và biên dịch chúng để chạy trên Web?Khi asm.js nhanh hơn mã JS bình thường, tại sao tôi nên viết mã mới trong JS?

Tôi đọc Câu hỏi thường gặp về Emscripten, nó nói "Bằng mọi cách viết mã JavaScript mới.", Tại sao vậy?

+2

Đừng chạm vào C++ trừ khi bạn thực sự có thể * cảm thấy * sự khác biệt giữa JS và asm.js của bạn. – DCoder

+0

Rất hiếm khi JavaScript thực sự "làm" đủ để tạo ra sự khác biệt. Chắc chắn, có một số javascript mà mất một thời gian để làm công việc của nó, và có một số javascript viết xấu mà phải mất quá lâu để chạy. Nhưng biên dịch nó không thực sự giải quyết cái sau. –

+0

@allfox Trộn 2 thứ ở đây. 1. Việc biên dịch chéo từ C/C++ sang Javascript có thể nhanh hơn và 2. Sử dụng asm.js trên Javascript sẽ hầu như luôn nhanh hơn.Nhưng bạn có muốn biết về cái cũ hay cái sau? – abergmeier

Trả lời

12

asm.js không phải là cách nhanh hơn để thực thi mã Javascript-esque. Đó là một cách nhanh hơn để chạy mã đã được giảm xuống mức trừu tượng của mã máy. Bạn dường như đánh giá quá cao lợi ích:

  • Nếu bạn cho phép các nhà phát triển JS viết C++ như JS, bạn kết thúc với mã không nhanh bằng C++ có thể và thiếu sót.
  • Nhiều tắc nghẽn tiềm ẩn, thao tác DOM và độ trễ mạng, không bị ảnh hưởng bởi tốc độ mã của bạn đang chạy.
  • Đối với nhiều chương trình, tốc độ tăng từ việc triển khai ngôn ngữ nhanh hơn bị làm chậm bởi tốc độ tối ưu hóa cấp cao. Nói cách khác, làm công việc nhanh hơn một chút là tốt đẹp, nhưng không làm việc đó chút nào còn nhanh hơn.

Đi tuyến đường này có nhược điểm đáng kể cũng như:

  • Bạn phải ném đi mã làm việc của bạn, và viết lại nó (bao gồm cả lỗi) bằng một ngôn ngữ nhất trong nhóm của bạn chiến thắng' t biết gần như là tốt, nếu ở tất cả.
  • Hiện tại, công nghệ vẫn còn trong giai đoạn trứng nước. Bạn sẽ không đặt cược công ty của bạn, hoặc thậm chí là một sản phẩm quan trọng, trên đó. Ngay cả khi nó thành công, nó sẽ luôn là một công nghệ thích hợp so với JavaScript. Điều này không loại trừ nó cho công việc chuyên môn, nhưng nó sẽ làm cho nhiều điều khó khăn hơn.
  • IIUC, bạn không thể trực tiếp thực hiện hầu hết mọi thứ mà JS có thể thực hiện ngoài số crunching, bạn chỉ có thể gọi vào các hàm JS được cung cấp rõ ràng cho mô-đun asm.js. Đó là, bạn sẽ luôn cần ít nhất một bó mã keo trong Javascript, và (như đã đề cập ở trên) nếu điều này bao gồm các nút cổ chai của bạn, bạn đã không thực sự đạt được bất cứ điều gì.

Các loại chỉ mã mà tôi mong đợi để đạt được đủ từ asm.js sử dụng là:

  • hiện mã mà chưa được viết bằng JavaScript. Vì lý do duy nhất giúp bạn tiết kiệm hầu hết các rắc rối khi chuyển.
  • Việc thu thập số lượng lớn không tương tác với trình duyệt. (Hãy suy nghĩ: Bạn có thường xuyên làm điều này không? Và bạn có thực sự muốn trải qua nỗ lực viết nó trong C/C++ và kết nối nó với JS không?)
  • Nội dung, theo bản chất, ở cấp độ abmaction asm.js hỗ trợ, chẳng hạn như các trình biên dịch phát ra lệnh mã máy-esque.
+1

Tôi sẽ khuyến khích người dũng cảm thử khám phá các js trong bất kỳ mã trình diễn 3d nào trên mạng. Hoàn toàn không thể hiểu được. – meawoppl

Các vấn đề liên quan