6

http://blog.urbantastic.com/post/81336210/tech-tuesday-the-fiddly-bits

UrbantasticのHeathは、彼のHTML生成システムについて次のように書いています。

UrbantasticのすべてのHTMLは完全に静的です。すべての動的データは、AJAXを介してJSON形式で送信され、Javascriptを使用してHTMLと結合されます。言い換えると、UrbantasticのサーバーソフトウェアはJSONを排他的に生成および消費します。HTML、CSS、Javascript、および画像はすべて、異なるサービス(バニラNginxサーバー)を介して送信されます。

プレゼンテーションとデータを物理的に分離しているので、これは興味深いモデルだと思います。私は建築の専門家ではありませんが、効率と安定性が飛躍的に向上するようです。

ただし、次のことが私に関係しています。


  • [主観的]Clojureは非常に強力です。Javascriptはそうではありません。別の目標のために作成された言語ですべてのコンテンツ生成を作成すると、多少の苦痛が生じます(CSSでJavascriptタイプのコードを作成することを想像してください)。彼がJavascriptを生成するためのマクロシステムを持っていない限り、HeathはおそらくJavaScriptとClojureを絶えず切り替えています。彼はまたたくさんのJSコードを持っているでしょう。おそらくClojureよりもはるかに多いでしょう。これは、パワー、迅速な開発、簡潔さ、そしてLISPベースの言語に切り替えるときに私たちが見ているすべての点で良くないかもしれません。

  • [パフォーマンス]これについてはよくわかりませんが、ユーザーのマシンですべてをレンダリングするのが遅れる可能性があります。

  • 【アクセシビリティ】JSを無効にしている場合、サイトは一切ご利用いただけません。

  • [アクセシビリティ#2] JavaScriptでいっぱいになる動的データの多くは、クロスブラウザの問題を引き起こすと思います。

誰かコメントできますか?このタイプのアーキテクチャについてのあなたの意見を読んでみたいと思います。

参照:

  1. HNに関するディスカッションへのリンク。
  2. / r/programmingに関するディスカッションへのリンク。
4

3 に答える 3

3

「UrbantasticのすべてのHTMLは完全に静的です。すべての動的データは、AJAXを介してJSON形式で送信され、Javascriptを使用してHTMLと結合されます。」

それがRIAの標準模型だと思います。ここでは強調語は「すべて」のようです。多くのWebサイトでは、動的コンテンツの多くはまだAjaxを介して取得されておらず、主要な機能のみが取得されています。

多くの要素を含む巨大なWebページがない場合、レンダリングの問題が大きなボトルネックになるとは思いません。

JSのアクセシビリティは確かに問題です。ただし、AJAXを体験したいユーザーは、JSを有効にする必要があります。有効にしていないユーザーの数について調査を行いましたか?

于 2009-02-26T07:09:25.187 に答える
1

AJAX が大ヒットし始めた 2005 年後半、私はクライアント側のテンプレート エンジンを作成し、基本的にブロガーのテンプレートを本格的な AJAX エクスペリエンスに変えました。

問題は、そのテンプレートのものは、実装が非常に簡単で、多くの単調な作業を排除したことです.

これがどのように行われたかです。

<div id="blogger-post-template">
<h1><span id="blogger-post-header"/></h1>
<p><span id="blogger-post-body"/><p>
<div>

そして JavaScript で:

var response = // <- AJAX response
var container = document.getElementById("blogger-post-template");
if (!template) { // template context
    template = container.cloneNode(true); // deep clone
}
// clear container
while(container.firstChild) 
    container.removeChild(template.firstChild);

container.appendChild(instantiate(template, response));

インスタンス化関数は、テンプレートのディープ クローンを作成し、そのクローンで識別子を検索して、応答で見つかったデータに置き換えます。最終的な結果は、元々 HTML で定義されていたデータが取り込まれた DOM ツリーです。複数の結果が得られた場合は、上記のコードをループしました。

于 2009-02-26T07:24:13.887 に答える