Kompresor JavaScript terbaik [ditutup]

171

Apa kompresor JavaScript terbaik yang tersedia? Saya mencari alat yang:

  • mudah digunakan
  • memiliki tingkat kompresi yang tinggi
  • Menghasilkan hasil akhir yang andal (tidak mengacaukan kode)
Ron Harlev
sumber
14
Adakah yang tahu situasi di tahun 2011?
Dan
4
Sekarang tahun 2012, dan saya pikir UglifyJS dan Closure adalah pemenangnya, saya menggunakan UglifyJS dan biasanya mengalahkan celana dari yang lainnya.
mkoistinen
Saya menggunakan htmlcompressor.com/compressor.html untuk aplikasi multi-halaman jQuery Mobile saya. Dibutuhkan file HTML dengan tag <script> dan kompres HTML, JavaScript, dan CSS. Bekerja seperti pesona.
Anders
Ini 2017 - Apa yang terbaru sekarang?
Abhinav Singi
Ini tahun 2020. Dengan konfigurasi default "aman", UglifyJS sedikit menang karena lebih "aman." Untuk penggunaan daya tingkat lanjut, Closure Compiler menyerahkan pantat UglifyJS ke dirinya sendiri. Closure Compiler dengan ADVANCDED_OPTIMIZATIONS dapat melakukan segala macam trik yang membantu Anda mengoptimalkan alur kerja dan kode Anda secara bersamaan. Lihat stackoverflow.com/a/50355530/5601591 untuk contoh-contoh kehebatan Closure Compiler (DISCLAIMER: Saya tidak dapat menemukan posting blog yang cocok di tempat lain, jadi saya harus mengarahkan Anda ke posting yang saya tulis).
Jack Giffin

Jawaban:

149

Saya baru-baru ini merilis UglifyJS , kompresor JavaScript yang ditulis dalam JavaScript (berjalan pada platform NodeJS Node.js , tetapi dapat dengan mudah dimodifikasi untuk dijalankan pada mesin JavaScript apa pun, karena tidak perlu Node.jsinternal). Ini jauh lebih cepat daripada Kompresor YUI dan Google Penutupan , kompres lebih baik daripada YUI pada semua skrip yang saya uji, dan lebih aman daripada Closure (tahu untuk berurusan dengan "eval" atau "dengan").

Selain penghapusan spasi putih, UglifyJS juga melakukan hal berikut:

  • mengubah nama variabel lokal (biasanya menjadi karakter tunggal)
  • bergabung dengan deklarasi var berturut-turut
  • menghindari memasukkan tanda kurung, paren, dan titik koma yang tidak dibutuhkan
  • mengoptimalkan IF (menghilangkan "orang lain" ketika mendeteksi bahwa itu tidak diperlukan, mengubah IF menjadi operator &&, || or? /: bila memungkinkan, dll.).
  • berubah foo["bar"]menjadi foo.barjika memungkinkan
  • menghapus tanda kutip dari kunci dalam objek literal, jika memungkinkan
  • menyelesaikan ekspresi sederhana saat ini mengarah ke kode yang lebih kecil (1 + 3 * 4 ==> 13)

PS: Oh juga bisa "mempercantik". ;-)

mishoo
sumber
17
Kami menggunakan uglify dalam aplikasi kelas perusahaan. Ini melakukan pekerjaan dengan baik.
gyorgyabraham
Bisakah Anda membandingkan dengan jsmin pada node?
Gringo Suave
baru-baru ini Uglify menjatuhkan panggilan API
Gadelkareem
@mishoo Hei, saya suka JS2 Uglify Anda. Jaringan saya tidak berfungsi dengan baik hari ini ... Saya ingin menggunakannya di Windows. Beberapa solusi? : o)
Hydroper
@ishoo Saya menunjukkan tautan git tetapi tidak mendapatkan ide bagaimana menggunakannya
Sachin Sarola
124

Meninjau kembali pertanyaan ini beberapa tahun kemudian, UglifyJS , tampaknya menjadi pilihan terbaik seperti sekarang.

Seperti yang dinyatakan di bawah, ini berjalan pada platform NodeJS, tetapi dapat dengan mudah dimodifikasi untuk dijalankan di mesin JavaScript apa pun.

--- Jawaban lama di bawah ---

Google merilis Closure Compiler yang tampaknya menghasilkan file terkecil sejauh yang terlihat di sini dan di sini

Sebelumnya berbagai opsi adalah sebagai berikut

Pada dasarnya Packer melakukan pekerjaan yang lebih baik pada kompresi awal, tetapi jika Anda akan melakukan gzip file sebelum mengirimnya pada kabel (yang seharusnya Anda lakukan) Kompresor YUI mendapatkan ukuran akhir terkecil.

Tes dilakukan pada kode jQuery btw.

  • Pustaka jQuery asli 62.885 byte, 19.758 byte setelah gzip
  • jQuery diperkecil dengan JSMin 36.391 byte, 11.541 byte setelah gzip
  • jQuery diperkecil dengan Packer 21.557 byte, 11.119 byte setelah gzip
  • jQuery diperkecil dengan Kompresor YUI 31.822 byte, 10.818 byte setelah gzip

@ daniel james menyebutkan di komentar compressorrater yang menunjukkan Packer memimpin grafik dalam kompresi terbaik, jadi saya kira ymmv

