การคอมไพล์ Closure ช่วยให้คุณเลือกคอมไพล์ได้ 3 ระดับ ตั้งแต่การนําช่องว่างและความคิดเห็นง่ายๆ ออกไปจนถึงการเปลี่ยนรูปแบบโค้ดเชิงรุก
สีขาวเท่านั้น
ระดับการรวบรวมWHITESPACE_ONLY
จะนําความคิดเห็นออกจากโค้ด รวมถึงนําตัวแบ่งบรรทัด การเว้นวรรคที่ไม่จําเป็น เครื่องหมายวรรคตอนที่ไม่จําเป็น (เช่น วงเล็บและเซมิโคลอน) ออก JavaScript เอาต์พุตทํางานเหมือนกับ JavaScript ต้นทาง
การแสดงภาพฟีเจอร์ภาษาจะยังคงเกิดขึ้นหากโหมดภาษาเอาต์พุตที่ขอต่างจากโหมดภาษาในการป้อนข้อมูล
ดู --language_in
และ --language_out
ในแฟล็กและตัวเลือก
ระดับการรวบรวมนี้จะบีบอัดน้อยที่สุดของทั้ง 3 ระดับ
การเพิ่มประสิทธิภาพซิมการ์ด
ระดับการรวบรวมของ SIMPLE_OPTIMIZATIONS
จะทําให้มีช่องว่างและนําความคิดเห็นออกเหมือน WHITESPACE_ONLY
แต่จะเพิ่มประสิทธิภาพภายในนิพจน์และฟังก์ชันด้วย ซึ่งรวมถึงการเปลี่ยนชื่อตัวแปรและพารามิเตอร์ฟังก์ชันในเครื่องเป็นชื่อที่สั้นลง การเปลี่ยนชื่อตัวแปรเป็นชื่อที่สั้นลงจะทําให้โค้ดมีจํานวนน้อยลงอย่างมาก เนื่องจากระดับ SIMPLE_OPTIMIZATIONS
จะเปลี่ยนชื่อเฉพาะสัญลักษณ์ในเครื่องสําหรับฟังก์ชันเท่านั้น จึงไม่รบกวนการโต้ตอบระหว่าง JavaScript ที่คอมไพล์กับ JavaScript อื่นๆ
การคอมไพล์ด้วย SIMPLE_OPTIMIZATIONS
จะใช้ฟังก์ชันของ JavaScript ที่ถูกต้องตามไวยากรณ์เสมอ โดยที่โค้ดจะไม่เข้าถึงตัวแปรในเครื่องโดยใช้ชื่อสตริง (โดยใช้คําสั่ง eval()
เช่น หรือเรียกไปที่สตริงในฟังก์ชัน)
SIMPLE_OPTIMIZATIONS
เป็นระดับการรวบรวมเริ่มต้น
การเพิ่มประสิทธิภาพขั้นสูง
ระดับการคอมไพล์ ADVANCED_OPTIMIZATIONS
จะเปลี่ยนรูปแบบตาม SIMPLE_OPTIMIZATIONS
แต่จะเพิ่มการเปลี่ยนรูปแบบทั่วโลกในเชิงรุกมากขึ้นเพื่อให้ได้รับการบีบอัดสูงสุดทั้ง 3 ระดับ ระดับ ADVANCED_OPTIMIZATIONS
จะบีบอัด JavaScript ได้ดีเมื่อเทียบกับเครื่องมืออื่นๆ
ADVANCED_OPTIMIZATIONS
จะให้สมมติฐานที่ชัดเจนเกี่ยวกับโค้ดที่คอมไพล์เพื่อเปิดใช้การบีบอัดขั้นสูงสุดนี้ หากโค้ดไม่เป็นไปตามสมมติฐานเหล่านั้น ADVANCED_OPTIMIZATIONS
จะสร้างโค้ดที่ไม่ทํางาน
เช่น โค้ดที่คอมไพล์ด้วย ADVANCED_OPTIMIZATIONS
อาจใช้กับโค้ดที่ไม่ได้คอมไพล์ไม่ได้ เว้นแต่คุณจะทําตามขั้นตอนพิเศษเพื่อตรวจสอบความสามารถในการทํางานร่วมกัน หากไม่แจ้งฟังก์ชันและพร็อพเพอร์ตี้ภายนอกที่อ้างอิงในโค้ด Closure Compiler จะเปลี่ยนชื่อการอ้างอิงในโค้ดอย่างไม่เหมาะสม ทําให้ชื่อในโค้ดและโค้ดภายนอกไม่ตรงกัน
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเตรียมโค้ดสําหรับ ADVANCED_OPTIMIZATIONS
ได้ที่การรวบรวมขั้นสูงและการส่งออก
การเปลี่ยนรูปแบบ ADVANCED_OPTIMIZATIONS
ประกอบด้วย
- การเปลี่ยนชื่อที่รุนแรงขึ้น
คอมไพล์ด้วย
SIMPLE_OPTIMIZATIONS
จะเปลี่ยนชื่อพารามิเตอร์และตัวแปรภายในฟังก์ชันเท่านั้นADVANCED_OPTIMIZATIONS
ยังเปลี่ยนชื่อตัวแปรร่วม ชื่อฟังก์ชัน และพร็อพเพอร์ตี้อีกด้วย - การนําโค้ดตายออก
การรวบรวมด้วย
ADVANCED_OPTIMIZATIONS
จะนําโค้ดที่ไม่สามารถเข้าถึงได้ออก ซึ่งมีประโยชน์มากเมื่อใช้ร่วมกับไลบรารีขนาดใหญ่ หากคุณใช้ฟังก์ชันเพียงไม่กี่รายการจากไฟล์ไลบรารีขนาดใหญ่ คอมไพเลอร์จะนําทุกอย่างออก ยกเว้นฟังก์ชันเหล่านั้นจากเอาต์พุต - การระบุข้อมูลทั่วโลก:
คอมไพล์ด้วย
ADVANCED_OPTIMIZATIONS
จะแทนที่การเรียกใช้ฟังก์ชันบางรายการด้วยเนื้อหาของฟังก์ชัน การเปลี่ยนรูปแบบนี้เรียกว่า "ในบรรทัด" คอมไพเลอร์จะแสดงเฉพาะฟังก์ชันเมื่อระบุว่าอินไลน์ปลอดภัยและประหยัดพื้นที่ การคอมไพล์ด้วยADVANCED_OPTIMIZATIONS
มักจะมีค่าคงที่และตัวแปรบางอย่างเมื่อคอมไพเลอร์กําหนดว่าคอมโพเนนต์ดังกล่าวทํางานได้อย่างปลอดภัย
วิธีตั้งค่าระดับการรวบรวม
UI บริการ Closure Compiler, API บริการ และแอปพลิเคชันต่างก็มีวิธีการตั้งค่า compilation_level
ที่แตกต่างกัน
ใน UI บริการของ Closure Compiler
หากต้องการตั้งค่าระดับการรวบรวมใน UI บริการของ Closure Compiler ให้คลิกปุ่มปุ่มตัวเลือกในส่วนการเพิ่มประสิทธิภาพของอินเทอร์เฟซ
ใน Closure Compiler Service API
หากต้องการตั้งค่าระดับการรวบรวมใน Closure Compiler Service API ให้ใส่พารามิเตอร์คําขอชื่อ compilation_level
ด้วยค่า WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
หรือ ADVANCED_OPTIMIZATIONS
เช่น ในโปรแกรม Python ต่อไปนี้
#!/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()
ในแอปพลิเคชัน Closure Compiler
หากต้องการตั้งค่าระดับการรวบรวมในแอปพลิเคชัน Closure Compiler ให้ใส่แฟล็กบรรทัดคําสั่ง --compilation_level
ที่มีค่าเป็น WHITESPACE_ONLY
, SIMPLE
หรือ ADVANCED
ตามคําสั่งต่อไปนี้
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js