สุดยอดจาวาสคริปต์คอมเพรสเซอร์ [ปิด]


171

ตัวบีบอัด JavaScript ที่ดีที่สุดคืออะไร ฉันกำลังมองหาเครื่องมือที่:

  • ใช้งานง่าย
  • มีอัตราการบีบอัดสูง
  • สร้างผลลัพธ์ที่เชื่อถือได้ (ไม่ทำให้สับสน)

14
ใครรู้สถานการณ์ในปี 2011?
Dan

4
ตอนนี้เป็นปี 2012 และฉันคิดว่า UglifyJS และการปิดเป็นผู้ชนะฉันใช้ UglifyJS และมักจะทำให้กางเกงออกทุกอย่างอื่น
mkoistinen

ฉันใช้htmlcompressor.com/compressor.htmlสำหรับแอปหลาย jQuery Mobile ของฉัน ใช้ไฟล์ HTML ที่มีแท็ก <script> แล้วบีบอัด HTML, JavaScript และ CSS ทำงานเหมือนจับใจ
Anders

เป็นปี 2017 - อะไรคือสิ่งล่าสุด
Abhinav Singi

มันเป็นปี 2020 ด้วยการกำหนดค่าเริ่มต้น "ปลอดภัย" UglifyJS ชนะเล็กน้อยเพราะมันปลอดภัยมากกว่า สำหรับการใช้พลังงานขั้นสูงปิดคอมไพเลอร์มือตูด UglifyJS กับตัวเอง การปิดคอมไพเลอร์ด้วย ADVANCDED_OPTIMIZATIONS สามารถทำกลอุบายทุกประเภทที่ช่วยให้คุณปรับแต่งเวิร์กโฟลว์และโค้ดของคุณได้ในเวลาเดียวกัน ดูstackoverflow.com/a/50355530/5601591สำหรับตัวอย่างของสุดยอดการปิดคอมไพเลอร์ (หมายเหตุ: ฉันไม่สามารถหาโพสต์บล็อกที่เหมาะสมในที่อื่นดังนั้นฉันต้องอ้างอิงคุณไปยังโพสต์ที่ฉันเขียน)
Jack Giffin

คำตอบ:


149

ฉันเพิ่งเปิดตัวUglifyJSซึ่งเป็นตัวบีบอัด JavaScript ซึ่งเขียนใน JavaScript (ทำงานบนแพลตฟอร์มNodeJS Node.jsแต่สามารถแก้ไขได้อย่างง่ายดายเพื่อให้ทำงานบนเอนจิ้น JavaScript ใด ๆ เนื่องจากไม่จำเป็นต้องใช้Node.jsภายใน) มันเร็วกว่าทั้งYUI CompressorและGoogle Closureมากมันบีบอัดได้ดีกว่าYUIในสคริปต์ทั้งหมดที่ฉันทดสอบและปลอดภัยกว่าการปิด (รู้วิธีจัดการกับ "eval" หรือ "with")

นอกเหนือจากการลบช่องว่าง UglifyJS ยังทำสิ่งต่อไปนี้:

  • เปลี่ยนชื่อตัวแปรท้องถิ่น (โดยปกติจะเป็นอักขระเดียว)
  • รวมการประกาศ var ที่ต่อเนื่องกัน
  • หลีกเลี่ยงการใส่วงเล็บเครื่องหมายวงเล็บและอัฒภาคใด ๆ ที่ไม่จำเป็น
  • ปรับ IFs ให้เหมาะสม (ลบ "else" เมื่อตรวจพบว่าไม่จำเป็นต้องแปลง IFs เป็นตัวดำเนินการ &&, || หรือ? /: เมื่อเป็นไปได้เป็นต้น)
  • เปลี่ยนfoo["bar"]เป็นfoo.barที่เป็นไปได้
  • ลบเครื่องหมายคำพูดออกจากคีย์ในตัวอักษรวัตถุที่เป็นไปได้
  • แก้ไขการแสดงออกที่เรียบง่ายเมื่อสิ่งนี้นำไปสู่รหัสขนาดเล็ก (1 + 3 * 4 ==> 13)

PS: โอ้มันสามารถ "ตกแต่ง" เช่นกัน ;-)


17
เราใช้ uglify ในแอปพลิเคชันระดับองค์กร มันทำงานได้ดี
gyorgyabraham

คุณสามารถเปรียบเทียบกับ jsmin บนโหนดได้หรือไม่?
Gringo Suave

เมื่อเร็ว ๆ นี้ Uglify สายการโทร API ลดลง
Gadelkareem

@mishoo เฮ้ฉันรัก Uglify JS2 ของคุณ เครือข่ายของฉันไม่ทำงานวันนี้ ... ฉันต้องการใช้กับ Windows วิธีแก้ปัญหา? : o)
Hydroper

@mishoo ฉันแสดงลิงค์คอมไพล์ แต่ไม่ได้รับความคิดวิธีใช้งาน
Sachin Sarola

