En iyi JavaScript kompresörü [kapalı]


171

Mevcut en iyi JavaScript kompresörü nedir? Ben bir araç arıyorum:

  • kullanımı kolay
  • yüksek sıkıştırma oranına sahiptir
  • Güvenilir sonuç sonuçları üretin (kodu bozmaz)

14
2011'de durumu bilen var mı?
Dan

4
Şimdi 2012 ve sanırım UglifyJS ve Closure kazananlar, UglifyJS kullanıyorum ve genellikle pantolonları diğer her şeyden atıyor.
mkoistinen

JQuery Mobile çok sayfalı uygulamam için htmlcompressor.com/compressor.html kullanıyorum . <script> etiketli bir HTML dosyası alır ve HTML, JavaScript ve CSS'yi sıkıştırır. Tıkır tıkır çalışıyor.
Anders

2017 - En son ne var?
Abhinav Singi

Varsayılan "güvenli" yapılandırmayla UglifyJS marjinal olarak kazanır, çünkü daha "güvenli" olur. Gelişmiş güç kullanımları için Closure Compiler, UglifyJS'nin kıçını kendisine verir. ADVANCDED_OPTIMIZATIONS özellikli Closure Derleyici, iş akışınızı ve kodunuzu aynı anda optimize etmenize yardımcı olan her türlü numarayı yapabilir. Bkz stackoverflow.com/a/50355530/5601591 Kapatma Derleyici en harikaları örnekleri için (YASAL UYARI: Ben yazdığım bir yazı sevk zorunda yüzden, başka yerde uygun bir blog yazısı bulamadık).
Jack Giffin

Yanıtlar:


149

Kısa süre önce JavaScript'te yazılmış bir JavaScript kompresörü olan UglifyJS'yi piyasaya sürdüm (NodeJS Node.js platformunda çalışır , ancak herhangi bir JavaScript motorunda çalışacak şekilde kolayca değiştirilebilir, çünkü herhangi bir Node.jsdahili işlem gerektirmez). Çok daha hızlı hem daha var YUI Compressor ve Google Kapatma daha iyi daha sıkıştırır, YUI bunu test tüm komut üzerine ve Kapanış ( "eval" veya "ile" başa bilir) daha güvenlidir.

Boşluk kaldırma dışında, UglifyJS ayrıca şunları yapar:

  • yerel değişken adlarını değiştirir (genellikle tek karakterlere)
  • ardışık değişken bildirimlerine katılır
  • gereksiz parantez, paren ve noktalı virgül yerleştirmekten kaçınır
  • IF'leri optimize eder (gerekmediğini tespit ettiğinde "else" öğesini kaldırır, IF'leri &&, || veya? /: operatörlerine vb. dönüştürür).
  • mümkün olana foo["bar"]dönüşürfoo.bar
  • Mümkünse nesne değişmezlerindeki anahtarlardan tırnak işaretleri kaldırır
  • daha küçük koda yol açtığında basit ifadeleri çözer (1 + 3 * 4 ==> 13)

PS: Oh, aynı zamanda "güzelleştirebilir". ;-)


17
Kurumsal sınıf bir uygulamada uglify kullanıyoruz. İyi bir iş çıkarıyor.
gyorgyabraham

Düğümdeki jsmin ile karşılaştırabilir misiniz?
Gringo Suave

son zamanlarda Uglify API çağrıları düştü
Gadelkareem

@mishoo Hey, Uglify JS2'nizi seviyorum. Ağım bugünlerde iyi çalışmıyor ... Bunu Windows'ta kullanmak istiyorum. Biraz çözüm? : o)
Hydroper

@mishoo Git bağlantısını gösterdim ama nasıl kullanacağım hakkında bir fikrim yok
Sachin Sarola

124

Bu soruyu birkaç yıl sonra tekrar gözden geçiren UglifyJS , şu an için en iyi seçenek gibi görünüyor.

Aşağıda belirtildiği gibi, NodeJS platformunda çalışır, ancak herhangi bir JavaScript motorunda çalışmak üzere kolayca değiştirilebilir.

--- Aşağıdaki eski cevap ---

Google , burada ve burada görüldüğü kadar en küçük dosyaları oluşturuyor gibi görünen Closure Compiler'ı yayınladı

Bundan önce çeşitli seçenekler aşağıdaki gibiydi

Temelde Packer ilk sıkıştırmada daha iyi bir iş çıkarır , ancak kabloyu (yapmalısınız) göndermeden önce dosyaları sıkıştırırsanız , YUI Kompresör en küçük nihai boyutu alır.

Testler jQuery kodu btw üzerinde yapılmıştır.

  • Orijinal jQuery kütüphanesi 62.885 bayt, gzip'ten sonra 19.758 bayt
  • jQuery, gzip'ten sonra JSMin 36.391 bayt, 11.541 bayt ile küçültüldü
  • jQuery, gzip'ten sonra Packer 21.557 bayt, 11.119 bayt ile küçültüldü
  • jQuery, YUI Kompresör 31.822 bayt, gzip'ten sonra 10.818 bayt ile küçültüldü

@ daniel james yorum sıkıştırıcı bahseder Packer gösteren grafik en iyi sıkıştırma lider, bu yüzden ymmv sanırım


Packer'ın 'base62 kodlaması' seçeneği vardır ve jQuery için gzip'ten sonra yui'den daha küçük sıkıştırır. Bunun nedeni, jquery'nin 'eval' ve 'with' kullanmasıdır. Genel olarak güvenli değildir, ancak jQuery Packer için test edilmiştir.
Daniel James

