[英]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.