Piszę przedłużenie Google Chrome. Ponieważ pliki JavaScript są ładowane z dysku, ich wielokrotnie sprawy.

W każdym razie używam kompilatora zamknięcia Google, ponieważ najwyraźniej może wykonać optymalizacje wydajności, a także zmniejszenie rozmiaru kodu.

Ale zauważyłem to na górze mojego wyjścia z kompilatora zamknięcia:

var i = true, m = null, r = false;

Oczywiście jest to oczywiście zmniejszenie plikise (wszystkie kolejne zastosowania true / null / false / false w całym skrypcie można wymienić pojedyncze znaki).

Ale na pewno jest to niewielkie wydajność? Musi być szybszy, aby po prostu przeczytać słowa kluczowe {X0}} niż wyszukaj zmienną według nazwy i znajdź jego wartość to true ...?

Czy ta wydajność jest warta, o której warto się martwić? Czy jest jeszcze coś innego, że Kompilator Zamówienia Google, który może rzeczywiście spowolnić wykonanie?

27
callum 9 listopad 2011, 17:45

2 odpowiedzi

Wygląda na to, że w nowoczesnych przeglądarkach przy użyciu dosłownego {X0}} lub null lub null vs zmienna sprawia absolutnie bez różnicy w prawie wszystkich przypadkach (jak w zero; są dokładnie takie same) . W bardzo niewielu przypadkach zmienna jest rzeczywiście szybsza.

Tak więc te dodatkowe bajty w oszczędzaniu są tego warte i nic nie kosztowały.

true VS zmienna ( http://jsperf.com/true-vs-Variable):

true vs variable

null vs zmienna ( http://jsperf.com/Null-vs-Variable9/a >):

null vs variable

10
ThinkingStiff 28 grudzień 2011, 06:53

Myślę, że będzie bardzo niewielka kara wydajności, ale mało prawdopodobne, aby wiele znacznie w nowszych, nowoczesnych przeglądarkach.

Zauważ, że standardowe zmienne alias kompilatora zamknięcia są wszystkie zmienne globalne. Co oznacza, że w starej przeglądarce, w której silnik JavaScript przenosi liniowy, aby poruszać się z zakresami funkcjonalnymi (np. Tj. <9), głębiej jesteś w zasobach zagnieżdżonych funkcji, tym dłużej potrzeba, aby znaleźć tę zmienną, która posiada "Prawda" lub " Fałsz "itp. Prawie wszystkie nowoczesne silniki JavaScript optymalizują globalny zmienny dostęp, więc ta kara nie była już utrzymywana w wielu przypadkach.

Ponadto, naprawdę nie powinno być wiele miejsc, w których zobaczysz "Prawda" lub "False" lub "NULL" bezpośrednio w skompilowanym kodzie, z wyjątkiem zadań lub argumentów. Na przykład: if (someFlag == true) ... jest głównie napisany if (someFlag) ..., który jest kompilowany przez kompilator do a && .... Głównie widzisz je tylko w zadaniach ({x3}}) i argumenty (someFunc(true);), co naprawdę nie zdarza się zbyt często.

Wniosek to: Chociaż wielu ludzi wątpi na użyteczność standardowych aliasów kompilatorów zamknięcia (dołączony do mnie), nie powinieneś oczekiwać żadnych środków na wydajność materiału. Nie powinieneś jednak oczekiwać żadnych istotnych korzyści w rozmiarach Gzipped.

2
Stephen Chung 16 listopad 2011, 04:39