JS реализует многопоточность для решения проблемы ненадежных/неточных таймеров.

Почему таймеры ненадежны

В механизме выполнения цикла событий асинхронное событие помещает функцию обратного вызова в очередь сообщений.После выполнения макрозадачи основного потока микрозадачи в очереди сообщений будут выполняться последовательно.После выполнения микрозадачи цикл вернется для выполнения макрозадачи. Поскольку в очереди сообщений большое количество задач, время выполнения других задач вызовет задержку функции обратного вызова таймера. Если она не обрабатывается, задержка всегда будет накладываться. Когда время выполнения велико, разница будет очень большой.
Таким образом, таймер не полностью гарантирован.

Как с этим справиться?

веб-работник

JS в браузере — это однопоточная работа. Когда во внешнем интерфейсе выполняется какая-то трудоемкая работа, последующие этапы, такие как рендеринг страницы, будут ждать, что приведет к зависанию и зависанию некоторых страниц, влияя на взаимодействие с пользователем.
Появление webworker заключается в создании многопоточной среды для js. Основной поток создает рабочий поток, который может передавать задачи с интенсивными вычислениями или высокой задержкой рабочему потоку для выполнения. Пока работает основной поток, рабочий поток также работает, не мешая друг другу. Основной поток несет ответственность для взаимодействия с пользовательским интерфейсом, чтобы основной поток не блокировался.

Код

По своей логике соответствующее дело можно обработать в onmessage
index.js.

// 创建work线程
const worker = new Worker('worker.js')
// 收到到消息
worker.onmessage =function(evt){
    
      
	// evt.data = 'worker.js :AAAAAAAAA'
    console.log('收到消息:返回的',evt.data)   
}
// 发送消息
worker.postMessage('AAAAAAAAA')

рабочий.js

	this.addEventListener('message', function (e) {
    
    
		// e.data = 'AAAAAAAAA'
	    this.postMessage('worker.js :'+e.data);
	}, false)
	// 监听错误
	this.addEventListener('error', function (e) {
    
     
	    console.error("收到消息",e)
	}, false);

Je suppose que tu aimes

Origine blog.csdn.net/lys20000913/article/details/130127407
conseillé
Classement