この質問は、DOM 構造に埋め込まれたロード データに関するものです。私はjQuery2を使用していますが、質問は他のフレームワークまたは単一のJavascriptコードに対して有効です。
次の 2 つのシナリオがあります。
データが(ページと共に) 1 回読み込まれると、「データの更新」は必要ありません。
何らかのイベントによってデータが更新されたとき。
平均パフォーマンスは、いずれかで変更できます
新しい HTML と新しいデータを使用して、ページ フラグメントをリロードする必要がある、シナリオ 2 の典型的なケースを想定します。したがって、 は$('#myDiv').load('newHtmlFragment')
どのような方法でも使用されます...そして、AJAX を使用する jQuery プログラマーには、「DOM ベースのデータ」をロードする方法が 2 つあります。
- by HTML : すべてのデータを「newHtmlFragment」HTML に表現します。多くの段落があり、それぞれが のようになっているとし
<p id="someId" data-X="someContent">...more content</p>
ます。
各 には「冗長なオーバーヘッド」data-X1="contentX1" data-X2="contentX2" ...
があり、XHTML 指向のスクリプトでない場合、webservice スクリプトはエレガントではありません (私は PHP を使用しており、データは配列であり、 を使用することを好みますjson_encode
)。 - jQuery 評価による
$('#myDiv').load('newHtmlFragment')
: のみに 同じを使用し、<p id="someId">...more content</p>
なしでdata-X
。2 番目の AJAX は、jQuery スクリプトをロードし$('#someId').data(...)
て評価します。したがって、これはノード選択とデータ インクルージョンのオーバーヘッドですが、大きな項目データでは、各データを JSON でエンコードできます。 - by pure JSON : 「by jQuery」に似ていますが、2 番目の AJAX は のような JSON オブジェクトをロードします
var ALLDATA={'someId1':{...}, 'someId2':{...}, ...}
。これは、$('#myDiv p').each(function(){... foreach ... $(this).data('x',ALLDATA[id]['x']);})
選択の取得などを実行する静的関数のオーバーヘッドですが、ビッグデータでは、すべてのデータを JSON でエンコードできます。
質問: 最良の選択は何ですか? シナリオまたは別のコンテキストパラメーターに依存しますか? 重大なパフォーマンスのトレードオフはありますか?
PS: 完全な答えは、パフォーマンスの問題に対処する必要があります...パフォーマンスに大きな違いがない場合、最良の選択は「最良のプログラミング スタイル」とソフトウェア エンジニアリングの考慮事項に依存します。
回答への参照として必要な場合は、より多くのコンテキスト。私の実際の問題はシナリオ 1 にあり、2 番目の選択肢である「jQuery スクリプトによる」を使用して、次を実行しています。
$('#someId1').data({'bbox':[201733.2,7559711.5,202469.4,7560794.9],'2011-07':[3,6],'2011-08':[2,3],'2011-10':[4,4],'2012-01':[1,2],'2012-02':[12,12],'2012-03':[3,6],'2012-04':[6,12],'2012-05':[3,4],'2012-06':[2,4],'2012-07':[3,5],'2012-08':[10,11],'2012-09':[7,10],'2012-10':[1,2],'2012-12':[2,2],'2013-01':[6,10],'2013-02':[19,26],'2013-03':[2,4],'2013-04':[5,8],'2013-05':[4,5],'2013-06':[4,4]});
$('#someId2').data({'bbox':[197131.7,7564525.9,198932.0,7565798.1],'2011-07':[39,51],'2011-08':[2,3],'2011-09':[4,5],'2011-10':[13,14],'2011-11':[40,42],'2011-12':[21,25],'2012-01':[10,11],'2012-02':[26,31],'2012-03':[27,35],'2012-04':[8,10],'2012-05':[24,36],'2012-06':[4,7],'2012-07':[25,30],'2012-08':[9,11],'2012-09':[42,52],'2012-10':[4,7],'2012-11':[17,22],'2012-12':[7,8],'2013-01':[21,25],'2013-02':[5,8],'2013-03':[8,11],'2013-04':[28,40],'2013-05':[55,63],'2013-06':[1,1]});
$('#...').data(...); ... more 50 similar lines...