2014-09-23 24 views
1
  1. 在Javascript中,我可以將2D點(1,2)表示爲對象{x:1, y:2}或 數組[1,2]。在性能方面,最後一個顯着更好嗎?
  2. 如果在我的節目的某些時候我決定將屬性添加到一個點v(如v.next = u)和v被表示爲一個陣列,將我鬆該[*]性能增益?

[*]假設答案1是YES將2D點表示爲數組

+0

在JavaScript中一切都是一個對象,甚至數組,所以我沒有看到任何區別,做什麼更容易維護 – 2014-09-23 20:18:06

+0

嗯,但在實踐中,我認爲索引數組比訪問對象的字段快得多(因爲後來需要某種哈希,前者實際上是內存訪問,前提是數組不是稀疏的,它是一個「真正的」數組(不僅僅是具有數字字段的對象)) – stag 2014-09-23 20:24:50

+0

我的意思是,也許是標準的一切都是同樣的事情,但我真的認爲(或希望)一個JavaScript引擎不會對每個數組訪問進行哈希查找。 – stag 2014-09-23 20:27:34

回答

0

以我自己的建議(上面的評論),搜索'數組對象點站點:jsperf.com'導致http://jsperf.com/point-array-vs-point-object/2,這表明,至少在今天的Chrome和Node.js(V8)中,對象可能是更好的選擇。

但是,如果我想把踏板放到金屬上,並且主要使用點數組,我還會將所有參數強制爲整數的代碼基準(x=x|0)並使用一維數組,執行地址手動計算x/y,併爲它寫一個ES6迭代器。如果仔細完成,這可以避免爲大多數點創建對象,即使在操縱它們時也是如此。