Trình biên dịch đóng cửa cho phép bạn chọn trong 3 cấp độ tổng hợp, từ việc xoá khoảng trắng và nhận xét đơn giản đến chuyển đổi mã linh hoạt.
dành cho WHITESPACE_ONLY
Cấp độ biên dịch WHITESPACE_ONLY
sẽ xóa các nhận xét khỏi mã của bạn, đồng thời xóa các dấu ngắt dòng, khoảng trắng không cần thiết, dấu câu không liên quan (chẳng hạn như dấu ngoặc đơn và dấu chấm phẩy) cũng như các khoảng trắng khác. Chức năng JavaScript đầu ra giống với JavaScript nguồn.
Việc chuyển đổi các tính năng ngôn ngữ sẽ vẫn diễn ra nếu chế độ ngôn ngữ đầu ra được yêu cầu khác với chế độ ngôn ngữ nhập.
Vui lòng xem --language_in
và --language_out
trong phần Cờ và tuỳ chọn.
Cấp độ biên dịch này sẽ nén ít nhất ba cấp.
TỐI ƯU HOÁ
Cấp độ biên dịch SIMPLE_OPTIMIZATIONS
thực hiện
khoảng trắng và xoá nhận xét
giống như WHITESPACE_ONLY
, nhưng cũng thực hiện 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ẽ làm giảm đáng kể mã. Vì cấp SIMPLE_OPTIMIZATIONS
chỉ đổi tên các ký hiệu cục bộ thành hàm nên hàm này không ảnh hưởng đến hoạt động tương tác giữa JavaScript được biên dịch và JavaScript khác.
Việc biên dịch bằng SIMPLE_OPTIMIZATIONS
luôn giữ nguyên 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.
TỐI ƯU HOÁ
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
sẽ thêm nhiều phép biến đổi linh hoạt hơn trên toàn cầu để đạt được
độ nén cao nhất trong cả 3
cấp. Cấp ADVANCED_OPTIMIZATIONS
sẽ nén JavaScript tốt hơn so với cấp có thể có bằng các công cụ khác.
Để bật tính năng nén cực hạn này, ADVANCED_OPTIMIZATIONS
sẽ đưa ra những giả định rõ ràng về mã đã biên dịch. Nếu mã của bạn không tuân thủ các giả định đó, ADVANCED_OPTIMIZATIONS
sẽ tạo 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 biên dịch, trừ khi 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 đóng sẽ thay đổi tên các mã tham chiếu trong mã một cách không phù hợp, gây ra sự không khớp giữa tên trong mã 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 Biên dịch nâng cao và các phương thức mở rộng.
Các phép biến đổi ADVANCED_OPTIMIZATIONS
bao gồm:
- Đổi tên linh hoạt hơn:
Việc biên dịch bằng
SIMPLE_OPTIMIZATIONS
chỉ đổi tên các thông số và biến trong các hàm.ADVANCED_OPTIMIZATIONS
cũng đổi tên các biến toàn cục, tên hàm và thuộc tính. - xoá mã chết:
Việc biên dịch bằng
ADVANCED_OPTIMIZATIONS
sẽ xoá mã không thể truy cập được. Đ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, thì trình biên dịch có thể xoá mọi hàm, ngoại trừ các hàm đó khỏi kết quả. - nội tuyến toàn cầu:
Việc 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. Phép biến đổi này được gọi là "nội tuyến". Trình biên dịch chỉ thực hiện các chức năng cùng dòng khi xác định rằng cùng dòng là an toàn và tiết kiệm không gian. Việc biên dịch vớiADVANCED_OPTIMIZATIONS
cũng điều chỉnh hằng số cùng dòng và một số biến khi trình biên dịch xác định rằng nó có thể thực hiện việc này một cách an toàn.
Cách thiết lập cấp độ tổng hợp
Giao diện người dùng của dịch vụ Closure Compiler, API dịch vụ và ứng dụng đều có các phương thức khác nhau để đặt compilation_level
.
Trong giao diện người dùng dịch vụ Trình biên dịch đóng
Để đặt cấp độ biên dịch trong giao diện người dùng dịch vụ Trình biên dịch đóng cửa, hãy nhấp vào các nút chọn trong phần Tối ưu hoá của giao diện.
Trong API dịch vụ biên dịch đóng
Để đặt cấp độ biên dịch trong API dịch vụ Trình biên dịch đóng, hãy bao gồm một tham số yêu cầu có tên compilation_level
với giá trị WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
hoặc ADVANCED_OPTIMIZATIONS
như trong chương trình python sau:
#!/usr/bin/python2.4 import httplib, urllib, sys params = urllib.urlencode([ ('code_url', sys.argv[1]), ('compilation_level', 'ADVANCED_OPTIMIZATIONS'), ('output_format', 'text'), ('output_info', 'compiled_code'), ]) headers = { "Content-type": "application/x-www-form-urlencoded" } conn = httplib.HTTPSConnection('closure-compiler.appspot.com') conn.request('POST', '/compile', params, headers) response = conn.getresponse() data = response.read() print data conn.close()
Trong ứng dụng Closure Compiler
Để đặt cấp độ biên dịch trong ứng dụng Closure Compiler,
hãy bao gồ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