Was ist der beste verfügbare JavaScript-Kompressor? Ich suche ein Werkzeug, das:
- ist einfach zu bedienen
- hat eine hohe Kompressionsrate
- Erzeugen Sie zuverlässige Endergebnisse (bringt den Code nicht durcheinander)
Was ist der beste verfügbare JavaScript-Kompressor? Ich suche ein Werkzeug, das:
Antworten:
Ich habe kürzlich UglifyJS veröffentlicht , einen JavaScript-Kompressor, der in JavaScript geschrieben ist (läuft auf der NodeJS Node.js- Plattform, kann aber leicht geändert werden, um auf jeder JavaScript-Engine ausgeführt zu werden, da keine Node.js
Interna benötigt werden ). Es ist viel schneller als YUI Compressor und Google Closure , es komprimiert besser als YUI in allen Skripten, mit denen ich es getestet habe, und es ist sicherer als Closure (weiß, wie man mit "eval" oder "with" umgeht).
Neben der Entfernung von Leerzeichen führt UglifyJS auch Folgendes aus:
foo["bar"]
in foo.bar
wo möglichPS: Oh, es kann auch "verschönern". ;-);
Ein paar Jahre später erneut auf diese Frage einzugehen , scheint UglifyJS derzeit die beste Option zu sein.
Wie unten angegeben, läuft es auf der NodeJS-Plattform, kann jedoch leicht geändert werden, um auf jeder JavaScript-Engine ausgeführt zu werden.
--- Alte Antwort unten ---
Google hat den Closure Compiler veröffentlicht, der die kleinsten Dateien zu generieren scheint, soweit hier und hier zu sehen
Zuvor waren die verschiedenen Optionen wie folgt
Grundsätzlich macht Packer bei der anfänglichen Komprimierung einen besseren Job, aber wenn Sie die Dateien vor dem Senden über das Kabel gzipen (was Sie tun sollten), erhält YUI Compressor die kleinste endgültige Größe.
Die Tests wurden übrigens mit jQuery-Code durchgeführt.
@ Daniel James erwähnt im Kommentar Compressorrater, der zeigt, wie Packer das Diagramm in der besten Komprimierung anführt, also denke ich, ymmv
\uxxxx
standardmäßig Nicht-ASCII-Zeichen in Zeichenfolgen in Literale. Verwenden Sie zB --charset UTF-8
(wenn Sie sicher sind, dass Sie den Browser irgendwie darüber informieren).
YUI Compressor ist der richtige Weg. Es hat eine großartige Komprimierungsrate, ist gut getestet und wird von vielen Top-Sites verwendet und von mir persönlich empfohlen.
Ich habe es für meine Projekte ohne einen einzigen JavaScript-Fehler oder Schluckauf verwendet. Und es hat eine schöne Dokumentation.
Ich habe die CSS-Komprimierungsfunktionen noch nie verwendet, aber sie sind auch vorhanden. Die CSS-Komprimierung funktioniert genauso gut.
Hinweis: Obwohl Dean Edwards / packer / eine bessere Komprimierungsrate als YUI Compressor erzielt, sind bei der Verwendung einige JavaScript-Fehler aufgetreten.
npm install packer
. (= D
Ich verwende ShrinkSafe aus dem Dojo-Projekt - es ist außergewöhnlich, weil es tatsächlich einen JavaScript-Interpreter ( Rhino ) verwendet, um Symbole im Code zu finden und deren Umfang zu verstehen usw., um sicherzustellen, dass der Code funktioniert, wenn er herauskommt anderes Ende, im Gegensatz zu vielen Komprimierungswerkzeugen, die Regex verwenden, um dasselbe zu tun (was nicht so zuverlässig ist).
Ich habe tatsächlich eine MSBuild-Aufgabe in einem Web Deployment-Projekt in meiner aktuellen Visual Studio-Lösung, die ein Skript ausführt, das wiederum alle JS-Dateien der Lösung über ShrinkSafe ausführt, bevor wir sie bereitstellen, und sie funktioniert recht gut.
EDIT: Übrigens ist "best" offen für Debatten, da die Kriterien für "best" je nach den Anforderungen des Projekts variieren. Persönlich denke ich, dass ShrinkSafe eine gute Balance ist; Für einige Leute, die die kleinste Größe für == am besten halten, wird dies nicht ausreichen.
EDIT: Es ist erwähnenswert, dass der YUI-Kompressor auch Rhino verwendet.
Wenn Sie Packer verwenden, gehen Sie einfach weit zur Option 'Variablen verkleinern' und gzip den resultierenden Code. Die Option base62 ist nur verfügbar, wenn Ihr Server keine komprimierten Dateien senden kann. Packer mit 'Shrink Vars' erzielen eine bessere Komprimierung der YUI, können jedoch Fehler verursachen, wenn Sie irgendwo ein Semikolon übersprungen haben.
base62 ist im Grunde das gzip eines armen Mannes, weshalb das gzippen von base62-ed-Code größere Dateien liefert als das gzippen von verkleinertem Code.
Bei der Suche nach Silberkugel fand diese Frage. Für Ruby on Rails http://github.com/sstephenson/sprockets
Hier ist der Quellcode eines HttpHandlers, der das macht, vielleicht hilft es Ihnen
bananascript.com hat mir die besten Ergebnisse gebracht.
KJScompress
http://opensource.seznam.cz/KJScompress/index.html
Kjscompress / csskompress besteht aus zwei Anwendungen (kjscompress a csscompress), um nicht signifikante Leerzeichen und Kommentare aus Dateien zu entfernen, die JavaScript und CSS enthalten. Beide sind Befehlszeilenanwendungen für das Betriebssystem GNU / Linux.