124

กลับมาที่คำถามนี้อีกไม่กี่ปีต่อมาUglifyJSดูเหมือนจะเป็นตัวเลือกที่ดีที่สุดในตอนนี้

ตามที่ระบุไว้ด้านล่างมันทำงานบนแพลตฟอร์ม NodeJS แต่สามารถแก้ไขได้อย่างง่ายดายเพื่อให้ทำงานบนเอนจิ้น JavaScript ใด ๆ

--- คำตอบเก่าด้านล่าง ---

Google เปิดตัวClosed Compilerซึ่งดูเหมือนว่าจะสร้างไฟล์ที่เล็กที่สุดเท่าที่เห็นที่นี่และที่นี่

ก่อนหน้านั้นมีตัวเลือกต่าง ๆดังนี้

โดยทั่วไปPackerทำงานได้ดีกว่าในการบีบอัดเริ่มต้น แต่ถ้าคุณกำลังจะ gzip ไฟล์ก่อนที่จะส่งลวด (ซึ่งคุณควรจะทำ) YUI Compressorจะมีขนาดเล็กที่สุด

การทดสอบทำในรหัส jQuery btw

  • ไลบรารี jQuery ดั้งเดิม 62,885 ไบต์, 19,758 ไบต์หลัง gzip
  • jQuery ลดขนาดด้วย JSMin 36,391 ไบต์, 11,541 ไบต์หลังจาก gzip
  • jQuery ลดขนาดด้วย Packer 21,557 ไบต์, 11,119 ไบต์หลัง gzip
  • jQuery ลดขนาดด้วย YUI Compressor 31,822 bytes, 10,818 bytes หลังจาก gzip

@ daniel jamesกล่าวถึงคอมเม้นต์คอมเพรสเซอร์ซึ่งแสดงให้เห็นว่า Packer เป็นผู้นำในการบีบอัดที่ดีที่สุดดังนั้นฉันเดาว่า ymmv


Packer มีตัวเลือกให้ปิด 'base62 encode' และสำหรับ jQuery มันบีบอัดขนาดเล็กกว่า yui หลังจาก gzip นี่เป็นเพราะ jquery ใช้ 'eval' และ 'with' ซึ่งป้องกันไม่ให้คอมเพรสเซอร์ 'ปลอดภัย' ทำการบีบอัดบางอย่าง แต่ Packer จะไม่สนใจมัน ไม่ปลอดภัยโดยทั่วไป แต่ jQuery ได้รับการทดสอบสำหรับ Packer
Daniel James

ลองใช้compressorrater.thruhere.netหากคุณไม่เชื่อฉัน
Daniel James

9
อย่าลืมข้อเสียของผู้แบ่งบรรจุ - เวลาในการบีบอัด
Nosredna

1
ระวังบางครั้งการปิด google อาจเป็นตัวบีบอัดที่แย่ที่สุด (เอาท์พุทใหญ่กว่าเดิม) - มันจะแปลงอักขระที่ไม่ใช่ ASCII ในสตริงเป็น\uxxxxตัวอักษรตามค่าเริ่มต้น .. ใช้เช่น--charset UTF-8(ถ้าคุณแน่ใจว่าคุณแจ้งให้เบราว์เซอร์ทราบ)
mykhal

ผลลัพธ์ของการปิดคอมไพเลอร์ไม่ทำงานสำหรับฉัน jscompress.com ใช้งานได้
codenamezero

43

YUI Compressorเป็นวิธีที่จะไป มันมีอัตราการบีบอัดที่ยอดเยี่ยมมีการทดสอบอย่างดีและมีการใช้งานในเว็บไซต์ยอดนิยมหลายแห่งและฉันแนะนำโดยส่วนตัวด้วย

ฉันใช้มันสำหรับโครงการของฉันโดยไม่มีข้อผิดพลาด JavaScript หรืออาการสะอึก และมีเอกสารที่ดี

ฉันไม่เคยใช้ความสามารถในการบีบอัด CSS แต่ก็มีอยู่เช่นกัน การบีบอัด CSS ทำงานได้ดีเช่นกัน

หมายเหตุ: แม้ว่า Dean Edwards / / packer / จะมีอัตราการบีบอัดที่ดีกว่า YUI Compressor แต่ฉันพบข้อผิดพลาดเล็กน้อยของ JavaScript เมื่อใช้งาน


5
Packer ดูดีในแง่ของขนาดไฟล์ แต่ปรากฎว่าเวลาที่ใช้ในการเปิดออกโดยปกติจะมากกว่าเมื่อเทียบกับเวลาที่ได้รับจากการถ่ายโอนไฟล์ขนาดเล็กผ่านทางหลอด การวัดประสิทธิภาพเบราว์เซอร์จริงส่วนใหญ่ที่ฉันเห็นมีช้ากว่าไฟล์ที่ไม่บีบอัดดิบที่ใช้กับ gzip ในแง่ของเวลาในการดำเนินการในเบราว์เซอร์
พันเอก Sponsz

