高速&シンプルなJavascriptテンプレートシステム『RND』
2006年08月14日
As web applications get more dynamic and complex, it's crucial to know what's the fastest way to render content. I have done some research and I am gladly sharing it with you.
高速&シンプルなJavascriptテンプレートシステム『RND』の紹介。
Ajaxなどを駆使して動的にWebアプリケーションのHTMLを書き換える手法は、最近のWebアプリのトレンドとなっています。
動的にWebアプリケーションのHTMLを書き換える方法としては次があります。
-
document.createElementでHTML要素を動的に作成し、appendChildなどでHTMLのDOMツリーに追加する方法
-
element.innerHTMLによってHTMLを直接書き換える方法
-
テンプレートシステムの利用
これらの方法のそれぞれのベンチマークを取ると、
document.createElementによる方法が最も遅く、element.innerHTMLの3倍も時間がかり、結果としてelement.innerHTMLを書き換える方法が最も速いようです。
かといって、element.innerHTMLによって直接HTMLを埋め込む記述は、HTMLが所々に散在してコードが読みにくくなったりしてしまい、テンプレートの再利用も出来ません。
innerHTMLで直接HTMLを挿入している例)
elem.innerHTML = '<div id="'+idname+'">'+htmlvalue+'</div>';
※緑部分、HTMLと変数が混在していて、読みづらく、再利用もできない。そして、こういったコードが所々に散在してしまうのでコードの全体的な可読性が下がる。
ということでテンプレートシステムの登場。
テンプレートシステムといっても、次のような関数を一個定義するだけです。
function RND(tmpl, ns) {
var fn = function(w, g) {
g = g.split("|");
var cnt = ns[g[0]];
for(var i=1; i < g.length; i++)
cnt = eval(g[i])(cnt);
return cnt || w;
};
return tmpl.replace(/%(([A-Za-z0-9_|.]*))/g, fn);
}
関数を用意したら、次のコードを記述します。
var tmpl = '<a href="%(link)">%(value)</a>';
var name_space = {'link': 'http://amix.dk', 'value': 5.5};
alert( RND(tmpl, name_space) );
tmpl がHTMLテンプレート変数で、name_space が割り当てる変数です。
テンプレートの書式は、%(変数名) のようにします。割り当てる変数はjson形式で定義し、関数に渡します。
このJavaScriptプログラムを実行すると、<a href="http://amix.dk">5</a> がアラート出力されます。
関数を通すだけなので、パフォーマンスも出るようです(サイトのベンチマーク結果参照)。
テンプレートシステム部分のコード量も関数一個と、少ないのでサイズとしても気にならないですね。
そして、テンプレートと変数を分けることにより、データとHTMLの分離ができ、ソースコードの可読性を上げることができます。
更に、テンプレート部分が他の部分でも再利用できる形になりました。
上記の小さなサンプルではそのメリットを感じ取りにくいかもしれませんが、
テンプレートを別のファイルに定義しておいたり、クラスのメンバ変数に持たせておくことで便利に使えそう。
Javascript 開発規模が大きくなり、コードの肥大化がおこるにつれこういった開発手法が必要になってきますね:-)
関連エントリ
JavaScriptで動くテンプレートエンジン:JSmarty
投稿者 KJ : 2006年08月14日 09:09
|
![]()
間違いの指摘をしていただける方はメールでお願いします
最新のブログ記事
- 2008年8月29日 管理人のブックマーク
- 全キャリア対応のデコメールの作成・変換が可能なPHPライブラリ「Qdmail」
- プロフェッショナルなノートパソコンの広告風画像を作る流れ
- 歯車や雲、人型など実用的なPhotoshopブラシ集
- 2008年8月28日 管理人のブックマーク
- オープンソースの便利PHPスクリプトまとめサイト「Open Source PHP」
- 表示法が新しくセクシーなLightBox「SexyLightBox」
- 背景画像やテクスチャ画像のリソース13サイト
- 2008年8月27日 管理人のブックマーク
- Ajaxベースのクールなショッピングカート作成
- WEBで好きな曲を共有可能な音楽共有オープンソース「Opentape」


















