2016-07-09 12 views
1

У меня эта проблема, над которой я работал, и нашел интересное поведение. В принципе, если я сравниваю один и тот же код несколько раз подряд, выполнение кода становится значительно быстрее.Почему код JavaScript выполняется быстрее с течением времени?

Вот код:

http://codepen.io/kirkouimet/pen/xOXLPv?editors=0010

Вот скриншот из Chrome:

enter image description here

Кто-нибудь знает, что происходит?

Я проверяю производительность с:

var benchmarkStartTimeInMilliseconds = performance.now(); 
... 
var benchmarkEndTimeInMilliseconds = performance.now() - benchmarkStartTimeInMilliseconds; 
+0

В частности, похоже, что выполнение выполняет скачок скорости после третьей итерации в каждом браузере. – DJG

+0

Google «как раз вовремя» компиляция/оптимизация. – Pointy

+0

Точно так же, как прекрасное вино ... становится лучше с возрастом (предположительно в любом случае) – charlietfl

ответ

2

V8 оптимизирующий компилятор Хрома изначально компилирует код без оптимизаций. Если определенная часть вашего кода выполняется очень часто (например, функция или тело цикла), V8 заменит ее на оптимизированную версию (так называемая «замена на стек»).

По https://wingolog.org/archives/2011/06/08/what-does-v8-do-with-that-loop:

V8 всегда компилирует JavaScript в машинный код. В первый раз, когда V8 видит код , он быстро компилирует его, но без его оптимизации. Исходный неоптимизированный код является полностью общим, обрабатывая все различные случаи, которые можно увидеть, а также содержит код типа обратной связи , в котором записываются типы, которые видны в разных точках процедуры .

При запуске V8 генерирует поток профилирования. Если он замечает, что особая неоптимизированная процедура является горячей, она собирает записанные данные обратной связи для этой процедуры и использует ее для компиляции оптимизированной версии процедуры . Старый неоптимизированная код затем заменяется с новым оптимизированным кодом, и этот процесс продолжается

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

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