Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.08.2021, 21:08
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Что делает JS-движок, когда я присваиваю переменной тоже значение, что она имеет?
let n=8;
n=8;

Что будет делать JS-движок, перезаписывать то, что не менялось ?

Где найти информацию об алгоритмах оптимизации браузеров при обработке кода?

Или такие вещи лучше проверять в тестах?

Последний раз редактировалось Teamur, 17.08.2021 в 21:13.
Ответить с цитированием
  #2 (permalink)  
Старый 17.08.2021, 22:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Зависит от движка, очевидно.
Используя логику, варианты:
а) Просто присваивает, тратить зачем-то время ещё и на сравнение нет смысла.
б) Возможно в некоторых случаях предварительно оптимизирует, выкидывая лишнее.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 17.08.2021, 23:42
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 458

Teamur, алгоритмы пишутся в стандарте.
Ответить с цитированием
  #4 (permalink)  
Старый 18.08.2021, 00:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Rise, а движки внутри откланяются от стандартов ради скорости.)
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 18.08.2021, 08:03
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Вряд ли всегда производится какие то оптимизации.
V8 работает так
Сначала, при считывании js файла строится AST (абстрактное синтаксическое дерево) - на этом этапе никакой оптимизации нет.
Компиляция в байт-код происходит при первом исполнении кода. Для функций это означает - при первом вызове функции. Т.е это происходит уже во время исполнения. И тратить какое то время на оптимизацию никто не будет.
Оптимизируются только "горячие функции". Они компилируются в ассемблерный код. Там возможна серьезная оптимизация. Что бы функция стала достойна оптимизации она должна быть вызвана большое количество раз (несколько тысяч) и у нее должна быть хорошая статистика (одно из правил - вызовы должны быть всегда с одним и тем же типом аргументов).

Про FF точно не знаю, но вроде там есть промежуточный этап - сначала после большого числа вызовов строится оптимизированный байт-код, а потом если функция продолжает часто вызываться уже ассемблерный код.
Ответить с цитированием
  #6 (permalink)  
Старый 18.08.2021, 09:00
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от voraa
Про FF точно не знаю, но вроде там есть промежуточный этап - сначала после большого числа вызовов строится оптимизированный байт-код, а потом если функция продолжает часто вызываться уже ассемблерный код.
недавно такое добавили в V8
Ответить с цитированием
  #7 (permalink)  
Старый 18.08.2021, 09:10
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Недавно - это когда?
Есть интерпретатор Ignition он строит и выполняет байт-код и собирает статистику.
Есть оптимизирующий компилятор Turbofan - он компилирует в ассемблерный код.
А что оптимизирует байт-код?

До (кажется) 2016г в V8 пытались обходиться без бай-кода. Сначала компилировали в неоптимизированный ассемблерный код, а потом оптимизировали его. Но потом от этого отказались.
Ответить с цитированием
  #8 (permalink)  
Старый 18.08.2021, 09:22
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от voraa
Недавно - это когда?
https://habr.com/ru/company/skillfactory/blog/561034/
Ответить с цитированием
  #9 (permalink)  
Старый 18.08.2021, 10:03
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

да. появилось новое, но не совсем тоже, что и в FF.
У FF промежуточный этап - оптимизация байт кода. Из неоптимизированного байт-кода делается оптимизированный байт код.
А sparkplug разворачивает код интерпретатора в ассемблерный код. Т.е каждую инструкцию байткода разворачивают в ассемблерный код, содержащий вызовы всех необходимых внутренних функций для ее выполнения.
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2021, 11:43
Профессор
Отправить личное сообщение для Teamur Посмотреть профиль Найти все сообщения от Teamur
 
Регистрация: 08.06.2015
Сообщений: 206

Всем спасибо за ответы !
Придётся создать свой ЯП (уже давно назревало), который будет содержать все мои идеи, а на выходе будет обычный Javascript в связке с WASM и WGSL.
И написан он будет на самом Javascript.

Это будет Титанический Труд и Великое Событие ! )))

Последний раз редактировалось Teamur, 23.08.2021 в 11:47.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Психологическая деформация программистов DreamTheater Оффтопик 59 24.03.2012 05:03
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02