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