Najpierw pozwól mi zagrać w adwokata diabła: Kod tak naprawdę "nie wykonuje" niczego (nic poważnego, co znaczy, poza JS Packerem). Jest to zasadniczo definicja funkcji, obiektów i właściwości.
JS Packer nie generuje kodu JavaScript, lecz skompresowany tekst, który należy rozpakować w środowisku wykonawczym. Dlatego jest znacznie wolniej. Zamknięcie Google przy użyciu zaawansowanej optymalizacji zastępuje identyfikatory, gdy tylko jest to możliwe. Tak więc przy analizowaniu skryptu musi już być przewaga wydajności.
Powiedział, że można poświęcić wydajność dla rozmiaru kodu. Jednym z przykładów jest zastąpienie true
i false
z !0
i !1
. Zależy jednak od silnika JavaScript. To może być zoptymalizowane przez silnik przed pierwszym wywołaniem, po to, po kilku rozmów, nigdy ... kto wie;)
Nowe ustalenia
Zrobiłem kilka profili w międzyczasie i uświadomiłem sobie, że Zapomniałem jednej rzeczy: zbierania śmieci. Wpływ może być wystarczający, aby wyjaśnić niektóre różnice między skryptami i przeglądarkami (różne silniki!).
Połączyć to z faktem, że kod nie robi dużo i coś masz. W jednym teście miałem czas procesora na zbieranie śmieci około 3% dla nieskompresowanego i 9% (!) Dla JSMin. Co oznacza zupełnie inne wyniki dla prawie równego kodu.
Nawet nowsze odkrycia
Po uruchomieniu JSMin pierwszy to szybciej niż bez kompresji. Próbowałem tego kilka razy i zawsze miałem taki sam wynik. Potwierdza to poprzednie ustalenia. Jestem teraz dość pewny, że znaleźliśmy rozwiązanie.
możliwy duplikat [Czy osiągnięto wydajność podczas uruchamiania zaciemnionego kodu?] (Http://stackoverflow.com/questions/2646216/is-there-a-performance-hit-when-running-obfuscated-code) – Barmar
To nie jest duplikat @Barmara - tak, chodzi o zaciemnianie, ale mówi o Javie i C#, a nie o JavaScript. – nnnnnn
Dlaczego konieczne jest porównanie zaciemniania z wydajnością? Jeśli ktoś odczuwa potrzebę zaciemnienia kodu, nie sądzę, aby wydajność była kwestią. – Ozzy