Trình biên dịch Closure cho phép bạn chọn trong số 3 cấp độ biên dịch, từ việc xoá khoảng trắng và nhận xét đơn giản đến các biến đổi mã mạnh mẽ.
WHITESPACE_ONLY
Cấp độ biên dịch WHITESPACE_ONLY
sẽ xoá các nhận xét khỏi mã của bạn, đồng thời xoá dấu ngắt dòng, khoảng trắng không cần thiết, dấu chấm câu thừa (chẳng hạn như dấu ngoặc đơn và dấu chấm phẩy) và các khoảng trắng khác. JavaScript đầu ra có chức năng giống hệt JavaScript nguồn.
Quá trình chuyển đổi ngôn ngữ vẫn sẽ diễn ra nếu chế độ ngôn ngữ đầu ra được yêu cầu khác với chế độ ngôn ngữ đầu vào.
Hãy xem --language_in
và --language_out
trong phần Cờ và lựa chọn.
Cấp độ biên dịch này cung cấp mức nén thấp nhất trong 3 cấp độ.
SIMPLE_OPTIMIZATIONS
Cấp độ biên dịch SIMPLE_OPTIMIZATIONS
thực hiện việc xoá khoảng trắng và chú thích giống như WHITESPACE_ONLY
, nhưng cấp độ này cũng thực hiện các bước tối ưu hoá trong các biểu thức và hàm, bao gồm cả việc đổi tên các biến cục bộ và tham số hàm thành tên ngắn hơn. Việc đổi tên các biến thành tên ngắn hơn sẽ giúp mã nhỏ hơn đáng kể. Vì cấp độ SIMPLE_OPTIMIZATIONS
chỉ đổi tên các biểu tượng cục bộ cho các hàm, nên cấp độ này không can thiệp vào hoạt động tương tác giữa JavaScript đã biên dịch và JavaScript khác.
Quá trình biên dịch bằng SIMPLE_OPTIMIZATIONS
luôn giữ lại chức năng của JavaScript hợp lệ về mặt cú pháp, miễn là mã không truy cập vào các biến cục bộ bằng tên chuỗi (ví dụ: bằng cách sử dụng câu lệnh eval()
hoặc bằng cách gọi toString trên các hàm).
SIMPLE_OPTIMIZATIONS
là cấp độ biên dịch mặc định.
ADVANCED_OPTIMIZATIONS
Cấp độ biên dịch ADVANCED_OPTIMIZATIONS
thực hiện các phép biến đổi tương tự như SIMPLE_OPTIMIZATIONS
, nhưng thêm nhiều phép biến đổi chung mạnh mẽ hơn để đạt được mức nén cao nhất trong cả 3 cấp độ. Cấp ADVANCED_OPTIMIZATIONS
nén JavaScript vượt xa những gì có thể thực hiện bằng các công cụ khác.
Để bật chế độ nén cực mạnh này, ADVANCED_OPTIMIZATIONS
đưa ra các giả định mạnh mẽ về mã đã biên dịch. Nếu mã của bạn không tuân thủ những giả định đó, ADVANCED_OPTIMIZATIONS
sẽ tạo ra mã không chạy.
Ví dụ: mã được biên dịch bằng ADVANCED_OPTIMIZATIONS
có thể không hoạt động với mã chưa được biên dịch, trừ phi bạn thực hiện các bước đặc biệt để đảm bảo khả năng tương tác. Nếu bạn không gắn cờ các hàm và thuộc tính bên ngoài được tham chiếu trong mã của mình, Trình biên dịch Closure sẽ đổi tên các tham chiếu trong mã của bạn một cách không phù hợp, gây ra sự không khớp giữa các tên trong mã của bạn và trong mã bên ngoài.
Để tìm hiểu thêm về cách chuẩn bị mã cho ADVANCED_OPTIMIZATIONS
, hãy đọc bài viết Advanced Compilation and Externs (Biên dịch nâng cao và các tệp bên ngoài).
Các phép biến đổi ADVANCED_OPTIMIZATIONS
bao gồm:
- đổi tên tích cực hơn:
Quá trình biên dịch bằng
SIMPLE_OPTIMIZATIONS
chỉ đổi tên các tham số và biến trong các hàm.ADVANCED_OPTIMIZATIONS
cũng đổi tên các biến, tên hàm và thuộc tính chung. - xoá mã không dùng:
Quá trình biên dịch bằng
ADVANCED_OPTIMIZATIONS
sẽ xoá mã không thể truy cập. Điều này đặc biệt hữu ích khi kết hợp với các thư viện lớn. Nếu bạn chỉ sử dụng một vài hàm trong một tệp thư viện lớn, trình biên dịch có thể xoá mọi thứ, ngoại trừ những hàm đó khỏi đầu ra. - nội tuyến toàn cầu:
Quá trình biên dịch bằng
ADVANCED_OPTIMIZATIONS
sẽ thay thế một số lệnh gọi hàm bằng phần nội dung của hàm. Quá trình chuyển đổi này được gọi là "nội tuyến". Trình biên dịch chỉ nội tuyến các hàm khi xác định rằng việc nội tuyến là an toàn và tiết kiệm dung lượng. Biên dịch bằngADVANCED_OPTIMIZATIONS
cũng nội tuyến các hằng số và một số biến khi trình biên dịch xác định rằng có thể thực hiện một cách an toàn.
Cách đặt cấp độ biên dịch
Để đặt cấp độ biên dịch trong ứng dụng Closure Compiler, hãy thêm cờ dòng lệnh --compilation_level
với giá trị WHITESPACE_ONLY
, SIMPLE
hoặc ADVANCED
, như trong lệnh sau:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js