Xslate 2.0 will use only Mouse, migrated from Any::Moose. Please test Text::Xslate 1.9999_01 whether not to break your applications. http://metacpan.org/release/GFUJI/Text-Xslate-1.9999_01/
TTの本体を差し替える 前回はウェブ業界で標準的に使われているTemplate Toolkitをより安全に使うためのカスタマイズ方法をいくつか紹介しました。しばしば批判の対象となってきたエスケープの問題については、TTでも適切な拡張を施せば後発のモジュールと遜色ないか、それ以上に便利に使えることは確認できたかと思います。 ただし、エスケープの仕方ひとつとってもさまざまなやり方があったように、TTは、柔軟である代償として速度面ではかなりの不利を抱えています。 もっとも、不利といってもそれはいまの、しかもかなり規模の大きな現場の視点で見たときの話で、数年前、おもなライバルがHTML::Mason(と、機能面で大きな差があるHTML::Template)だった時代にはTTも十分に高速といえましたし[1]、中小規模のサイトではいまでもTTで十分なレスポンスは得られます。 また、かれこれ10年近く
XslateはMacroに対応しているのですが、INCLUDE先では利用できないという制約があります。 その対応が以下実際のコード。 INCLUDE先でも利用できるようになった際の移行を考慮して実装しています。 kazeburo++ package Golgo::Admin::View::MacroSection; use strict; use warnings; use base qw/Exporter/; use Data::Section::Simple; use Text::Xslate; our @EXPORT = qw( paginate ); my $XSLATE; __PACKAGE__->create_xslate(); sub paginate { my $args = {}; ( $args->{pager} , $args->{my_uri} ) = @_; re
至らない点は多々ありましたが無事発表を終えることができました!ありがとうございました! How Xslate WorksView more presentations from gorof.ちょっと捕捉します。 まず会場の質疑応答から(スライドにも簡単に追記しました)。 Q. テンプレートをPerlコードに落とし込んでperlに実行させるというモデルもあると思うが、敢えて独自VMを実装した理由は? A. たしかに、Perlコードに落とし込むテンプレートエンジンはあり、Template::ToolkitやText::MicroTemplateなどはそうしています。しかしPerlは汎用のインタプリタであり、テンプレートのレンダリングに特化しているわけではりません。Xslateは汎用性を犠牲にし、高速化を図っています。特に、出力バッファに対する文字列の連結に大きな差があります。なので、独自VMの
Perl::うそ。Text::Xslate速い。 Posted by speed on Monday September 27 2010,@ 01:44 Modify Remove 大変失礼いたしました。Text::Xslateは速いです。トップページ並みの速度が出るように「なった」。原因は不明ですが、周辺を色々さわった後でベンチを取り直したら実行速度が3倍になりました。不思議(´ Д `) 計測間違いではないと思う。コアの実行速度を上げるために何度も取り直したから。周辺の処理を追加して巨大化したのに、なぜか速くなった。 またトップページは一般的なMPM::Prefork::mod_phpではなくMPM::Worker::fcgi_phpです。以前計測した時は前者よりも後者の方が速かった。飽和攻撃では当然Wokerの方が速いだろうけど、インターバルなアクセスでもWorker+FCGIの方が
TT で TT の説明を書くような場合、 [% "[% foo.bar %\]" %] のように、クォート内でもタグの処理がされてしまうため、良くわからないエスケープ*1をしなくてはならなく*2、とてもハマったが、xslate の TTerse ならば自然に [% "[% foo.bar %]" %] と書く事ができる。 さらに言うと、xslate は syntax を差し替えることが可能なので、TTerse の説明を書くような場合は、 Kolon を使える。 こういうちょっとした動作確認をしたい場合も、TT 付属の tpage はファイルしか受付ないが、 xslate コマンドは -e でワンライナーを受け付けるため $ xslate -s TTerse -e '[% "[% foo.bar %]" %]' [% foo.bar %] $ xslate -s Kolon -e '[% f
40 :デフォルトの名無しさん:2010/08/01(日) 21:43:47 xslateというテンプレートエンジンが速いそうですが、mobasifと比べてどっちが速いでしょうか。 ベンチマーク探したけど、両者を比較しているのは見つかりませんでした。 というか xslate のほうは後発なんだから、高速だと主張するならTTなんかじゃなくて mobasifと比べてほしいよね。 http://pc12.2ch.net/test/read.cgi/tech/1280541200/40 http://xslate.org/ にはわざと MobaSiF::Template との比較はのせていません。日本でしかしられておらず、しかも日本でも一社以外ではほとんどつかわれていないとおもわれるテンプレートエンジンとの比較を掲載しても海外の人がひいてしまうからです(xslate.org は海外へのプロモーショ
[twitter:@typester]さんがText::MicroTemplate::DataSectionを書いて気になっていたところ、[twitter:@kazeburo]さんからもXslateの対応について要求があったので、version 0.1043でData::Section::Simpleと協調するようにしました。 ただし、依存モジュールを増やしたくない*1ので直接サポートではありません。 具体的には、以下のように使います*2: #!perl -w use strict; use Text::Xslate; use Data::Section::Simple; my $tx = Text::Xslate->new( path => [ Data::Section::Simple ->new()->get_data_section(), ], ); print $tx->rend
Xslate のエスケープポリシーについて考えたので、ここでまとめておく*1。 Xslate のエスケープ処理について、覚えることは以下の三つである*2。 テンプテートタグ内で生成した値は自動的にエスケープされる エスケープ処理をさせたくないときはmark_raw フィルタを使う エスケープ処理を強制させたいときは unmark_rawフィルタを使う 以下、詳しく解説する。 まず、基本的には Text::MicroTemplate のポリシーを踏襲している*3。すなわち、テンプレートタグ内で生成された文字列については、HTMLのメタ文字(< > & " &apos)が自動的にエスケープされる。エスケープ処理は、一般式に対する出力コマンドが担っている。 # Text::Xslate version 0.1032 $ xslate -e '<foo>' # 地の文字列はそのまま出力 <foo>
id:tokuhirom の助言を受けて、APIの見直しなどをした*1。 キャッシュディレクトリのデフォルトが、テンプレートファイルと同じディレクトリからFile::Spec->tmpdirへ。これはcache_dirオプションで変更もできる 一引数の render(\%vars) は混乱を招くため廃止。文字列をのレンダリングはrender_string($str, \%vars)を使うようにした fileオプションとstringオプションも混乱を招くため廃止 TT風構文でINCLUDE、UNLESS、関数呼び出し、メソッド呼び出しをサポートした importオプションでモジュールの関数を使えるようにした。エクスポート可能な関数であれば自由に使えるので、単純なラッパープラグインのための特別な名前空間は必要ない。 また、テンプレートカスケーディングを拡張し、cascade with ...が
僕がつくってるフレームワークであるところの Amon に Xslate 対応をいれてみた。 かなり TT とおなじ感覚でつかえるかんじ。テンプレートの継承が追加されてるぐらいで、基本は TT とおなじかんじか。 フレームワークにくみこむときはこんなかんじ。 package Amon::V::Xslate; use strict; use warnings; use base qw/Amon::V::TemplateBase/; use File::Spec (); use Scalar::Util (); use Text::Xslate 0.001_08 (); sub import { my $class = shift; if (@_>0 && shift eq '-base') { my $caller = caller(0); no strict 'refs'; unshift
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く