2012-11-20 37 views
9

Hiểu biết về JavaScript "biên dịch" của tôi là nó ngưng tụ và rút ngắn mã của bạn để tiết kiệm byte cuối cùng.JavaScript được biên dịch/biên dịch nhỏ so với JavaScript chưa nén về hiệu suất

Việc ngưng tụ hoặc rút gọn có làm cho JavaScript chạy nhanh hơn không?

Lấy ví dụ sau để xem xét:

var abcdefghijklmnopqrstuvwxyz = 1; 
// vs. 
var a=1; 
var b = function() { 
    // Here is a comment 
    // And another 
                                 // White space 
    return true; 
}; 

// vs. 

var b=function(){return true} 

Tôi chạy các ví dụ thông qua jsPerf with little or no difference.

Có thể biên dịch JavaScript làm cho nhanh hơn hoặc chậm hơn, ngoài việc lưu byte không?

+5

Những gì bạn đang đề cập đến không có trong bất kỳ cách biên dịch nào. Tôi khuyên bạn nên chỉnh sửa câu hỏi của mình. –

+0

Vì vậy, nếu tôi chạy JS của tôi thông qua trình biên dịch đóng cửa google, nó không có cách nào được biên dịch? https://developers.google.com/closure/compiler/ – Blowsie

+0

javascript là javascript. Công cụ js có thể tùy chọn biên dịch javascript, nhưng bản thân nó không được biên dịch theo bất kỳ cách nào. Bất kỳ lợi ích hiệu suất nào là do viết lại mã hoặc không đáng kể (như trong ví dụ của bạn.) – Zirak

Trả lời

16

Có, việc biên soạn theo ý nghĩa của các biến đổi được áp dụng bởi một cái gì đó như Google Closure Compiler có thể làm cho tập lệnh của bạn chạy nhanh hơn. Hãy xem xét ví dụ rất đơn giản này:

var x = ["hello", "james"].join(" "); 

Đó biên dịch để:

var x="hello james"; 

Đó là cả hai mã ít hơn và nhanh hơn để chạy. Rõ ràng đó là một ví dụ ngớ ngẩn. Tôi hy vọng bạn sẽ tự viết phiên bản đã biên dịch. Tuy nhiên, nó chứng minh rằng Closure có khả năng đưa ra những cải thiện về hiệu suất cũng như cải thiện kích thước tệp.

Từ các tài liệu Đóng cửa (nhấn mạnh thêm):

Các Closure Compiler là một công cụ để làm cho tải JavaScript và chạy nhanh hơn. Nó là một trình biên dịch thực sự cho JavaScript. Thay vì biên dịch từ một ngôn ngữ nguồn sang mã máy, nó biên dịch từ JavaScript sang JavaScript tốt hơn.

Sửa

Đối với một ví dụ về trình biên dịch Đóng cửa thực sự tăng kích thước của một tập tin JavaScript trong một nỗ lực để cung cấp những cải tiến hiệu suất, xem câu trả lời của tôi để this question.

+0

Tôi đoán javascript chưa được biên dịch cũng có tiềm năng sử dụng nhiều hơn 'bộ nhớ' so với javascript được biên dịch? – Blowsie

+0

@Blowsie - Đó có thể là ít khả năng hơn, vì những thứ bạn lưu trữ trong bộ nhớ sẽ không thay đổi do kết quả của việc biên dịch (và những thứ được lưu trữ không cần thiết sẽ bị thu gom rác). Nhưng có lẽ là có thể. –

+1

Vì vậy, trên thực tế nó không phải là một trình biên dịch mà là một công cụ mà các nhà tái cấu trúc cho hiệu suất. –

1

Giảm thiểu và không được rút gọn sẽ không tạo ra bất kỳ sự khác biệt nào về tốc độ thực thi. Sự khác biệt duy nhất có thể là phiên bản rút gọn sẽ nhanh hơn để phân tích cú pháp, nhưng ngay cả khi bạn có một tệp rất lớn (bạn sẽ không tìm thấy bất kỳ khác biệt nào với bài kiểm tra bạn chạy, nó chỉ là nhỏ).

chỉnh sửa: tuyên bố đầu tiên tôi đã thực hiện hợp lệ nếu bạn chỉ đang làm "cơ bản". Nếu bạn đang sử dụng trình biên dịch đóng cửa như James cho thấy, sau đó có thể có một số khác biệt nếu các công cụ Clousure sẽ tối ưu hóa mã của bạn ...

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