home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

PHP/HTML_QuickFormメモ/20050615/SmartyRendererが遅い

PHP/HTML_QuickFormメモ/20050615/SmartyRendererが遅い

PHP / HTML_QuickFormメモ / 20050615 / SmartyRendererが遅い
id: 48 所有者: msakamoto-sf    作成日: 2005-06-15 22:25:28
カテゴリ: PHP 

2005年6月前後のHTML_QuickFormについての話となります。アップデートできてなくて御免なさい。

HTML_QuickFormでレンダリングする時、Smartyレンダラを使うとやたらと処理が重くなる現象が2005年6月当時発生していました。1500msほどがSmartyレンダラの処理で費やされていました。

xdebugで追い掛けたところ、HTML_QuickFormのデフォルトのSmartyレンダラは

  • setRequiredTemplate
  • setErrorTemplate

で指定されたSmartyテンプレートを 要素毎に

  • _renderError()
  • _renderRequired()

これら二つのメソッド内部で、 ローカルにSmartyコンパイルしている というとんでもない事実がありました。だから遅かった訳です。
逆を言えば、そもそもrequiredやerrorの時にSmartyテンプレートを 使わなければ 、毎度毎度Smartyコンパイルする必要もないわけです。

よって、以下のような派生クラスを用意してこれをレンダラとして使うことにしました。

class FastQuickFormRenderer extends HTML_QuickForm_Renderer_ArraySmarty
{
    // _required, _error が定義されていないと、各rendererが呼ばれない。
    var $_required = " "; // ダミーで良いので定義しておく。
    var $_error = " ";

    function HTML_QuickForm_Renderer_ArraySmartyLight
        (&$tpl, $staticLabels = false)
    {
        $this->HTML_QuickForm_Renderer_ArraySmarty($tpl, $staticLabels);
    }

    function _renderRequired(&$label, &$html, &$required, &$error)
    {
        if(!empty($error)) {
            $label = sprintf('<span style="color: red;">%s</span>', $label);
        } else {
            if(!empty($required)) {
                $label .= '<font color="red">*</font>';
            }
        }
    }

    function _renderError(&$label, &$html, &$error)
    {
        if(!empty($error)) {
            $html .= '<br /><span class="qferror_html">'.$error.'</span>';
        }
    }
}

Smartyコンパイラを起動する関数を、単なる文字列処理に上書きしてしまうわけです。んで、この上書きしたレンダラクラスを使用すればオッケーな訳です。
Smartyを使うほど凝ったレンダリングが必要なわけではなくて、単にエラーとかその辺りをちょっとアプリ側でカスタマイズできれば良かったので、この程度でOKでした。
・・・何で2005年当時はSmartyレンダラ使おうと思ったのかな?単にアプリ側でSmartyを使ってたからかな?思い出せない・・・。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2008-12-21 22:32:44
md5:f664f984fff7224e51f2a78b577de56d
sha1:f07f9efd08b8fb9f84998633f0aa3bb48ec14839
コメント
コメントを投稿するにはログインして下さい。