HTML convert timeに、Menubar等の処理時間が含まれない†
- ページ: BugTrack2
- 投稿者: ぃぉぃぉ
- 優先順位: 低
- 状態: 完了
- カテゴリー: 本体バグ
- 投稿日: 2007-06-24 (日) 12:00:08
- バージョン: 1.4.7
メッセージ†
skinを呼ぶ前にHTML convert time(一番下に表示されるやつ)で表示する時間を作成しているため、skinでの処理時間がHTML convert timeの表示値に含まれていない。少なくともMenubarの処理時間は含めたい。
次の3つのファイルを修正して対応できる。サーバーでの処理時間ほぼすべてが含まれるようになるはず。
- skin/pukiwiki.skin.php
- lib/func.php
- lib/html.php
skin/pukiwiki.skin.php†
lib/func.php†
lib/html.php†
- コメントありがとうございます。HTML convert timeは皆「出力するために色々かかった時間」であるとイメージしているはずなので、実はそうでなく、MenuBarやskinであれこれやった時間が含まれてないというのは結構意外です。そしてこれをどうにかしようとした場合、関数でしかフォローできないと思います。まとめると、すごく自然な発想で、今までより現実的なアイデアだと思います -- henoheno
- 互換性を考えると、 $taketime はまだ残さねばならないかもしれません。これは lib/html.php のコードを入れ替えるだけで済むと思います。 -- henoheno
- $longtaketime = getmicrotime() - MUTIME;
- $taketime = sprintf('%01.03f', $longtaketime);
+ // Obsolete but compatible
+ $taketime = showtaketime();
require(SKIN_FILE);
- 後は関数名を一般化できないかどうか位かな・・・。$longtaketime は他では参照していない様ですね。echoだと $taketime に代入したり、複数回呼んだりできないので return にして・・・単純にするとこんな感じでしょうか -- henoheno
+ function showtaketime()
+ {
+ return sprintf('%01.03f', getmicrotime() - MUTIME);
+ }
- 後は・・・getmicrotime() はこの部分でしか使っていない関数なので、今回の関数を挿入する位置は getmicrotime() が定義されている場所の隣にするのが良さそうです。仮に将来 getmicrotime() ごと無くしたり、単純化できるなら、コードの複雑度が下がってより幸せですね :) -- henoheno
- getmicrotime() ねたですが、PHPfunc:microtime のコメント欄に、strtok() を使うのが最もコストが軽いという実験結果と検証コードが載っていますね。 --
- 関数になることで、例えばspam.php のブロック通知メールにも処理時間を(コードの重複なしで、簡単に)載せられるようになりそうですね。 -- henoheno
- さて、このまま定数 MUTIME (外部にある値)に依存した関数にすべきかどうか、それとも (getmicrotime() を引数に取って) 「時刻の差分とsprintf() する関数」に一般化すべきかどうか・・・。悩ましいですね。むむ。 -- henoheno
- コミットしました。関数の構造はシンプルなままとし、コメントで説明を補いました。関数名は elapsedtime() とさせていただきました。いかがなものでしょうか。 -- henoheno
- 作業お疲れ様です。なるほど。ここの互換性は重要かもしれませんね。バージョンあげたときに、スキンをそのまま使いたい人は多いでしょうから。
関数化での汎用性で悩まれていますが、この辺りの値を使う人は、この関数を呼ばずに直でUTIMEやgetmicrotimeを使うので、あまり気にしなくても良いかと。自分がskinを修正した際も直で式を書きたかったんですが、うまくいかなかったので仕方なく関数にしました。 -- ぃぉぃぉ