2016-11-12 2 views
3

Следующий кодЧто увеличивает uglifyjs путем перемещения выражений в условие условия if?

console.log("foo"); 

if (window.x !== window.y) { 
    const x = "x"; 
    console.log(x); 
} 

является уменьшенная с помощью uglifyjs к

if(console.log("foo"),window.x!==window.y){const x="x";console.log(x)} 

Как можно видеть, что это не больше, чем более простой

console.log("foo");if(window.x!==window.y){const x="x";console.log(x)} 

Так что же они получают, перемещая его ? Это какая-то сложная оптимизация для конкретного двигателя или есть причина, которую я не вижу?

+1

с правом варианты uglifyjs также * оптимизирующий * 'Function()' в 'функции() { } ', по-видимому, потому что это короче, когда gzipped. –

ответ

1

Кто-то указал мне на место в их ридми, где они прояснить это

последовательные утверждения в блоках объединены в последовательность; во многих случаях это оставляет блоки с одним утверждением, поэтому мы можем удалить скобки блока.

Так что это не тот случай, но он сохраняет 2 символа, когда у вас есть что-то вроде

if (<expr>) { 
    console.log("foo"); 

    if (window.x !== window.y) { 
     const x = "x"; 
     console.log(x); 
    } 
} 
4

Как отметил @GOTO, второй вариант может быть такой же длины, она больше, когда архивированная:

$ echo 'if(console.log("foo"),window.x!==window.y){const x="x";console.log(x)}' | gzip | wc --bytes 
74 
$ echo 'console.log("foo");if(window.x!==window.y){const x="x";console.log(x)}' | gzip | wc --bytes 
76 
+0

См. «Реальный ответ» ниже :-) (+1 все равно) – zerkms

Смежные вопросы