簡體   English   中英

面向對象的Javascript /變量聲明/性能

[英]Object Orientated Javascript / Variable declarations / Performance

因此,我有一個相當大的面向對象的javascript類,它具有大約120個函數(很多getter和setters)。 其中一些函數的變量基本上是常量。

我想知道的是,是否應該在對象的全局范圍內聲明這些變量,因此每次運行該函數時都不必重新聲明該變量?

下面是一個示例函數。 this.displayContacts運行了幾次(並將始終在對象內運行),因此在這種情況下,在函數內部聲明“ codes”對象沒有意義嗎?

function orderObject() {

  this.displayContacts = function() {
    var codes  = {'02':'02','03':'03','07':'07','08':'08'};
       // do something with codes
  };

}

那么,在性能方面會更好嗎?

function orderObject() {
var codes  = {'02':'02','03':'03','07':'07','08':'08'};
  this.displayContacts = function() {
    // do something with codes.
  };

}

我的另一個擔心是,如果我最終在主orderObject中包含許多全局變量/對象,那么與每次簡單地重新聲明變量相比,這是否會對性能產生更大的影響?

絕對。

function MyClass() {
   this.somevar = ''; // instance scoped variable
};

MyClass.CODES = {'02':'02'...}; // 'Class' scoped variable; one instance for all objects

MyClass.prototype.instanceMethod = function(){
  // 'this' refers to the object *instance*
  // it can still use MyClass.CODES, but can also account for variables local to the class
}

用Java語言可以說, CONSTANT是“靜態的”。 如果您的codes對於該類(以及您的應用程序的其余部分)是全局的,則可以通過這種方式節省大量開銷-僅定義一次對象。 注意,對於函數不需要對特定於該類實例的變量進行操作的情況,您也可以使用“靜態”類級方法。

除非您的應用程序真的很強大,否則性能優化可能不會使其速度明顯提高。 但這並不意味着OO設計不值得-如果您打算以面向對象的方式使用javascript,那么使用良好的OO原理並不是一件困難的事,也不是一個壞主意。

我要說的是,如果您要在多個地方使用某些東西,那么它應該成為對象的屬性,這樣就不必每次都重新聲明它。 如果必須更改該常數,這還將有助於使對象的維護更加容易。 然后,您只需要在一個地方進行更改,而不必尋找使用它的所有位置。

不要重復自己。

JavaScript中的垃圾收集取決於瀏覽器,大多數現代瀏覽器都很好地處理了它。 如果繼續進行這些工作,並使其具有全局性,您可能會看到性能略有提高,這僅僅是因為它沒有每次都執行該行代碼。 但是,我無法想象通過在類上創建這些靜態屬性來顯着提高性能,但是如果它們沒有改變,那將更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM