// JavaScript 忙的状态(持续 5s)下每隔 1s 新增一行 DOM 内容 // 可以观察到虽然每秒都会写一次 DOM,但在 5s 结束后才会全部渲染出来,明显耗时脚本阻塞了渲染 <div id="message"></div> <script> var then = Date.now() var i = 0 var el = document.getElementById('message') while (true) { var now = Date.now() if (now - then > 1000) { if (i++ >= 5) { break; } el.innerText += 'hello!\n' console.log(i) then = now } } </script>
测量渲染帧间隔 (requestAnimationFrame)
requestAnimationFrame 使用这个 API 可以请求浏览器在下一个渲染帧执行某个回调
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var then = Date.now(); var count = 0; var reportCount = 20;
functionnextFrame(){ requestAnimationFrame(function(){ count ++ if(count % reportCount === 0){ var time = (Date.now() - then) / count; var ms = Math.round(time*1000) / 1000; // 每一帧耗时 var fps = Math.round(100000/ms) / 100; // 1秒钟渲染了多少帧 console.log(`count: ${count}\t${ms}ms/frame\t${fps}fps`); } nextFrame() }) } nextFrame()