Mức độ biên dịch của trình biên dịch đóng cửa

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--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ới ADVANCED_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.

Ảnh chụp màn hình giao diện người dùng

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