2010-11-21 8 views
5

最近私はウェブアプリケーションを作り始めました。私はいくつかのものを作っていますが、ベストプラクティスについてはよく分かりません。テンプレートを使用したHTMLのビルドとjavascriptのビルド

これまでは、Django、web.py、PHPのテンプレートシステムを使用していました。しかし、クライアントをリフレッシュせずにjQueryと素敵なajaxyの魔法を使ってサーバーからデータを取得しています.JavaScriptで直接HTMLを構築する利点があります(クライアントに小さなjsonオブジェクトを送信するだけで彼に何を変え、どのようにしたらよいかを把握させてください)。

これでテンプレートでレンダリングされたいくつかのビットがあります。また、JavaScriptとHTMLの両方を混在させた1つの恐ろしいケースでも、HTMLを作成するjavascript関数を生成するweb.pyテンプレートテーブル - Cマクロのような感じがもう一度! (私は最終的にそれをリファクタリングします)

これはWeb開発の共通の問題ですか? 「jsonをすべて使用し、javascriptで可能な限りレンダリングする」、「ライブラリfooを使用する」などの推奨されるベストプラクティスはどれですか?テンプレートを使って何を扱うべきか、またjavascriptで扱うべきものについての良いヒューリスティック?

ここでビットを検索すると、可能な解決策のように見えるasking about javascript templatesという人が見つかりました。

答えて

4

ページのレイアウトにJavascriptを使用しないでください。必要な場所でのみ使用してください。

最近の拡張機能や標準化にもかかわらず、Javascriptは一般的に遅く、完全な互換性がありません(古いIEなどと思う)、一部のスクリーンリーダーやスクレーパー/検索エンジンとの互換性がありません。

まっすぐなHTMLを返すことによってそれを行うことができれば、それは通常あなたが行きたい方法です。

+0

クライアント側のスクリプティングの背後に隠れているコンテンツは、検索エンジンには表示されません。 – bobince

+0

@bobince、それは私がスクレーパーを意味するものです。私はその投稿を明確にした。 – Brad

+0

私の現在の使用にはJavascriptが必要です - 私は非常に動的なページを持つアプリケーションを作っていますが、(ページ全体を再レンダリングせずに強調表示、選択、更新するために)クライアントサイドのJavaScriptをかなり必要とします。とにかく検索エンジンに検索させたいという内容のコンテンツはありません。 – Emile

1

JavaScriptのウェブサイトの機能をベースにしないでください。あなたがそうするなら、あなたはJavaScriptをオフにしているすべての訪問者を失うでしょう。本当にしたい場合は、javascriptをオフにしてユーザーを検出し、リダイレクトする必要があります。代わりの<noscript>を提供してください。さらに、クローラは現在JavaScriptの解析が可能ですが、ウェブサイトのSEOに対する大きな被害です。現在のモバイルデバイス、ネットブックなどで問題になる可能性のある互換性とオーバーヘッドの問題もあります。

+2

JavaScriptをオフにしてすべての訪問者を失ったとは思えません。ウェブサイトのダイナミックさとJavaScriptの重さが増しているので、それをオフにしてしまうと、多くのウェブエクスペリエンスが失われてしまいます。 – micmcg

+0

私がBradに言ったように、私はJavaScriptのWebアプリケーションの機能をベースにしていますが、私は主にそれを行うためのきれいな方法について疑問を抱いています(わかりやすく、修正可能な、再利用可能なコードできれいです。モバイルプラットフォームではうまくいかない場合が多い)。 – Emile

1

私はいつも同じトラブルに遭いました。 web.pyテンプレートを使ってレンダリングするWebページがあり、それにはajaxページネーションがあります。だから、javascriptを使って次のページをレンダリングしなければならなかった。私はweb.pyテンプレートエンジンを拡張して、同じテンプレート出力をレンダリングするためのjavascript関数を生成しました。

は、より多くの詳細については、このブログ記事を参照してください。

http://anandology.com/blog/javascript-templating-with-webpy/

2

ここに少し関連questionがあります。

おそらく、同じテンプレートを両方とも使用することができます - this libraryは見えます。

テンプレートだけをサーバー上でレンダリングすることができます。the question上に効率的に行う方法があります。

必要に応じて、特定のテンプレートをjavascriptで複製できます。jqtemplateを試してください。

個人的には、おそらく、テンプレートの重複を避けるために、私はおそらくサーバー側でのみHTMLをレンダリングします。私のサーバーがJSON Webサービスのように機能し、おそらく他のクライアントにもサービスを提供していればJSテンプレートを作成します。

あなたのサイトがアクセス可能で、非jsフレンドリーであることが重要であれば、それはあなたのサイトをjsなしで完全に書いてからprogressively enhanceです。

+0

あなたの言っていることは、私のサーバー*がJSON Webサービスのほうが多かったのかもしれないと思うのです。それは私が作った(私が言ったように、私はWebアプリケーションに新しい)ので、明確化のために感謝しています。 – Emile

1

AngularJSは、この質問をしてから数年後に発見された、クライアントサイドのテンプレート作成によく使用されるソリューションです。 DjangoのようにHTMLテンプレート( "partials")を書いてから、必要に応じてjavascriptを取り出して解釈することができます。コードとレイアウトを完全に分離したダイナミックなWebサイトと両方の世界を最大限に活用できます。

関連する問題