Я создал композитный слой для div со следующими стилями:
div {
position: absolute;
height: 50px;
width: 50px;
background: #900;
top: 100px;
left: 200px;
will-change: transform;
transform: translateZ(0);
}
Затем я применяю к нему анимацию с помощью API веб-анимации:
document.getElementById("box").animate(
[
{ transform: 'rotate(0) translate3D(-50%, -50%, 0)' },
{ transform: 'rotate(360deg) translate3D(-50%, -50%, 0)' }
], {
duration: 500,
iterations: Infinity
}
);
Насколько я понимаю, эта анимация теперь обрабатывается графическим процессором, и этот слой независим от других слоев, поэтому графический процессор может воздействовать на него изолированно, не беспокоясь о расчете геометрии других частей страницы.
Чего я не понимаю, так это того, что если я вызову функцию с интенсивным использованием процессора, анимация полностью остановится во время работы функции и возобновит работу при выходе из функции:
function mySlowFunction(baseNumber) {
console.time('mySlowFunction');
var result = 0;
for (var i = Math.pow(baseNumber, 10); i >= 0; i--) {
result += Math.atan(i) * Math.tan(i);
};
console.timeEnd('mySlowFunction');
return result;
}
setTimeout(() => mySlowFunction(5), 3000);
Есть ли способ предотвратить это?
https://jsfiddle.net/Lsmw85rv/4/