ระดับการรวบรวมคอมไพล์

การคอมไพล์ 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 ให้คลิกปุ่มปุ่มตัวเลือกในส่วนการเพิ่มประสิทธิภาพของอินเทอร์เฟซ

ภาพหน้าจอของ UI

ใน 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