パフォーマンス情報の出力に広く使われている HTTP Archive (HAR) 形式を独自に拡張し、HTTP/2 フレーミングレイヤーの情報を追加できる拡張仕様を検討する。
これは、HTTP/2 ではパフォーマンス面での改善を目的とした様々な機能が盛り込まれているが、既存のブラウザにおいては HTTP/2 のフレーミングレイヤーの情報 (例: HTTP/2 フレームや優先度情報) を取得できないため、パフォーマンスチューニングが難しくなっているためである。
var firstPaint = 0, firstPaintTime, paint; | |
function paintHandler() { | |
paint = window.performance.now() | |
if (firstPaint === 0) { | |
firstPaint = paint; | |
firstPaintTime = firstPaint + window.performance.timing.navigationStart; | |
window.performance.timing.firstPaint = firstPaint; | |
window.performance.timing.firstPaintTime = firstPaintTime; | |
} | |
}; |
このスライドで話したことの続き。レンダリングのパフォーマンスを計測するのに DOMContentLoaded は妥当ではない、という話があったので、First Paint による時間を計測する。First Paint については以下のページが詳しい。
Chrome の Console 上で以下を実行し、First Paint の時間を計測する。出力される値の単位は秒になる。 サーバーやブラウザといった計測環境はスライドに記載されている環境の通り。
(function(d) { | |
var resources = {}; | |
var re = /url\(([^)]+)\)/; | |
// 画面の左下の座標を取得 | |
var maxWidth = window.innerWidth; | |
var maxHeight = window.innerHeight; | |
[].forEach.call(d.getElementsByTagName('*'), function(elem) { | |
var rect = elem.getClientRects()[0]; |
var net = require('net'), | |
hpack = require('./hpack'); | |
var FRAME_HEADER_LEN = 9; | |
function createSettingsFrame(ack) { | |
var flag = ack ? 0x1 : 0x0; | |
var frameHeader = new Buffer(FRAME_HEADER_LEN); | |
frameHeader.writeUInt32BE(0x0, 0); |
// ============================================== | |
// ハフマン圧縮アルゴリズムの実装 | |
// ============================================== | |
// ツリーの生成 | |
function create_tree(str) { | |
// 登場回数を算出 | |
var count = {}; | |
str.split('').forEach(function(word){ | |
if (!(word in count)) { |