【问题标题】:RequestAnimationFrameAPI - Measure load time of single elements - page doesnt load anymoreRequestAnimationFrame API - 测量单个元素的加载时间 - 页面不再加载
【发布时间】:2013-11-24 23:52:33
【问题描述】:

我想测量加载文本需要多少毫秒(取决于我稍后将如何设置它的样式)并进行 10 次测量。我已经把它放在一起,但使用 RequestAnimationCode 似乎不再加载了。

<!DOCTYPE html>
<html>
<head>
<style>

</style>
</head>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

<script>
window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;

var stuff = [];
stuff[0] = new Array( "Text1", "Bla1Bla1Bla1" );
stuff[1] = new Array( "Text2", "Bla2Bla2Bla2Bla2Bla2Bla2Bla2Bla2Bla2Bla2" );
stuff[2] = new Array( "Text3", "Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3Bla3" );

var lastTime = 0;
var count = 10; 
var nprint = 50;
var t0 = 0;
var t1 = 0;

//----------------------Start Window loading event---------------------------

$(window).load(function () {

//print links once
$.each(stuff, function(index, out) {
$( "#text" ).append( "<p id='" + out[0] + "'>" + out[0] + " - " + out[1] + "</p>" );
});

//-----------------AnimationFrameMeasure


//loading text 0 50 times
for ( var i = 0; i < nprint; i++ ) {
$( "#testbox" ).append( "<p id='" + stuff[0][0] + "'>" + stuff[0][0] + " - " + stuff[0][1] + "</p>" );
}

function loop(t) { 
var diff = lastTime - t; 
lastTime = t;
t0 = window.performance.now();

//loading text 50 times
for ( var i = 0; i < nprint; i++ ) {
$( "#testbox" ).append( "<p id='" + stuff[0][0] + "'>" + stuff[0][0] + " - " + stuff[0][1] + "</p>" );
}

// push time
t1 = window.performance.now();
    stuff[0].push(t1-t0);

if (count >= 0) {
requestAnimationFrame(loop); 
}

count = count - 1;

} 

requestAnimationFrame(loop); 


//-------------------------print results-----------------------
alert(stuff);

$.each(stuff, function(index, link) {
$.each(link, function(data, value) {

$( "#resultbox" ).append(" | " + value);

});
$( "#resultbox" ).append("<br />"); 
});


//--------------------------End Window loading even ------------

});
</script>


<body>
<h2>Text Overview</h2>
<div id="text"></div>

<h2>Result Box</h2>
<div id="resultbox"></div>

<h2>TestBox</h2>
<div id="testbox"></div>

</body>

【问题讨论】:

  • 我认为问题出在 //-----------------AnimationFrameMeasure。有人看到错误吗?它可能很小,我是盲人
  • count 变量永远不会更新,因此count &gt;= 0 始终为真,您的循环永远不会停止。
  • 顺便看看window.performance.now(),这是专门用来衡量性能的。
  • Safari 不支持window.performance.now()
  • 这是一个 polyfill:gist.github.com/paulirish/5438650.

标签: javascript performance-testing requestanimationframe


【解决方案1】:
  1. 您缺少&lt;/body&gt; 标签
  2. 第 37 行:loop(t) - 你可能打算写 function loop(t)

附带说明,一旦进行了这些更改,它似乎会无限循环,不断打印。

更加熟悉浏览器的调试器。它很可能会为您提供足够的信息来发现 #2,因为它在第 38 行抱怨意外的{

【讨论】:

  • 啊我的编码有问题,我粘贴了一些东西,但不是 UTF-8 。我解决了提到的问题。但是,现在数组中没有显示测量值...
  • stuff["first"].push(diff);在内部不起作用,而仅在循环外部起作用。知道为什么吗?
  • - 字符在白框中显示为问号时,我确实想知道编码,即未映射的字符。嗯,至于为什么推送不起作用 - 不,我不知道 jQuery,对不起。它使您键入的代码更短,但在我看来,它的可读性较差(我最初是一名 asm 程序员 - 即自己做所有事情)祝你好运! :)
  • 我发现它很有用,因为有选择器。我可以选择任何 ID 或名称而无需任何解决方法。推送问题让我发疯,我看不出它为什么不能在循环内工作
  • 漂亮! Chrome 的调试器几乎肯定会告诉你为什么它不能工作。如果你还没有,请看一下。 (按 f12)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
相关资源
最近更新 更多