ระดับการคอมไพล์ของ Closure Compiler

Closure Compiler ช่วยให้คุณเลือกการคอมไพล์ได้ 3 ระดับ ตั้งแต่การนำช่องว่างและความคิดเห็นออกอย่างง่าย ไปจนถึงการแปลงโค้ดอย่างเข้มงวด

WHITESPACE_ONLY

ระดับการคอมไพล์ WHITESPACE_ONLY จะนำความคิดเห็นออกจากโค้ด และยังนำการขึ้นบรรทัดใหม่ ช่องว่างที่ไม่จำเป็น เครื่องหมายวรรคตอนที่ไม่เกี่ยวข้อง (เช่น วงเล็บและเครื่องหมายอัฒภาค) และ การเว้นวรรคอื่นๆ ออกด้วย JavaScript เอาต์พุตมีฟังก์ชันการทำงานเหมือนกับ JavaScript ต้นฉบับทุกประการ

การแปลงภาษาของฟีเจอร์ภาษาจะยังคงเกิดขึ้นหากโหมดภาษาเอาต์พุตที่ขอ แตกต่างจากโหมดภาษาอินพุต ดู --language_in และ --language_out ใน Flags และตัวเลือก

ระดับการคอมไพล์นี้มีการบีบอัดน้อยที่สุดใน 3 ระดับ

SIMPLE_OPTIMIZATIONS

SIMPLE_OPTIMIZATIONSระดับการคอมไพล์จะWHITESPACE_ONLY นำช่องว่างและความคิดเห็นออกเหมือนกับ WHITESPACE_ONLY แต่ยังทำการเพิ่มประสิทธิภาพ ภายในนิพจน์และฟังก์ชัน รวมถึงเปลี่ยนชื่อตัวแปร และพารามิเตอร์ฟังก์ชันในเครื่องให้สั้นลงด้วย การเปลี่ยนชื่อ ตัวแปรให้สั้นลงจะช่วยให้โค้ดมีขนาดเล็กลงอย่างมาก เนื่องจากระดับ SIMPLE_OPTIMIZATIONS เปลี่ยนชื่อเฉพาะสัญลักษณ์ที่อยู่ในฟังก์ชัน จึงไม่ รบกวนการโต้ตอบระหว่าง JavaScript ที่คอมไพล์แล้วกับ JavaScript อื่นๆ

การคอมไพล์ด้วย SIMPLE_OPTIMIZATIONS จะรักษาฟังก์ชันการทำงานของ JavaScript ที่ถูกต้องตามไวยากรณ์ไว้เสมอ โดยที่โค้ดต้องไม่เข้าถึงตัวแปรภายในโดยใช้ชื่อสตริง (โดย ใช้คำสั่ง eval() เป็นต้น หรือโดยการเรียก toString ในฟังก์ชัน)

SIMPLE_OPTIMIZATIONS คือระดับการคอมไพล์เริ่มต้น

ADVANCED_OPTIMIZATIONS

ADVANCED_OPTIMIZATIONSระดับการคอมไพล์จะทำการแปลง เช่นเดียวกับ SIMPLE_OPTIMIZATIONS แต่ เพิ่มการแปลงทั่วโลกที่ดุดันมากขึ้นหลากหลายรูปแบบเพื่อให้ การบีบอัดสูงสุดในทั้ง 3 ระดับ ADVANCED_OPTIMIZATIONSระดับจะบีบอัด JavaScript ได้ดีกว่าเครื่องมืออื่นๆ

หากต้องการเปิดใช้การบีบอัดขั้นสูงนี้ ADVANCED_OPTIMIZATIONS จะต้องมี สมมติฐานที่ชัดเจน เกี่ยวกับโค้ดที่คอมไพล์แล้ว หากโค้ดไม่เป็นไปตาม สมมติฐานเหล่านั้น ADVANCED_OPTIMIZATIONS จะ สร้างโค้ดที่ไม่ทำงาน

เช่น โค้ดที่คอมไพล์ด้วย ADVANCED_OPTIMIZATIONS อาจใช้กับโค้ดที่ไม่ได้คอมไพล์ไม่ได้ เว้นแต่คุณจะทำตามขั้นตอนพิเศษเพื่อให้มั่นใจว่าสามารถทำงานร่วมกันได้ หากคุณไม่ติดแฟล็กฟังก์ชันและพร็อพเพอร์ตี้ภายนอกที่อ้างอิงในโค้ด Closure Compiler จะเปลี่ยนชื่อการอ้างอิงในโค้ดอย่างไม่เหมาะสม ซึ่งจะทำให้ชื่อในโค้ดและในโค้ดภายนอกไม่ตรงกัน

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเตรียมโค้ด สำหรับ ADVANCED_OPTIMIZATIONS ได้ที่การคอมไพล์ขั้นสูงและ Externs

การแปลงADVANCED_OPTIMIZATIONSมีดังนี้

  • การเปลี่ยนชื่อที่เข้มงวดมากขึ้น:

    การคอมไพล์ด้วย SIMPLE_OPTIMIZATIONS จะเปลี่ยนชื่อ พารามิเตอร์และตัวแปรภายใน ฟังก์ชันเท่านั้น ADVANCED_OPTIMIZATIONS ยังเปลี่ยนชื่อ ตัวแปรส่วนกลาง ชื่อฟังก์ชัน และพร็อพเพอร์ตี้ด้วย

  • การนำโค้ดที่ไม่ได้ใช้แล้วออก:

    การคอมไพล์ด้วย ADVANCED_OPTIMIZATIONS จะนำ โค้ดที่พิสูจน์ได้ว่าเข้าถึงไม่ได้ออก ซึ่งจะมีประโยชน์อย่างยิ่งเมื่อใช้ร่วมกับไลบรารีขนาดใหญ่ หากคุณใช้ฟังก์ชันเพียงไม่กี่ฟังก์ชันจากไฟล์ไลบรารีขนาดใหญ่ คอมไพเลอร์จะนำทุกอย่างออกได้ ยกเว้นฟังก์ชันเหล่านั้นจากเอาต์พุต

  • การแทรกในบรรทัดทั่วโลก:

    การคอมไพล์ด้วย ADVANCED_OPTIMIZATIONS จะแทนที่ การเรียกฟังก์ชันบางรายการด้วยเนื้อหาของฟังก์ชัน การแปลงนี้เรียกว่า "การฝัง" คอมไพเลอร์จะแทรกฟังก์ชันก็ต่อเมื่อ พิจารณาแล้วว่าการแทรกนั้นปลอดภัยและช่วยประหยัดพื้นที่ การคอมไพล์ ด้วย ADVANCED_OPTIMIZATIONS จะยังแทรกค่าคงที่ และตัวแปรบางรายการเมื่อคอมไพเลอร์พิจารณาว่าทำได้อย่าง ปลอดภัย

วิธีกำหนดระดับการคอมไพล์

หากต้องการตั้งค่าระดับการคอมไพล์ในแอปพลิเคชัน Closure Compiler ให้ ใส่ Flag บรรทัดคำสั่ง --compilation_level พร้อม ค่า WHITESPACE_ONLY, SIMPLE หรือ ADVANCED ดังในคำสั่งต่อไปนี้

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js