はてなキーワード: ベンチマークとは
前の60行テンプレートエンジンを改良して、レイアウトテンプレート機能を追加してみた(それでも全部で90行)。
レイアウトテンプレート機能とは、例えば個別のテンプレートが<table>...</table>を出力して、それをレイアウトテンプレートが<html><body>...</body></html>で囲って出力するとかそんなの。
詳しくは終わりの方のサンプルをみてくれ。
これは Ruby on Rails(とその仲間たち)にある便利機能のひとつ。
ついでにいうとSmartyにはない機能のひとつ。
今まで知らなかった人はぜひ試してくれ。チョー便利だから。
前回はたくさんのブックマークありがと。
コメントで「男前テンプレート」と名前がついてたので、勝手に採用。
あと、これ以上の機能追加はしないので、各自勝手に改造して使ってくれ(そのためにコメントをつけてるから)。何でも人任せにするな。
コード:
<?php /* * OtokomaeTemplate.php -- レイアウトテンプレートに対応した90行のテンプレートエンジン * * - レイアウトテンプレート中で echo $_content; とすると中身が表示される。 * - テンプレート中で設定した変数をレイアウトテンプレートで使うことが可能。 * - レイアウトテンプレート名をテンプレート側で指定することも可能。 * - 使い方: * require_once('OtokomaeTemplate.php'); * $TEMPLATE_DIR = 'templates'; // 省略可、パーミッションに注意 * $LAYOUT_TEMPLATE = 'layout.php'; // 省略可 * $context = array('title'=>'Example', * 'list'=>array(10,'<A&B>',NULL)); * include_template('template.php', $context); * - 要 PHP 5.1 or later * - ライセンス: public domain (自由に改造してね) */ /* * 設定用のグローバル変数 */ $TEMPLATE_DIR = NULL; /* テンプレートを探すディレクトリ */ $LAYOUT_TEMPLATE = NULL; /* レイアウトテンプレートのファイル名 */ /* * テンプレートを読み込んで実行する。 * $_context は変数名をキー、値を要素とする連想配列。 * $_layout はレイアウトテンプレートのファイル名。 * - NULL または省略した場合は $LAYOUT_TEMPLATE を使う。 * - FALSE ならレイアウトテンプレートを使わない。 * - $_context['_layout'] = '...'; とすればテンプレート側でも指定可能。 */ function include_template($_filename, $_context, $_layout=NULL) { global $LAYOUT_TEMPLATE; $_content = render_template($_filename, $_context); if (@$_context['_layout'] !== NULL) // テンプレート側で指定された場合は $_layout = $_context['_layout']; // それを使う。 elseif ($_layout === NULL) // 引数で指定されなかった場合は $_layout = $LAYOUT_TEMPLATE; // デフォルトのファイル名を使う。 if ($_layout) { $_context['_content'] = $_content; // レイアウトテンプレート中で使う変数 $_content = render_template($_layout, $_context); } echo $_content; // or return $_content; } /* * テンプレートを読み込んで実行し、その結果を文字列で返す。 * include_template() の実体。 */ function render_template($_filename, &$_context) { $_cachename = convert_template($_filename); extract($_context); // 連想配列をローカル変数に展開 ob_start(); include($_cachename); // テンプレートを読み込んで実行 return ob_get_clean(); } /* * テンプレートファイルを読み込み、convert_string() で置換してから * キャッシュファイルに書き込む。読み込み時のロックは省略。 * (file_get_contents() もファイルロックできるようにしてほしいなあ。) */ function convert_template($filename) { global $TEMPLATE_DIR; if (! file_exists($filename) && $TEMPLATE_DIR) $filename = "$TEMPLATE_DIR/$filename"; $cachename = $filename . '.cache'; if (! file_exists($cachename) || filemtime($cachename) < filemtime($filename)) { $s = file_get_contents($filename); $s = convert_string($s); file_put_contents($cachename, $s, LOCK_EX); // LOCK_EX サポートは 5.1.0 から } return $cachename; } /* * テンプレートの中身を置換する。 * - '#{...}' を 'echo ...;' に置換 * - '%{...}' を 'echo htmlspecialchars(...);' に置換 * - ついでにXML宣言も置換 */ function convert_string($s) { $s = preg_replace('/^<\?xml/', '<<?php ?>?xml', $s); $s = preg_replace('/#\{(.*?)\}/', '<?php echo $1; ?>', $s); $s = preg_replace('/%\{(.*?)\}/', '<?php echo htmlspecialchars($1); ?>', $s); return $s; } ?>
<?php require_once('OtokomaeTemplate.php'); $TEMPLATE_DIR = 'templates'; $LAYOUT_TEMPLATE = 'layout.php'; $context = array('list'=>array(10,'<A&B>',NULL)); include_template('template.php', $context); ?>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <body> <h1>%{$title}</h1> <div id="maincontent"> <!-- テンプレートの内容 --> <?php echo $_content; ?> <!-- /テンプレートの内容 --> </div> </body> </html>
<?php // レイアウトテンプレート名をテンプレート中で指定する場合 ?> <?php //$_context['_layout'] = 'mylayout.php'; ?> <?php // レイアウトで使用する変数をテンプレート中で指定する場合 ?> <?php $_context['title'] = 'レイアウトのサンプル'; ?> <table> <?php foreach ($list as $i=>$item): ?> <tr bgcolor="#{$i % 2 ? '#FFCCCC' : '#CCCCFF'}"> <td>#{$i}</td> <td>%{$item}</td> </tr> <?php endforeach ?> </table>
出力例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <body> <h1>レイアウトのサンプル</h1> <div id="maincontent"> <!-- テンプレートの内容 --> <table> <tr bgcolor="#CCCCFF"> <td>0</td> <td>10</td> </tr> <tr bgcolor="#FFCCCC"> <td>1</td> <td><A&B></td> </tr> <tr bgcolor="#CCCCFF"> <td>2</td> <td></td> </tr> </table> <!-- /テンプレートの内容 --> </div> </body> </html>
いくつか補足:
週間少年ジャンプがアンケートだけで漫画の掲載を決めていると公言するのと同じ。
作家がファンと組んで組織票を投じて保身が容易になるだけ。SEO屋がユーザーにとってスパムでしかない広告で溢れ返させる。
単純にいくつかのキーワードで検索ベンチマークをして精度や適切さを評価すればいい。それがユーザーメリットを単純かつ適切に計測できてGoogleに対してもユーザーとしてフィードバックできる最善の方法だ。
(予言するとLiveSearchのヘボさにがっかりすると思う。特に日本ローカルなもので。)
こんなことPCでよくやってるだろ?Intelにアルゴリズムについて講釈垂れて「公開すべきだ」なんてPCオタクだってやらない。無意味だからだ。猿のようにベンチマーク取る方がそれでもまだずっとマシだしよりよくできる手段なわけだ。
新しいCPUが発売されるたびに速攻でPCショップに出向いて型番を指定して購入しベンチマークを取ったりするくせに、仕事でCore 2 Duoのリールカセットを交換をする時や、チップのコプラナリティ検査の時、外面検査器に基盤を延々と手乗せする時には何の感動も無くただ数をこなすだけ。
最近の憂鬱は、担当ラインでチップ立ちが見つかるとラインのメンバー全員にビールを振舞わねばならない「夏のマンハッタン祭り」が開催されており、検査担当が嬉しそうに「マン・ハッ・タン!マン・ハッ・タン!」と歌いながら報告してくる事だ。全く異常なく実装されているのをリフロー前で検査器と目視で確認しているにも関わらず摩天楼建設ラッシュが続いている事も憂鬱を加速させている要因となっている。
http://anond.hatelabo.jp/20070713095032
自転車、面白いよ。最近の自転車ブームに乗っかってオイラも遊んでいるけど、凄くいい。
体重が高校時代の体重…10年以上前に戻った。15kg減量成功。
皮下脂肪が減ったので、腹筋が割れて見える。もちろん自転車に乗る以外の運動はしていない。
足も細くなった。
しかも、それが数千円からという安さ。そして自分の体でベンチマークできる。楽しい。
パーツ替えていったら、もう一台組みたてられるというパターンもある。
川縁など、自転車道をぼーっと走っていると気分爽快。
空が広い!日差しが気持ちいい。
暑いか?…と思ったけど、バイクと一緒で走っている間は十分快適。
速度や距離以外に心拍数やクランク回転数、パーツ重量に車体重量。標高に斜度。
Excel大活躍。
鬱で悩んでいた時代がウソのようです。
元気になったよ。
Guthrie氏「われわれのベンチマークでは、Webブラウザにおいてネイティブ環境のJavaScriptの300〜1000倍の高速動作を確認している」ってことだから、パフォーマンスの種類によって300〜1000倍かと思ったけど、この結果を見るとパフォーマンスというのはイベント処理とか描画処理とかを含む総合的なものらしい。そんなわけで総合的に300〜1000倍だと。
ただJavaScriptとSilverlightは性質の異なるものだし、どう総合的に判断したのか分かりかねる。最近流行のLightboxばりのアニメーションとか? 比較するならFlash & ASと比較してほしい>Microsoftの中の人
速度面以外でFlashとSolverlightを比較してみると……
http://journal.mycom.co.jp/articles/2007/05/07/mix02/001.html
とのことなのでちょっと実験してみました。
まず、用意するのは以下の円周率を求めるルーチン。ベンチマーク用にループ回数を固定してあります。JavaScriptでは若干変更があります。
double pi() { double pi, ppi; int k = 0; float ek = 0.0; while (k < 1000000) { ppi = pi; ek = 8.0*k; pi += (4/(ek+1) - 2/(ek+4) - 1/(ek+5) - 1/(ek+6)) / pow(16.0, k); k++; } return pi; }
そんでもって次の環境で処理時間を計ります。
結果は以下の通り。
ブラウザとか | 平均処理時間 [秒] | Cと比べて何倍かかったか |
---|---|---|
C | 0.28 | (1.0) |
Safari | 8.39 | 30 |
Camino | 6.45 | 23 |
Firefox | 10.34 | 37 |
Opera | 3.31 | 11.8 |
WebKit | 3.18 | 11.4 |
あれぇー? てことはSilverlightってCより8倍以上速いじゃん!!
ktkr!!!!
wktkして待ちましょー