反応時間の研究(興味がある場合はこの質問も参照)については、画像の表示時間を制御および測定したいと考えています。さまざまなユーザーのマシンで再描画するために必要な時間を考慮したいと思います。
編集:元々、タイミングにはインライン実行のみを使用していましたが、ペイントに時間がかかるため、ユーザーの画面に表示されている画像の長さを正確に測定することは信頼できないと思いました。
その後、イベント「MozAfterPaint」を見つけました。ユーザーのコンピューターで実行するには構成を変更する必要があり、対応するWebkitAfterPaintはそれを行いませんでした。つまり、ユーザーのコンピューターでは使用できませんが、自分でテストするために使用しました。関連するコードスニペットと以下のテストの結果を貼り付けました。ChromeのSpeedTracer
で
結果を手動で確認しました。
// from the loop pre-rendering images for faster display
var imgdiv = $('<div class="trial_images" id="trial_images_'+i+'" style="display:none"><img class="top" src="' + toppath + '"><br><img class="bottom" src="'+ botpath + '"></div>');
Session.imgs[i] = imgdiv.append(botimg);
$('#trial').append(Session.imgs);
// in Trial.showImages
$(window).one('MozAfterPaint', function () {
Trial.FixationHidden = performance.now();
});
$('#trial_images_'+Trial.current).show(); // this would cause reflows, but I've since changed it to use the visibility property and absolutely positioned images, to minimise reflows
Trial.ImagesShown = performance.now();
Session.waitForNextStep = setTimeout(Trial.showProbe, 500); // 500ms
// in Trial.showProbe
$(window).one('MozAfterPaint', function () {
Trial.ImagesHidden = performance.now();
});
$('#trial_images_'+Trial.current).hide();
Trial.ProbeShown = performance.now();
// show Probe etc...
MozAfterPaintとインライン実行を使用して測定された期間を比較した結果。
これは私をあまり幸せにしません。まず、表示時間の中央値は、私が望むよりも約30ミリ秒短くなっています。次に、MozAfterPaintを使用した場合の差異はかなり大きい(インライン実行の場合よりも大きい)ため、setTimeoutを30ms増やして単純に調整することはできません。第三に、これは私のかなり高速なコンピューター上にあり、他のコンピューターの結果はもっと悪いかもしれません。
SpeedTracerの結果
これらはより良かった。画像が表示される時間は、通常、意図した期間の4(場合によっては)10ミリ秒以内でした。また、ChromeがsetTimeout
通話で再描画に必要な時間を占めているように見えました(したがって、画像を再描画する必要がある場合、通話間に504ミリ秒の差がありました)。残念ながら、SpeedTracerはコンソールにログを記録するだけなので、多くの試行の結果を分析してプロットすることができませんでした。SpeedTracerとMozAfterPaintの不一致が、2つのブラウザーの違いを反映しているか、MozAfterPaintの使用法に欠けているものを反映しているかはわかりません(SpeedTracerの出力を正しく解釈したと確信しています)。
質問
知りたい
- ユーザーのマシンに実際に表示された時間を測定したり、少なくとも、さまざまなテスト用コンピューター(Chrome、Firefox、Safari)のさまざまなブラウザーのセットで同等の数値を取得したりするにはどうすればよいですか?
- レンダリングとペイントの時間をオフセットして、実際の可視性が500ミリ秒になるようにすることはできますか?ユニバーサルオフセットに依存する必要がある場合、それは悪いことですが、ユーザーがやや遅いコンピューターで意識的に画像を見ることができないほど短時間で画像を表示するよりも優れています。
- を使用します
setTimeout
。私は知ってrequestAnimationFrame
いますが、それを使用してもメリットが得られないようです
。調査は調査期間全体にわたって焦点が当てられていると想定されており、特定の値よりも+/-500ミリ秒の表示を取得することが重要です。 fpsの数。私の理解は正しいですか?
明らかに、Javascriptはこれには理想的ではありませんが、私たちの目的にとっては最も悪いことではありません(調査はユーザー自身のコンピューターでオンラインで実行する必要があり、何かをインストールするように依頼すると怖がります。JavaはMacOSXブラウザーにバンドルされていませんもう)。
現時点では、現在のバージョンのSafari、Chrome、Firefox、およびおそらくMSIE(performance.nowおよびフルスクリーンAPIの機能検出、MSIEの機能はまだ確認していません)のみを許可しています。