Gist に置いた JavaScript のベンチマークをとる
デモ
使いかた
gist に以下の命名規則でファイルを作ります
- *.js にベンチマーク対象コード
- *.js の拡張子をhtml に書いたものに実行するページのHTML
- または common.html に共通の HTML
そして gist の URL をコピーして、このページで実行させます。
挙動
空関数呼び出しも含め、50msごとにそれぞれのコードをできるだけ実行します。これを1フェーズとして、100回実行します。なので、終わるまで対象テストケース×5秒かかります。
コードは対応するHTMLをロードした iframe 内で実行されます。これは文字列から iframe.contentWindow.Function のインスタンスを作ることで実現しています。
Rate limit 対策
Gist から API 経由でデータをとってきていますが、Github の API は Rate limit がキツいです。
一応、localStorage にキャッシュを持っており、gist 側を更新しない限りは 304 を返してもらうようにしています。304 の場合はAPIアクセスしてもカウントされません。
これでも、gist を更新してベンチマークを繰替えすと意味がないので、Personal Access Token による上限拡大も雑に実装してあります。
経緯
jsperf.com が動いていなくて不便ですね。不便すぎるので5年前ぐらいに自分で書いたコードをひっぱりだしてきて、書きなおしたという感じです。
jsperf と比べ、結果を集約したりする機能はありませんが、クライアントサイドのみで動くので気楽なツールです。
関連エントリー
- ブログシステムの HTML 生成を効率化 そろそろやることなくなったので minify などをやることにしました。 ただ、ブログシステムの出力の最後ほうでページごとに全体を mini...
- Chrome App をテストする Chrome App という、Chrome Extension の延長上にあるスタンドアロンアプリを作れる仕組みがある。これは、しばしば出て...
- サーバーサイド MathJax で数式表示を高速化する このサイトでは数式を本文中に TeX 形式で書いて MathJax で処理させています。↓ こういうやつです。ベクターなので昨今の高解像度事...
- JavaScript の必要ないソーシャルボタン JSなしのソーシャルボタンというのを作ってみました。このサイトの各エントリ下部に実装されているものです。 動機 各サービス、JS を読みこん...
- Rust + wasm の環境が wasm_bindgen でめっちゃ簡単になっていた https://developer.mozilla.org/ja/docs/WebAssembly/Rust_to_wasm に書いてある通...