2016-03-31 14 views
0

私は小さなWebベースのゲーム(websocketsとnodejs)の構築に取り組んでいます。Javascriptの効率性:大きなオブジェクトと多数の配列

ゲームサーバーに接続できるクライアントがたくさんあります。各クライアントには、保存する必要のあるさまざまなプロパティがあります。

  • 位置:x、y、方向、速度など
  • 属性:エネルギー、HP、ダメージなど
  • のWebSocket接続情報
  • コントロール:キーの押下など
  • カップル他のもの

現在、私は別々の配列にそれらの領域を分割しましたですから、ユーザ12の位置を取得する必要がある場合は、usrPos [12] .xを参照し、websocketを通じてクライアントに情報を送信する必要がある場合は、usrSoc [12] .idなどを参照してください。 。

私はすべての情報を1つの配列にまとめる必要があるかどうか不思議でした。私はusr [12] .pos.xusr [12] .soc.idを見ています。明らかにこれははるかに大きなオブジェクトの配列を作成しますが、可読性はある程度向上します。また、1人のユーザーにデータを格納するために10種類の配列を追跡する必要もありません。

どのようにすればよいですか?もう一方の方が効率的です。人々の考えを聞くことに興味がある。ありがとう!

+0

これはあまりにも幅広く[so] –

+1

実際には*より*大きな*オブジェクトではなく、もっと*オブジェクトを作成します。理論的には、両方のアプローチでは、[アクセス特性が異なるかもしれません](https://en.wikipedia.org/wiki/Parallel_array)、ほぼ同じ容量のスペースが必要です。実際には、実際には全く問題ではありません。それがあなたのために十分であれば、あなたはあなたの実際のデータ上で互いに対してソリューションをベンチマークするべきです。 – Bergi

+2

論理的に接続されたデータを異なるデータ構造に分割することは、概念的に簡単でエラーが起こりにくいことはほとんどありません。例えば。両方のシナリオでユーザーの1人を削除する必要がある場合は、何をする必要があるか考えてください。またはユーザーをソートする必要がある場合。またはそれらを実装した後で、新しい属性を追加する必要がある場合。 – Amadan

答えて

2

どちらが良いですか?基本的なOOPについては、クライアントに関する情報を含むさまざまな「配列」があり、クライアントの情報はさまざまな配列に分散されており、すべての配列は別の配列とインデックスを共有する必要があります。

問題があります。ソケット配列からソケットを削除しても、その位置を削除しないとどうなりますか?バグ!だから、

、クライアントがクライアントである場合は、クライアントのソケット約10(あなたの例では)複合特性を有する、全体として扱い、彼の属性など

してくださいは、について考えていません"効率"。あなたの質問の答えは、効率性、保守性、堅牢性、シンプルさに関するものではありません。このようなことは、通常、より良いパフォーマンスに向かってあなたを自然に追いやりますが、パフォーマンスに問題がある場合にのみパフォーマンスを気にする必要があります。

(壁に書き留めてください):Premature optimization is the root of all evil

+0

私はこれが "OOP"と何か関係があるとは思いません。 –

+0

申し訳ありませんが、私はあなたに従っていません。システムの「クラス」を設計するときに最初にやらなければならないことは、どの種類のオブジェクトが関与し、どのようなものがあるかを判断することです。私が言ったように、基本的なOOP。クライアント "thingy"がある場合、おそらくクライアントクラス、または少なくともクライアント属性を持つオブジェクトが必要です。もし彼が適切なクラスを実装しないならば。 JavaScriptにはそういうことはありませんが、あなたはそのアイデアを得ることができます。 –

+0

大したことではありませんが、通常、データと機能をカプセル化するクラスとクラス階層の設計を指すためにOOPが使用されています。これは、より古くからの古いデータ構造設計の問題です。 –

関連する問題