UglifyJS: concat und verkleinern oder Umgekehrt?
Ich Schreibe eine app, die mit vielen JS-Dateien. Underscore, Backbone, jQuery, jQuery-plugins für Slider, mehrere Dateien für Modelle, Router, Sammlungen und Ansichten.
In meiner dev Maschine, ich lade jede Datei einzeln, sondern in der Produktion verwende ich nur eine JS-Datei (minified, gziped, weniger http-req, etc.).
In meinem build-Prozess, jede Datei in der minified mit UglifyJS und dann concat in prod.js. Ist dies die richtige Art und Weise zu bauen, dass-Datei? Oder sollte ich concat jede Datei in prod.js und dann verkleinern mit UglifyJS?
Vielen Dank!
- Dies hängt von den verwendeten algorithmen, aber generell würde ich zuerst verketten und dann verkleinern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Getestet habe ich die Ausgabe der einzelnen Methode mit Gulp.
Test-Setup
Ich verwendet, 9 JavaScript-Dateien, die insgesamt 19.15 kB wenn verkettet (nicht minified). Jede Datei beginnt mit einem
'use strict';
- Anweisung.Ergebnisse:
Hinweise:
'use strict';
Aussagen'use strict';
Aussagen'use strict';
Aussage ist 13 bytes. 8 × 13 bytes = 104 bytes, welche Konten für die 0.1 kB Unterschied.Abschließende Gedanken:
Verwenden, welche Reihenfolge Sie bevorzugen.
Den Unterschied zwischen diesen beiden Verfahren ist vernachlässigbar. Verketten => hässlich machen könnte (rein theoretisch) erzeugen (kaum deutlich) kleinere Dateien, wenn beide der folgenden erfüllt sind:
'use strict';
AnweisungHier ist die
gulpfile.js
ich verwendet:Ich würde überrascht sein, wenn so oder so die Runde gemacht, einen signifikanten Unterschied zu dem Aufwand der Anforderung des Benutzers.
Ich würde auch vorschlagen, dass die Verkettung all diese Rahmenbedingungen in eine Datei tatsächlich erhöhen der Aufwand für jeden Benutzer.
Warum?
Wenn Sie ein beliebtes/common framework wie jQuery etc. macht es Sinn zu hosten es auf einem CDN wie Google zu profitieren, die aus Zwischenspeichern der Datei - wenn ein Benutzer eine website besucht, die auch von jQuery, die Sie nicht herunterladen müssen, es überhaupt! Nicht zu erwähnen, verringert geographische Latenz.
So, indem Sie Ihre eigenen einzigartigen Datei, die Sie machen es viel wahrscheinlicher, dass der Benutzer zum download der gesamten Sache.
Ich würde immer legen Sie Sie alle in einem dann verkleinern.
Eine Sache, die ich begonnen haben, zu tun ist, um es auszuführen, obwohl http://www.javascriptobfuscator.com/ ersten ich weiß, es klingt Graf-intuitive, aber eines der Dinge, die Sie tut, ist speichern alle string in ein array ok ein hässliches array, sondern Stoppt string Wiederholung dann, wenn Sie gehen, um Ihre minified, ich benutze Google Closure compiler wird es dann ordentlich die Saiten, und Sie oft am Ende mit einem besseren minified Datei
Empfehle ich dringend, die Sie verwenden requirejs, mit, dass " lib " Sie können Pakete oder man minimiert und unified-Datei. Bitte Lesen Sie die Optimierungs-tool.
Jedoch, als Widor sagte Sie, Es ist nicht eine gute Idee, fügen Sie ALLE die Dateien in eine. Viele dieser libs führt eine bessere Nutzung der google-api (CDN), wenn Sie immer Ihre app online
Es nicht viel Unterschied, da die toplevel-Anweisungen (und Variablen &c.) nicht einmal berührt.
Allerdings, wenn Sie die
--lift-vars
option, es könnte sich ändern. Es hängt stark von deinem code.Auftrag würde nicht viel aus, vorausgesetzt, Sie haben weniger globals im Umlauf. Es wäre sehr minimale Dateigröße Unterschied. Meine persönliche Präferenz ist, zu Verketten und dann Verunstalten die es Ihnen ermöglicht ein besseres und genaue sourcemaps eher als Umgekehrt. (Dies ist, weil sourcemaps ändern sich mit jeder transformation). Ich Frage mich, was ist der Zweck der uglifying kleinere Dateien und dann verketten. Im Grunde genommen, es ist bis zu Ihnen und ist deine Wahl. Die Verkettung und Uglifying scheint mehr als zufriedenstellend und weniger fehleranfällig