2012-11-20 15 views
9

Moje zrozumienie "kompilacji" JavaScriptu polega na skraplaniu i minimalizowaniu kodu w celu ostatecznego zapisania bajtów.Skompresowany/skompilowany JavaScript a nieskompresowany JavaScript pod względem wydajności

Czy skraplanie lub zminimalizowanie powoduje, że JavaScript działa szybciej?

podjąć następujące przykłady do rozważenia:

var abcdefghijklmnopqrstuvwxyz = 1; 
// vs. 
var a=1; 
var b = function() { 
    // Here is a comment 
    // And another 
                                 // White space 
    return true; 
}; 

// vs. 

var b=function(){return true} 

Pobiegłem te przykłady przez jsPerf with little or no difference.

Czy kompilacja JavaScriptu może być szybsza lub wolniejsza, oprócz zapisywania bajtów?

+5

To, o czym mówisz, nie jest kompilacją. Sugeruję, żebyś edytował swoje pytanie. –

+0

Więc jeśli uruchamiam mój JS przez kompilator Google, jego kompilacja nie jest w żaden sposób? https://developers.google.com/closure/compiler/ – Blowsie

+0

javascript to javascript. Silnik js może opcjonalnie skompilować javascript, ale sam w sobie nie jest skompilowany w żaden sposób. Wszelkie korzyści związane z wydajnością są spowodowane przez przepisywanie kodu lub są pomijalne (jak w twoim przykładzie). – Zirak

Odpowiedz

16

Tak, w tym sensie, kompilacja tych przekształceń stosowanych przez coś jak Google Closure Compiler można zrobić skrypt działał szybciej. Rozważmy to bardzo prosty przykład:

var x = ["hello", "james"].join(" "); 

To kompiluje do:

var x="hello james"; 

który jest zarówno mniej kod i szybciej uruchomić. Oczywiście to głupi przykład. Mam nadzieję, że sam napiszesz skompilowaną wersję. Jednak pokazuje, że zamknięcie jest w stanie zapewnić poprawę wydajności, a także poprawić rozmiar plików.

Od docs zamknięcia (podkreślenie dodane):

Zamknięcie Compiler jest narzędziem do tworzenia pobrania JavaScript i działać szybciej. To jest prawdziwy kompilator dla JavaScript. Zamiast kompilacji z języka źródłowego na kod maszynowy, kompiluje on od JavaScriptu do lepszego JavaScriptu.

Edit

Na przykład kompilatora Zamknięcie faktycznie zwiększenie rozmiaru pliku JavaScript, starając się oferować wyższą wydajność, zobacz moją odpowiedź na this question.

+0

Zgaduję, że nieskompilowany javascript ma również potencjał do używania większej ilości 'pamięci' kontra skompilowanego javascript? – Blowsie

+0

@ Blowsie - Prawdopodobnie jest to mniej prawdopodobne, ponieważ rzeczy, które przechowujesz w pamięci, prawdopodobnie nie ulegną zmianie w wyniku kompilacji (a rzeczy przechowywane niepotrzebnie będą i tak zbierane). Ale prawdopodobnie jest to możliwe, tak. –

+1

W rzeczywistości nie jest to kompilator, ale narzędzie, które wpływa na wydajność. –

1

Minified vs un-minified nie powinno mieć żadnej różnicy w zakresie prędkości wykonania. Jedyną różnicą może być to, że skrócona wersja będzie szybsza do przeanalizowania, ale nawet wtedy, gdy masz bardzo duży plik (nie znajdziesz żadnych różnic w teście, który przeprowadziłeś, jest on mały).

edytuj: pierwsze stwierdzenie, które napisałem, jest ważne, jeśli robisz tylko podstawową "minifikację". Jeśli używasz kompilatora zamykania, takiego jak James, to mogą wystąpić pewne różnice, jeśli narzędzia Clousure zoptymalizują twój kod ...

Powiązane problemy