นี่คือมาตรฐานหนึ่ง: ericmmartin.com/comparison-of-javascript-compression-methods
ผู้พัน Sponsz

นี่เป็นเวอร์ชั่นออนไลน์ของคอมเพรสเซอร์ในกรณีที่คุณไม่ต้องการจัดการกับการเรียกใช้จาวา: refresh-sf.com/yui
Bryan Legend

สคริปที่บีบอัดโดยใช้ packer ไม่จำเป็นต้องทำการแตกไฟล์ยกเว้นว่าคุณตรวจสอบตัวเลือกการเข้ารหัส Base62 (ซึ่งคุณไม่ควรทำเนื่องจากเป็น gzip ของคนธรรมดา - ฉันแน่ใจว่าเซิร์ฟเวอร์ที่ทันสมัยส่วนใหญ่รองรับ gzip) มีจุดในการ gzipping ไฟล์ที่เข้ารหัส base62 เนื่องจากไม่มีความซ้ำซ้อนเหลือที่จะใช้ประโยชน์ Packer รุ่นใหม่ล่าสุด (เวอร์ชั่นสุดท้าย) ไม่ได้แนะนำบั๊กไม่มีโอเวอร์เฮดในการเปิดหีบห่อ (ตราบใดที่คุณไม่ได้เข้ารหัส base62) และยังคงได้รับการบีบอัดมากที่สุด นอกจากนี้ยังมีรุ่นของบรรจุบรรทัดคำสั่ง เพียงแค่ติดตั้งโดยใช้ NPM npm install packerดังนี้ (= D
Aadit M Shah

8

ฉันใช้ShrinkSafeจากโครงการ Dojo - มันยอดเยี่ยมเพราะใช้ล่าม JavaScript ( Rhino ) เพื่อจัดการกับการหาสัญลักษณ์ในโค้ดและทำความเข้าใจขอบเขตของโค้ด ฯลฯ ซึ่งช่วยให้มั่นใจได้ว่าโค้ดจะทำงานเมื่อมันออกมา ปลายอีกด้านตรงข้ามกับเครื่องมือบีบอัดจำนวนมากที่ใช้ regex ทำเช่นเดียวกัน (ซึ่งไม่น่าเชื่อถือ)

จริง ๆ แล้วฉันมีงาน MSBuild ในโครงการ Web Deploymentใน Visual Studio ปัจจุบันของฉันที่เรียกใช้สคริปต์ซึ่งจะเรียกใช้ไฟล์ JS ของโซลูชันทั้งหมดผ่าน ShrinkSafe ก่อนที่เราจะปรับใช้และทำงานได้ค่อนข้างดี

แก้ไข:โดยวิธีการที่ "ดีที่สุด" เปิดให้มีการอภิปรายเนื่องจากเกณฑ์สำหรับ "ดีที่สุด" จะแตกต่างกันไปขึ้นอยู่กับความต้องการของโครงการ ส่วนตัวฉันคิดว่า ShrinkSafe เป็นยอดที่ดี สำหรับบางคนที่คิดว่าขนาดที่เล็กที่สุด == ดีที่สุดมันจะไม่เพียงพอ

แก้ไข:มันเป็นที่น่าสังเกตว่าคอมเพรสเซอร์ YUI ยังใช้แรด



4

หากคุณใช้ Packer เพียงไปที่ตัวเลือก 'ลดขนาดตัวแปร' และ gzip โค้ดผลลัพธ์ ตัวเลือก base62 ใช้สำหรับหากเซิร์ฟเวอร์ของคุณไม่สามารถส่งไฟล์ gzipped Packer ที่มี 'shrink vars' จะสามารถบีบอัด YUI ได้ดีขึ้น แต่สามารถแนะนำข้อบกพร่องได้หากคุณข้ามเซมิโคลอนไปที่ไหนสักแห่ง

base62 นั้นเป็น gzip ของคนจนซึ่งเป็นสาเหตุที่รหัส gzipping base62-ed ให้ไฟล์ที่ใหญ่กว่า gzipping shrink-var-ed code





1

นี่คือสคริปต์บีบอัด YUI ( Byuic ) ที่ค้นหา js และ css ทั้งหมดลงในพา ธ และบีบอัด / (เป็นทางเลือก) ทำให้พวกเขางงงวย ยินดีที่ได้รวมเข้ากับกระบวนการสร้าง



1

KJScompress

http://opensource.seznam.cz/KJScompress/index.html

Kjscompress / csskompress เป็นชุดของสองแอปพลิเคชัน (kjscompress a csscompress) เพื่อลบช่องว่างและความคิดเห็นที่ไม่สำคัญออกจากไฟล์ที่มี JavaScript และ CSS ทั้งคู่เป็นแอพพลิเคชั่นบรรทัดคำสั่งสำหรับระบบปฏิบัติการ GNU / Linux


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.