JavaScript в WebKit ускоряется благодаря LLVM


Усилия по ускорению JavaScript теперь распространились на WebKit и, конечно же, на браузер Apple Safari. Способ, которым это было достигнуто, очень умный.

Webkit использует JIT-компилятор, который применяет три этапа оптимизации.

Первый этап — это стандартный интерпретатор, который следит за тем, чтобы код JavaScrpt запускался без каких-либо задержек. Он может работать не так быстро, насколько это возможно, но у него низкая задержка, чего обычно хотят пользователи. Если код вызывается более шести раз или если он повторяется более 100 раз, он переходит к следующему этапу и компилируется JIT без особой оптимизации. Если он вызывается более 60 раз или зацикливается более 1000 раз, применяется оптимизатор. Скорость, полученная оптимизированным кодом, примерно в 3 раза выше, чем у JIT, и в 30 раз быстрее, чем у интерпретатора.

LLInt = низкоуровневый интерпретатор, базовый JIT = неоптимизированный, DFG JIT = JIT графика потока данных, OSR = при замене стека.

Оптимизатор был хорош, но он не выполнял ту работу, которую оптимизатор C или C ++ выполняет при оптимизации макетов регистров и так далее. Вместо реализации своего собственного четвертого этапа команда WebKit решила использовать существующий уровень оптимизации кода LLVM.

Четвертая стадия LLVM называется FTL, что разумно, потому что большинство людей думают «Быстрее, чем свет», а не «LLVM четвертого уровня». Результаты впечатляют — примерно в 40 раз быстрее, чем интерпретатор, и в 3 раза быстрее, чем исходная оптимизированная JIT.


Добавить комментарий