私は、データ入力用のドロップダウンを選択してグリッドを多用する Web アプリケーションに取り組んでいます。グリッドは、選択ボックスの行で構成されます。場合によっては、ページ上に同時に何百もの選択ボックスが表示されることがあります。
現時点では、以下の方法と同様にグリッドをレンダリングします。
function render(jsonData) {
var html = [];
$.each(jsonData.Rows, function (i, row) {
html.push('<tr data-id="', row.Id, '"><td>');
renderSelect(html, globalVar.ArrayX, row.ValueX);
html.push('</td><td>');
renderSelect(html, globalVar.ArrayY, row.ValueY);
html.push('</td><td>');
...
html.push('</tr>');
});
$('tbody#container').html(html.join(''));
}
function renderSelect(html, set, selectedValue) {
html.push('<select>');
$.each(set, function (i, item) {
html.push('<option value="', item.Id, '"', item.Id === selectedValue ? ' selected="1"' : '', '>', item.Name, '</option>');
});
html.push('</select>');
}
ほとんどの選択ボックスには同じオプションがあり、行ごとに選択された項目が異なるだけです (したがって、選択ボックスの html を単純にキャッシュすることはできません)。
パフォーマンスは悪くありません。Chrome はグリッドを 1 秒でレンダリングし、FF と IE は約 2 秒でレンダリングします。それでも、これらの選択ボックスを作成するためのよりメモリ/パフォーマンス効率の高い代替手段があるかどうか疑問に思っています。代わりにそれらを参照する方法があるかもしれません。行ごとにそれらを再作成するのですか?