2011-10-18 123 views
15

Tôi có một JavaScript khá lớn cho trang HTML cho một thiết bị.Trình biên dịch JavaScript ngay trong thời gian

Nhưng hơi chậm. Tôi đã thử nén các tệp JavaScript nhưng vẫn không thỏa đáng.

Vì vậy, tôi đã suy nghĩ, có thể làm cho nó như là một "Chỉ trong thời gian" được biên dịch chuyển đổi thành mã máy và sử dụng nó? (Hy vọng hiểu biết của tôi là chính xác) Tôi sử dụng trình duyệt dựa trên WebKit.

Bất kỳ ai vui lòng đã thực hiện việc này, vui lòng cung cấp liên kết đến trang "Cách thực hiện" hoặc thông tin giống nhau.

+8

Một công cụ JavaScript sẽ luôn biên dịch "đúng lúc"; bạn không thể phục vụ mã nhị phân JavaScript hoặc một cái gì đó như thế. Nó không bao giờ là một vấn đề, mặc dù. Bạn có chắc chắn rằng bạn không thể triển khai tải chậm, để nội dung chỉ được tải/tìm nạp khi bạn cuộn thứ gì đó vào chế độ xem? – pimvdb

+0

@pimvdb Bây giờ bạn có thể chạy mã asm.js biên dịch sẵn trong tất cả các trình duyệt hiện đại sử dụng Emscripten. – niutech

Trả lời

49

Cả Safari và Chrome đều đã biên soạn JIT cho Javascript. Trên thực tế, trình duyệt duy nhất sử dụng rộng rãi không phải là IE8 và trước đó. Đây là một trong những lý do chính tại sao IE8 chậm hơn rất nhiều so với các đối thủ trong những ngày này.

Nhưng đọc giữa các dòng câu hỏi của bạn, tôi đoán là bạn không hoàn toàn hiểu được biên dịch JIT là gì. Việc biên dịch JIT xảy ra trên trình duyệt; bạn không cần thay đổi mã của mình theo bất kỳ cách nào để trình duyệt có thể thực hiện biên dịch JIT trên đó cho bạn.

Điều gì có vẻ như bạn đang thực sự nghĩ đến là biên dịch bytecode, chẳng hạn như Java. Bytecode này là một ngôn ngữ được biên dịch nửa chiều hiệu quả, sau đó chính nó được biên dịch JIT khi bạn chạy chương trình. Nếu đây là những gì bạn đang nghĩ đến, tôi có thể xác nhận rằng đây không phải là tùy chọn cho mã Javascript dựa trên trình duyệt.

Google đã sử dụng công nghệ 'Native Client' (NaCl), công cụ này cho phép bạn cung cấp mã được biên dịch cho trình duyệt nhưng chưa có sẵn ngoại trừ các phiên bản phát triển của Chrome.

Trong mọi trường hợp, việc biên dịch có thể làm cho mã của bạn chạy nhanh hơn, nhưng nó sẽ không giải quyết được vấn đề cơ bản vì sao nó chạy chậm, có khả năng là một điều tốt hơn để giải quyết. (thậm chí biên dịch mã sẽ thực hiện xấu nếu nó có nút cổ chai, biên dịch trong chính nó không kỳ diệu làm cho mã chậm hơn)

Nếu bạn muốn tìm hiểu lý do tại sao kịch bản của bạn chạy chậm, tôi khuyên bạn nên sử dụng một công cụ lược tả, chẳng hạn như cái được tích hợp vào Firebug hoặc Công cụ dành cho nhà phát triển của Chrome. Điều này sẽ giúp bạn xác định các phần của mã đang chạy chậm.

Bạn cũng có thể thử công cụ YSlow, công cụ này cũng có thể cung cấp thông tin hữu ích về hiệu suất javascript.

Bạn cũng nói rằng bạn đã nén tập lệnh của mình để cố gắng làm cho tập lệnh chạy nhanh hơn. Nén tập lệnh sẽ giúp tải xuống tải xuống nhanh hơn (vì đó là tệp nhỏ hơn) nhưng sẽ không làm bất kỳ điều gì cho tốc độ mà mã chạy.

Tôi hy vọng điều đó sẽ hữu ích.

+0

@pimvdb - đủ công bằng; Lần cuối cùng tôi nhìn nó là trong dev, nhưng Chrome di chuyển nhanh chóng, và tôi đã không được giữ lên. Tuy nhiên, nó chỉ có trong Chrome và điều này không phù hợp để sử dụng chung trên web. – Spudley

+0

Xin lỗi tôi đã gây nhầm lẫn. Nó xuất hiện nó chưa. – pimvdb

+0

@Spudley Cảm ơn bạn đã hiểu rõ hơn. Như tôi đã đề xuất, tôi đã bắt đầu lập hồ sơ và tìm ra nơi cần thời gian.Vì ứng dụng HTML đã được đưa ra bởi một số cơ thể khác, phải mất rất nhiều thời gian và năng lượng để làm cho chúng thay đổi mã. Theo tôi, JavaScript chủ yếu sử dụng String Compare cho nhiều thứ vì thế tôi đã thực hiện "Nén" hoặc sử dụng "Clouser Compiler" để tối ưu hóa JavaScript. – hari

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