Комментарии 11
добавил вращающуюся 3D-землю на свой сайт
24TTL?
библиотека добавляет
CDN?
я сделал маленькую JS-библиотеку
Спасибо! И за пост тоже!
Нам потребуется отдельный JS-файл для веб-воркера — создадим отдельный файл сборки в Вебпаке или Parcel:
entry: {
'app': './src/app.js',
+ 'webgl-worker': './src/webgl-worker.js'
}
Webpack добавляет различный рантайм для target:web и target:webworker, для webpack следует возвратить массив конфигов с разными target для app и webgl-worker.
С OffscreenCanvas я победил фризы на моём сайте и получил 100% очков в Google Lighthouse.
Получается фризы исчезли только в Chrome, а в остальных осталось как прежде?
Почему оценка Lighthouse выросла, если объём работы для браузера не уменьшился?
Lighthouse оценивает сумарное время на загрузку сайта — установка соединения + загрузка файла + компиляция/парсинг файла + время выолнения JS. Кроме того, он учитывает много других параметров:
- Время на которое страница фризиться (UI не обновляется из-за долгого беспрерывного выполнения UI) — 0,5 секунд
- Время через которое ЦПУ перестаёт быть загруженным на 100 % — 3,8 секунд
- Время через которое большинство подписчиков из JS подпишется на свои события — 3,8 секунд
(Посмотри скриншот результатов «до» в разделе «Результат»)
Почему бы тогда просто не перенести отрисовку Земли в обработчик window.onload
, учитывая, что на сайте больше ничего не происходит?
Для пользователя не станет лучше. Пока JS выполняется UI не может обновиться. Three.js на слабых устройствах запускается 0,5 секунд — всё это время страница не будет реагировать на действия пользователя.
Для Lighthouse тоже не станет лучше. Он ждёт 5 секунд после onload
.
Я думал, что показатель «First CPU Idle» уменьшился, потому что работа стала выполняться параллельно, но судя по инструменту Performance из Google Chrome, ничего не выполняется параллельно:
Ещё меня смущает, что количество потоков возросло с 1 до 2, а показатель «First CPU Idle» уменьшился аж в 4 раза. Поэтому я всё же думаю, что Lighthouse не учитывает вебворкеры.
Насчёт onload я согласен, неблокирование основного потока CPU это большой плюс решения с вебворкером.
Всё верно. Главный JS скрипт очень простой и всё что он делает — просто запускает воркер.
Ага, First CPU Idle уменьшился, потому что он считает только загрузку главного процесса.
Ускоряем WebGL/Three.js с помощью OffscreenCanvas и веб-воркеров