Что делает JS-движок, когда я присваиваю переменной тоже значение, что она имеет?
let n=8; n=8; Что будет делать JS-движок, перезаписывать то, что не менялось ? Где найти информацию об алгоритмах оптимизации браузеров при обработке кода? Или такие вещи лучше проверять в тестах? |
Зависит от движка, очевидно.
Используя логику, варианты: а) Просто присваивает, тратить зачем-то время ещё и на сравнение нет смысла. б) Возможно в некоторых случаях предварительно оптимизирует, выкидывая лишнее. |
Teamur, алгоритмы пишутся в стандарте.
|
Rise, а движки внутри откланяются от стандартов ради скорости.)
|
Вряд ли всегда производится какие то оптимизации.
V8 работает так Сначала, при считывании js файла строится AST (абстрактное синтаксическое дерево) - на этом этапе никакой оптимизации нет. Компиляция в байт-код происходит при первом исполнении кода. Для функций это означает - при первом вызове функции. Т.е это происходит уже во время исполнения. И тратить какое то время на оптимизацию никто не будет. Оптимизируются только "горячие функции". Они компилируются в ассемблерный код. Там возможна серьезная оптимизация. Что бы функция стала достойна оптимизации она должна быть вызвана большое количество раз (несколько тысяч) и у нее должна быть хорошая статистика (одно из правил - вызовы должны быть всегда с одним и тем же типом аргументов). Про FF точно не знаю, но вроде там есть промежуточный этап - сначала после большого числа вызовов строится оптимизированный байт-код, а потом если функция продолжает часто вызываться уже ассемблерный код. |
Цитата:
|
Недавно - это когда?
Есть интерпретатор Ignition он строит и выполняет байт-код и собирает статистику. Есть оптимизирующий компилятор Turbofan - он компилирует в ассемблерный код. А что оптимизирует байт-код? До (кажется) 2016г в V8 пытались обходиться без бай-кода. Сначала компилировали в неоптимизированный ассемблерный код, а потом оптимизировали его. Но потом от этого отказались. |
Цитата:
|
да. появилось новое, но не совсем тоже, что и в FF.
У FF промежуточный этап - оптимизация байт кода. Из неоптимизированного байт-кода делается оптимизированный байт код. А sparkplug разворачивает код интерпретатора в ассемблерный код. Т.е каждую инструкцию байткода разворачивают в ассемблерный код, содержащий вызовы всех необходимых внутренних функций для ее выполнения. |
Всем спасибо за ответы !
Придётся создать свой ЯП (уже давно назревало), который будет содержать все мои идеи, а на выходе будет обычный Javascript в связке с WASM и WGSL. И написан он будет на самом Javascript. Это будет Титанический Труд и Великое Событие ! ))) |
Часовой пояс GMT +3, время: 16:51. |