名前¶
HTML::Template::JIT - HTML::Templateのためのジャストインタイムなコンパイラ
概要¶
use HTML::Template::JIT;
my $template = HTML::Template::JIT->new(filename => 'foo.tmpl',
jit_path => '/tmp/jit',
);
$template->param(banana_count => 10);
print $template->output();
説明¶
このモジュールは、HTML::Templateのためのジャストインタイムなコンパイラです。 このモジュールは、二段階に働きます。
- ロード
-
new() が呼ばれると、このモジュールは、チェックを行い、 既にコンパイルされたテンプレートのバージョンが最新かどうかをを判断します。 コンパイルされてあれば、コンパイルされたバージョンをロードし、 param() と output() を呼ぶためのハンドルを返します。
- コンパイル
-
テンプレートがコンパイルされる必要があるなら - 変更されたか、まだコンパイルされていないために -、 HTML::Template::JIT は、HTML::Template と Inline::Cを使っている HTML::Template::JIT::Compiler を呼び出し、 テンプレートをネイティブな機械(語)命令にコンパイルします。
コンパイルされた形式は、ディスクの jit_path ディレクトリに保存され、 ロード段階にコントロールが返します。
これは、HTML::Templateのキャッシュモードの働きによく似ていますが、 いくつかの重要な違いがあります:
コンパイル段階に長時間かかります。システム依存であり、 大きなテンプレートをコンパイルするのに数秒かかることもあります。
結果として、コンパイルされたテンプレートは、普通のキャッシュされたテンプレートよりも だいぶ速いです。作者のベンチマークによると、HTML::Template::JIT によって コンパイル済みのテンプレートは、HTML::Template のキャッシュモードよりも4から8倍速く実行されます。
結果として、コンパイルされたテンプレートは、普通のキャッシュテンプレートよりも、 使用メモリは少ないです。もしも、全てのテンプレートが既にコンパイルされているのなら、 テンプレートを使うのに、HTML::Templateをロードする必要すらありません!
使いかた¶
使いかたは、普通のHTML::Templateの使いかたと同じですが、new()のオプションにいくつか追加 があります。new のオプションは以下の通りです:
- jit_path
-
これは、モジュールが、コンパイルされたモジュール (訳注:テンプレートがコンパイルされてモジュールになったもののことか?)を貯めるのに使います。 このディレクトリは、読み書き両方ができる必要があります。このディレクトリは、 テンプレートが変更され、リコンパイルされるにつれ、やがて、増えていくので、定期的に掃除したいかもしれません。 HTML::Template::JITは、将来のバージョンでは、後でそれ自身をうまく掃除するようになるでしょう。
- no_compile
-
このオプションはモジュールに、テンプレートを決してコンパイルしないように伝えます。 もし、テンプレートのコンパイル済みのバージョンが見つからなければ、 HTML::Template::JIT::Compiler をロードするのではなく、croak()を行います。 テンプレートを前にコンパイルしていて、ユーザがコンパイラの実行ラグを受けない手段を講じたいなら、 このオプションを使いたいでしょう。
- jit_debug
-
STDERRに漠然としたデバッグの束を吐き出します。次のことに留意してください。 このオプションを使うために、パスに
indent
ユーティリティの作業用のバージョンを持つ必要があります。 HTML::Template::JIT がindent
を、Cのコードを読みやすいように生成するのに使います。 - print_to_stdout
-
HTML::Templateの特別なバージョンの print_to オプションは、 変数に貯めるのではなく、標準出力に出力することを可能にします。 このオプションに、1をセットすると、output() は、 テンプレートのコンテンツを、直接、STDOUTに出力します。デフォルトは0です。
注意:print_to_stdoutを使うことで、結果として、巨大なテンプレートでは、重要なメモリの節約になります。 しかしながら、作者のテストでは、HTML::Template::JIT の普通の使いかたと比較すると、 全体としてのパフォーマンスが、わずかに落ちました。
警告¶
このバージョンはかなり限られています。下のオプションはサポートしません。
cache (all modes)
associate
print_to
scalarref (and friends)
arrayref (and friends)
die_on_bad_params
includeされたファイルは、新鮮さのために、コンパイルされたテンプレートをチェックするときに 変更がチェックされません。
CODE-ref params は、サポートされません。
query() メソッドは、サポートされません。
これは、それほど速くありません。 - いつか、普通のHTML::Templateよりもおよそ10倍の速さに到達したい。
あなたのCコンパイラがCの文字列の中に、UTF-8を受け入れない限り、 このモジュールがは、UTF-8で動くことを期待しません。 Cの標準の妨害だと考えています。それで、そのかわりに、 ここで、多少の仕事をする必要があると考えています。
開発が進むにつれ、いつかは、これらの全ての制限に対処したいと思っています。
バグ¶
バグを見つけたら、メーリングリストに参加して、バグについて教えてください。 HTML::Template メーリングリストに、下のURLを訪れて、参加できます。
http://lists.sourceforge.net/lists/listinfo/html-template-users
もちろん、私に直接([email protected])に、バグをメールで、送ることも出来ますが、 私は、バグレポートをメーリングリストへ転送する権利を取っておきます。
バグレポートを提出するときは、全ての詳細を含んでいることを確かめてください。 モジュールのバージョンと、問題をデモンストレートする テストスクリプトとテストテンプレートドキュメントを含んでください。
原文まま¶
Sam Tregar <[email protected]>
原文まま¶
HTML::Template::JIT : Just-in-time compiler for HTML::Template
Copyright (C) 2001 Sam Tregar ([email protected])
This module is free software; you can redistribute it and/or modify it under the terms of either:
a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or
b) the "Artistic License" which comes with this module.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the GNU General Public License or the Artistic License for more details.
You should have received a copy of the Artistic License with this module, in the file ARTISTIC. If not, I'll be glad to provide one.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
翻訳について¶
翻訳者:加藤敦 ([email protected])
Perlドキュメント日本語訳 Project にて、 Perlモジュール、ドキュメントの翻訳を行っております。
http://sourceforge.jp/projects/perldocjp/
http://www.freeml.com/ctrl/html/MLInfoForm/[email protected]
http://www.perldoc.jp