测量Javascript启动的更改的呈现时间

测量Javascript启动的更改的呈现时间,javascript,browser,svg,performance-testing,Javascript,Browser,Svg,Performance Testing,我想测量显示javascript所做的DOM更改所需的时间 考虑以下示例svg文件: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1600" height="1000" version="1.1">

我想测量显示javascript所做的DOM更改所需的时间

考虑以下示例svg文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   width="1600"
   height="1000"
   version="1.1">
  <script xlink:href="clicktest.js" />
  <defs>
    <filter id="filterBlur" x="-0.6" width="2.2" y="-0.6" height="2.2">
      <feGaussianBlur stdDeviation="120" />
    </filter>
  </defs>
  <rect y="50" x="50" height="100" width="200" style="fill:#ff0000" onmousedown="red()" />
  <rect y="50" x="300" height="100" width="200" style="fill:#0000ff" onmousedown="blue()" />
  <circle cx="800" cy="600" r="300"  id="circle"
          style="fill:#888888;filter:url(#filterBlur)" />
  <text id="time" x="1250" y="50" style="font-size:40px">time...</text>
  <rect x="900" y="300" width="600" height="600"
        style="fill:#650088;fill-opacity:0.5;filter:url(#filterBlur)" />
  <rect x="100" y="400" width="300" height="400"
        style="fill:#999900;fill-opacity:0.5;filter:url(#filterBlur)" />
</svg>
现在,当点击时,会显示不到1毫秒的时间,但是,很明显(在我的电脑上)需要将近一秒钟的时间,直到改变的颜色真正显示出来(顺便说一句,Chrome似乎比Firefox快)

如何测量从单击开始到渲染完成结束的时间?

1.打开Chrome(空白)
2.打开开发工具(F12)
3.移动到“时间线”选项卡
4.单击记录。
5.将您的URL粘贴到chrome浏览器中,然后单击“输入”。
6.等待页面完全加载。
7.停止录制。
我想你会在那里找到答案的

以下是chrome时间表上的源结果示例:


编辑:有关JavaScript执行和结果呈现时间的更多详细信息,您可以使用“DynaTrace”或“SpeedTracer”(使用这些工具的样子)

requestanimationframe
可能是您的朋友@本:谢谢!这似乎适用于Chrome和Opera,但完全不适用于FF或IE。有什么提示吗?在网页中使用javascript无法衡量这一点。这需要使用某种插件或浏览器提供的工具集来完成。与Chrome和Opera配合使用。然而,这当然不能用来测量使用JavaScript的渲染时间。
function blue()
{
  var startTime = performance.now();
  document.getElementById('circle').style.fill = '#0000ff';
  var endTime = performance.now();
  document.getElementById('time').textContent = (endTime - startTime).toString();
}

function red()
{
  var startTime = performance.now();
  document.getElementById('circle').style.fill = '#ff0000';
  var endTime = performance.now();
  document.getElementById('time').textContent = (endTime - startTime).toString();
}