0
function Obj()
{
this.prop = { a: 1, b: 2 };
this.access();
access(this.prop);
}
Obj.prototype.access = function()
{
// accessing 'this.prop' directly
}
function access(property)
{
// accessing 'this.prop' through local reference 'property'
}
多少性能命中的訪問時Obj.prop
間接地通過一個對象引用(如在全球access()
函數看出)與直接(如在Obj
的access()
方法可見)招致,爲什麼?Javascript - 通過引用訪問對象是否會導致性能下降?
你的兩種情況沒有區別。無論是「this」還是「foo」,你仍然在做'x.y'。 – ssube
@ssube我的理解如下,並在以下頁面進一步解釋:http://gameprogrammingpatterns.com/data-locality.html - 參考指向內存中某個任意位置的數據。間接訪問數據幾乎總是會產生「緩存未命中」,因爲它與本地數據不相連。其結果是CPU在等待數據被檢索時停頓,這導致性能下降。這也適用於Javascript嗎,還是有優化到位? – sookie
@sookie:這種優化是完成的,如果有的話,只能由JavaScript中的編譯器/解釋器完成。但是,不,總是有相同數量的參考查找,無論您是否使用中間變量,所以它沒有區別。當你重複它們時,緩存(無論是在編譯的代碼還是在CPU本身)都會照顧到這一點。 – Bergi