Ayrıca, bana inanmıyorsanız , sıkıştırıcı.thruhere.net deneyin .
Daniel James

9
Paketleyicinin dezavantajını unutmayın - dekompresyon zamanı.
Nosredna

1
bazen kötü kompresör (orijinal bile daha geniş çıkış) olabilir kapatma google, dikkat et - bu kadar dizelerinde ASCII olmayan karakterleri dönüştürür \uxxxxvarsayılan olarak değişmezleri .. mesela kullanmak --charset UTF-8(Eminseniz nasılsa bu konuda tarayıcı haber verirseniz)
mykhal

ClosureCompiler çıktısı benim için çalışmıyor. jscompress.com çalışır
codenamezero

43

YUI Kompresör gidilecek yoldur. Harika bir sıkıştırma oranına sahiptir, iyi test edilmiştir ve birçok üst site arasında kullanılmaktadır ve benim tarafımdan kişisel olarak tavsiye edilmektedir.

Tek bir JavaScript hatası veya hıçkırık olmadan projelerim için kullandım. Ve güzel belgeleri var.

CSS sıkıştırma yeteneklerini hiç kullanmadım, ancak bunlar da var. CSS sıkıştırması da aynı şekilde çalışır.

Not: Dean Edwards'ın / packer / YUI Kompresörden daha iyi bir sıkıştırma oranı elde , kullanırken birkaç JavaScript hatasıyla karşılaştım.


5
Packer, dosya boyutu açısından iyi görünüyor, ancak paketten çıkarmak için harcanan zamanın tüplerden daha küçük bir dosyayı aktarmanın zaman kazancından daha ağır bastığı ortaya çıkıyor. Gördüğüm gerçek tarayıcı kıyaslamalarının çoğu, tarayıcıda yürütme süresi açısından gzip ile sunulan ham sıkıştırılmamış dosyalardan daha yavaş.
Albay Sponsz


Java çalıştırmakla uğraşmak istemiyorsanız, kompresörün çevrimiçi bir versiyonu: refresh-sf.com/yui
Bryan Legend

Base62 kodlama seçeneğini işaretlemediğiniz sürece packer kullanılarak sıkıştırılan komut dosyalarının paketinden çıkarılması gerekmez (ki bu bir layman'ın gzipidir çünkü yapmamalısınız - eminim çoğu modern sunucu gzip'i destekliyor). Kullanılacak artıklık olmadığından base62 kodlu bir dosyayı gzip etmenin bir anlamı yoktur. Packer'ın en yeni sürümü (son sürüm) hatalar getirmez, açma yükü yoktur (base62 kodlaması yapmadığınız sürece) ve yine de en fazla sıkıştırmayı sağlar. Ayrıca şimdi packer'ın bir komut satırı sürümü var. Sadece aşağıdaki gibi UÖM'yi kullanarak kurun: npm install packer. (= D
Aadit M Shah

8

Dojo projesinden ShrinkSafe kullanıyorum - gerçekten bir JavaScript yorumlayıcısı ( Rhino) kullandığı için istisnai bir durum kodda semboller bulmak ve kapsamlarını anlamak ) , bu da kodun ortaya çıktığında çalışmasını sağlamaya yardımcı olur. diğer son, aynı şeyi yapmak için regex kullanan birçok sıkıştırma aracının aksine (bu kadar güvenilir değil).

Aslında bir Web Dağıtım Projesi'nde bir MSBuild görevim var geçerli Visual Studio çözümümde bir dağıtımı çalıştıran ve ShrinkSafe aracılığıyla dağıtmadan önce tüm JS dosyalarını çalıştıran bir komut dosyası çalıştıran görevim var ve oldukça iyi çalışıyor.

DÜZENLE: Bu arada, "en iyi" tartışmaya açık, çünkü "en iyi" kriterleri projenin ihtiyaçlarına bağlı olarak değişecektir. Şahsen, ShrinkSafe'in iyi bir denge olduğunu düşünüyorum; en küçük boyutu == en iyi düşünen bazı insanlar için, yetersiz olacaktır.

EDIT: YUI kompresörünün Rhino kullandığını da belirtmek gerekir.


5

JSMin'i deneyin , C #, Java, C ve diğer bağlantı noktalarını edinin ve kolayca kullanılabilir.


C # bağlantı noktası taşındı / çıkarıldı mı?
Greg B

4

Packer kullanıyorsanız, 'değişkenleri daralt' seçeneğinin çok ötesine geçin ve ortaya çıkan kodu gzipleyin. Base62 seçeneği yalnızca sunucunuz sıkıştırılmış dosyalar gönderemiyorsa geçerlidir. 'Shrink vars' içeren paketleyici YUI'yi daha iyi sıkıştırır, ancak bir yerde noktalı virgül atladıysanız hata verebilir.

base62 temelde fakir bir adamın gzipidir, bu yüzden gzipping base62-ed kodu size gzipping shrink-var-ed kodundan daha büyük dosyalar verir.





1

İşte tüm js ve css bir yolda aşağı bulur ve sıkıştırır / (isteğe bağlı) onları gizleyen bir YUI kompresör komut dosyası ( Byuic ). Bir inşa sürecine entegre etmek güzel.



1

KJScompress

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

Kjscompress / csskompress, JavaScript ve CSS içeren dosyalardan önemli olmayan boşlukları ve yorumları kaldırmak için iki uygulamadan oluşur (kjscompress bir csscompress). Her ikisi de GNU / Linux işletim sistemi için komut satırı uygulamalarıdır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.