C/C++ のバックグラウンドから来て、キャッシュ ミスの削減に関するオブジェクトのメモリ レイアウトは、特にコンソールで作業する場合に重要です。データ指向の設計は、オブジェクト指向の設計よりも好まれることがよくあります。これは、関連するオブジェクトをメモリ内で (特にパフォーマンスが重要な領域で) 互いに近くに保つのに役立つためです。
最近、私はいくつかの Javascript 開発を行っていますが、Javascript コミュニティー内で一般的なコンセンサスがどのようなものか疑問に思っています。
Javascript の経験が限られているため、プロファイリング時にまったく予想外の結果が得られて驚くことがよくあります。Javascript オブジェクト/構造の内部メモリ レイアウトと実装は、ブラウザーによって大きく異なるため、最適化を試みる価値があるかどうか疑問に思います。
2 つのメソッドのパフォーマンスを比較するために jsPerfで簡単なテスト ケース ( http://jsperf.com/object-vs-data ) を作成しました。Chrome ではパフォーマンスの向上が示されていますが、Safari では顕著なスピードアップは見られませんでした。
Javascript では、オブジェクトのメモリ レイアウトにさえ気を配る必要がありますか? それとも、「ある方法で実装し、必要に応じて最適化する」タイプのものですか?
この 2 番目のオプションは、特に従うべき適切なガイドラインがある場合は、(開発時間の点で) 無駄に思えます。
ありがとう〜
補足情報: これは基本的に、Javascript で 2 つのアプローチを実装する方法です。上記の jsPerf テスト ケースは次のように実装されます。
var objectOriented = [
{ foo: 1, bar: 2 },
{ foo: 3, bar: 4 }
];
var dataOriented = {
foos: [1, 3],
bars: [2, 4]
};
// Object-oriented access:
var a = objectOriented[0].bar;
// Data-oriented access:
var b = dataOriented.bars[0];