jQueryMobile で構築したサイトの性能を測る
構築したサイトの性能測定で困ったことがあったので、そのメモです。
jQueryMobile で構築したサイトは基本的に ajax バリバリになっているかと思います。
そうでないサイトもあると思いますが。
現在関わっているプロジェクトが jQueryMobile を使用しているのですが、画面遷移は jQueryMobile の提供している $.mobile.changePage を使用しており、基本すべて ajax にてリクエストを出し、ページの内容を書き換える、というものになっています。
で、画面の性能を測定をスマフォで行うということになりました。
うーん。困った…。
どうやって時間をはかろう…。
最初は mod_pagespeed 使えば簡単簡単、と思っていたのですが、Add Instrumentation を見た感じだと、すべての html の
(拙い英語力で読み解いたので間違いがあるかも…)
ということで、Add Instrumentation をヒントに自前で仕込むことにしました。
基本的には ajax でページを取得してくる、ということで、ajax リクエストを投げる前と ajax リクエストの success callback 終了後に時間を出力する方式でやってみました。
jQueryMobile サイトの入口となる唯一の html (head や body を持っているやつ)に以下を記述します。
window.denta_pagespeed_info = function () { var infomation = Array.prototype.slice.apply(arguments, [0]).join("|"); if (location.host === "localhost") { console.log(infomation); } else { new Image().src = "/denta_pagespeed.php?speed=" + infomation; } }; $.ajaxPrefilter(function (options, originalOptions, jqXHR) { var targetURL = originalOptions.url, _success = options.success, start = Number(new Date()); options.success = function () { var active = $.mobile.urlHistory.getActive(), referer; //疑似 if (active) { referer = active.url; } _success.apply(this, Array.prototype.slice.apply(arguments, [0])); window.denta_pagespeed_info((referer || "/"), targetURL, start, Number(new Date())); }; });
jQuery の $.ajaxPrefiter にてリクエストを捕まえることができるので、補足し、success の callback を置き換えます。
置き換えた success 関数の中でサーバに計測値を投げます。
投げているのは new Image().src = "/denta_pagespeed.php?speed=" + infomation; これなので、別のドメインにも投げることができます。
サーバ側ではそれを保存するだけ。
何か良いツールないかなー。