Menepuk
sumber
Packer memiliki opsi untuk 'base62 encode' off - dan untuk jQuery kompres lebih kecil dari yui setelah gzip. Ini karena jquery menggunakan 'eval' dan 'with' yang mencegah kompresor 'aman' melakukan kompresi tertentu, tetapi packer mengabaikannya. Secara umum tidak aman tetapi jQuery diuji untuk Packer.
Daniel James
Juga, coba compressorrater.thruhere.net jika Anda tidak percaya kepada saya.
Daniel James
9
Jangan lupa downside ke packer - waktu dekompresi.
Nosredna
1
hati-hati, penutupan google kadang-kadang bisa menjadi kompresor terburuk (output bahkan lebih besar dari aslinya) - itu mengubah karakter non-ascii dalam string ke \uxxxxliteral secara default .. gunakan mis --charset UTF-8( gunakan jika (Anda yakin Anda membiarkan browser mengetahuinya entah bagaimana)
mykhal
Output ClosureCompiler tidak berfungsi untuk saya. jscompress.com berfungsi
codenamezero
43

Kompresor YUI adalah cara untuk pergi. Ini memiliki tingkat kompresi yang hebat, diuji dengan baik dan sedang digunakan di antara banyak situs top, dan, yah, secara pribadi direkomendasikan oleh saya.

Saya telah menggunakannya untuk proyek-proyek saya tanpa satu kesalahan JavaScript atau cegukan. Dan memiliki dokumentasi yang bagus.

Saya tidak pernah menggunakan kemampuan kompresi CSS-nya, tetapi mereka ada juga. Kompresi CSS juga berfungsi dengan baik.

Catatan: Walaupun Dean Edwards / packer / mencapai tingkat kompresi yang lebih baik daripada Kompresor YUI, saya mengalami beberapa kesalahan JavaScript saat menggunakannya.

kamens
sumber
5
Packer terlihat bagus dalam hal ukuran file tetapi ternyata waktu yang dihabiskan untuk membongkar biasanya lebih besar daripada keuntungan waktu mentransfer file yang lebih kecil melalui tabung. Sebagian besar tolok ukur browser yang sebenarnya saya lihat lebih lambat daripada file mentah terkompresi yang disajikan dengan gzip dalam hal waktu untuk dieksekusi di browser.
Kolonel Sponsz
Inilah salah satu tolok ukur: ericmmartin.com/comparison-of-javascript-compression-methods
Kolonel Sponsz
Berikut ini adalah versi online kompresor jika Anda tidak ingin berurusan dengan menjalankan java: refresh-sf.com/yui
Bryan Legend
Script yang dikompres menggunakan packer tidak perlu dibongkar kecuali Anda memeriksa opsi encode Base62 (yang seharusnya tidak Anda lakukan karena itu adalah gzip awam - Saya yakin sebagian besar server modern mendukung gzip). Tidak ada gunanya gzipping file yang disandikan base62 karena tidak ada redundansi yang tersisa untuk dieksploitasi. Versi terbaru dari pengepak (versi terakhir) tidak memperkenalkan bug, tidak memiliki overhead yang tidak terurai (selama Anda tidak melakukan encode base62), dan masih mencapai kompresi terbanyak. Juga sekarang ada versi baris perintah dari packer. Hanya menginstalnya menggunakan NPM sebagai berikut: npm install packer. (= D
Aadit M Shah
8

Saya menggunakan ShrinkSafe dari proyek Dojo - ini luar biasa karena ia benar-benar menggunakan penerjemah JavaScript ( Badak ) untuk berurusan dengan menemukan simbol dalam kode dan memahami ruang lingkup mereka, dll. Yang membantu memastikan bahwa kode tersebut akan berfungsi ketika keluar. ujung lainnya, berbeda dengan banyak alat kompresi yang menggunakan regex untuk melakukan hal yang sama (yang tidak dapat diandalkan).

Saya benar-benar memiliki tugas MSBuild dalam Proyek Penerapan Web dalam solusi Visual Studio saya saat ini yang menjalankan skrip yang pada gilirannya menjalankan semua file JS solusi melalui ShrinkSafe sebelum kami menyebarkan dan bekerja dengan cukup baik.

EDIT: Omong-omong, "terbaik" terbuka untuk diperdebatkan, karena kriteria untuk "terbaik" akan bervariasi tergantung pada kebutuhan proyek. Secara pribadi, saya pikir ShrinkSafe adalah keseimbangan yang baik; untuk beberapa orang yang berpikir ukuran terkecil == terbaik, itu tidak akan cukup.

EDIT: Perlu dicatat bahwa kompresor YUI juga menggunakan Badak.

Jason Bunting
sumber
5

Coba JSMin , dapatkan C #, Java, C dan port lain dan juga tersedia.

chakrit
sumber
Apakah port C # telah dipindahkan / dihapus?
Greg B
4

Jika Anda menggunakan Packer, cukup jauh opsi 'menyusut variabel' dan gzip kode yang dihasilkan. Opsi base62 hanya untuk jika server Anda tidak dapat mengirim file yang di-gzip. Packer dengan 'shrink vars' menghasilkan kompresi YUI yang lebih baik, tetapi dapat memperkenalkan bug jika Anda melewatkan tanda titik koma di suatu tempat.

base62 pada dasarnya adalah gzip orang miskin, itulah sebabnya gzipping kode base62-ed memberi Anda file yang lebih besar daripada gzipping kode shrink-var-ed.

jcoglan
sumber
1

Berikut ini adalah skrip kompresor YUI ( Byuic ) yang menemukan semua js dan css jalan dan kompres / (opsional) mengaburkan mereka. Bagus untuk diintegrasikan ke dalam proses pembangunan.

Jimg
sumber
1

KJScompress

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

Kjscompress / csskompress adalah kumpulan dua aplikasi (kjscompress a csscompress) untuk menghapus spasi putih kosong dan komentar dari file yang berisi JavaScript dan CSS. Keduanya adalah aplikasi baris perintah untuk sistem operasi GNU / Linux.

MicTech
sumber
1

Js Crush adalah kompresor yang baik untuk digunakan setelah Anda melakukan minifikasi.

Alex
sumber