[英]Does using local variables (instead of repeated property access) ever hurt performance?
我一直在尋找一些旨在在性能敏感的環境中運行的JavaScript代碼,主要是移動環境中的游戲引擎。
在許多情況下,此代碼不使用局部變量,而是更喜歡使用顯式鏈,例如
if (this.x.y[z].i) {
this.x.y[z].a += this.x.y[z].b;
}
this.xy
和this.xyz
表示“重復” - 並且其中沒有任何中間屬性具有getter,並且q
是其他地方未使用的局部變量 - 可以在語義上等同於以下處理。
var q = this.x.y[z]
if (q.i) {
q.a += q.b;
}
(名稱一直模糊不清,特別是試圖減輕偏見;這個問題並不是關於要采用哪種“模式” - 雖然我更喜歡后者,並打算100%使用它,因此我在問這個問題。)
現在,在我收到大量關於“為清晰度編寫代碼”和“不要過早優化”的評論之前,請繼續閱讀!
因此,給出以下斷言/公理並注意到這個問題不是關於如何提高性能,而是如果使用本地緩存/“別名”變量會降低相關JavaScript實現的性能:
可以/將使用局部變量而不是 [多個]直接屬性訪問導致性能下降嗎? 如果這種下降是“不可忽視的......”
答案可能更多地取決於瀏覽器而不是代碼。 考慮將JavaScript創建為“解釋”,這意味着代碼在解析時被解析和執行。 在那種情況下,每次調用函數時都會解析並執行局部變量的聲明,包含該變量聲明。 這不能稱為“快”。
然而,現代JavaScript處理引擎不再那樣做了; 它們本質上是在加載網頁時編譯代碼。 現在,局部變量的聲明被處理一次 - 與所有其他變量的聲明一起使用,例如全局變量和對象屬性。 在這種情況下,對於編寫代碼的人來說,可能沒有最快的變量聲明方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.