Браузеры компилируют и кэшируют JavaScript? - PullRequest
2 голосов
/ 20 мая 2009

Я заметил, что после внесения изменений в файл javascript, очистки кэша и перезагрузки; одна функция, в частности, выполняется примерно за 90 мс, в следующий раз, когда я загружаю страницу, она запускается через 40 мс, в следующий раз, когда я ее запускаю, она запускается через 20 мс ... потом никогда не становится быстрее.

Похоже, что IE компилирует мой javascript и кэширует эту скомпилированную версию где-то, подобно тому, как SQLServer обрабатывает запросы.

Это то, что происходит?

Кто-нибудь знает, где я могу найти разъяснения о том, как браузеры обрабатывают JavaScript?

Ответы [ 3 ]

7 голосов
/ 20 мая 2009

Вы можете проверить комментарий Эрика Липперта к сообщению в блоге Питера Торра Скомпилировано, интерпретировано, что угодно :

JScript Classic действует как скомпилированный язык в том смысле, что перед запуском любой программы JScript Classic мы полностью проверяем синтаксис кода, генерируем полное дерево разбора и генерируем байт-код. Затем мы запускаем байт-код через интерпретатор байт-кода. В этом смысле JScript столь же «скомпилирован», как и Java. Разница в том, что JScript не позволяет вам сохранять или проверять наш проприетарный байт-код. Кроме того, байт-код гораздо более высокого уровня, чем байт-код JVM - язык байт-кода JScript Classic представляет собой чуть больше, чем линеаризацию дерева разбора, тогда как байт-код JVM явно предназначен для работы на низкоуровневой машине стека.

Пост и комментарий относятся к сентябрю 2003 года, но, судя по сообщению Ральфа Соммерера о производительности JavaScript в посте IE8 , они не сильно изменились в базовом движке JScript:

Если движок JavaScript, используемый в IE (и в других местах), не использует какую-либо компиляцию для нативного кода, он всегда будет отставать от своих конкурентов по производительности. Из того, что я понял из их Channel9 , они улучшили выполнение байт-кода, но их основными целями были собственные объекты JavaScript (Array, String, ...) и JavaScript-DOM-взаимодействие.

3 голосов
/ 20 мая 2009

IE8 не с открытым исходным кодом, поэтому можно только делать гипотезы; однако браузеры с открытым исходным кодом (такие как Chromium, Firefox, Webkit) работают примерно так, как вы говорите, как и многие другие интерпретаторы в не-браузерных и необязательных настройках JS (компилируйте новые источники при первом просмотре или перезагрузке, кэшируйте или сохраняйте скомпилированная версия для более быстрого выполнения в будущем), поэтому кажется вполне разумным, что подход Javascript в IE должен быть практически таким же, как вы и предполагали.

1 голос
/ 20 мая 2009

Я знаю, что вы спрашивали об IE8, но вот V8 - движок Google. Включает видео о том, как работает V8.

http://code.google.com/p/v8/

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