2016-02-08 68 views
0

性能明智什麼是更好的做法: 要創建一個原型或將metood添加到構造器。更好的性能:對象原型還是構造函數原生函數?

這是我的代碼:

function DateGreeting(selector) { 
    this.element = document.querySelectorAll(selector)[0]; 
    this.date = new Date(); 
    this.hours = this.date.getHours(); 
    this.greeting = function() { 
     if(this.hours <= 11) { 
      return "Morning"; 
     } else if (this.hours >= 12 && this.hours <= 17) { 
      return "Afternoon"; 
     } else { 
      return "Evening"; 
     } 
    } 
} 
DateGreeting.prototype.append = function() { 
    this.element.innerHTML = this.greeting(); 
} 

我也可以把this.greeting爲原型,但將這種提高性能或降低呢? (或者什麼也不做)

我應該總是把方法放在原型或構造函數中嗎?

+0

Look:http://stackoverflow.com/questions/12180790/defining-methods-vi一個原型-VS-使用,這個功能於的構造函數,真正-A-PERFO –

回答

1

當創建許多DateGreeting類型的對象時,它們都將擁有您在構造函數中定義的那些方法的副本。
使用該對象時,通常會更改其屬性,但方法保持不變。
因此,在原型上聲明方法將是一種更節省資源的方法。因此,您可以使用許多共享相同方法的對象,而無需將方法複製到每個實例。
定製原型聲明方法是性能一定要好:

// this method will be shared by all DateGreeting instances 
DateGreeting.prototype.greeting = function() { 
    if(this.hours <= 11) { 
     return "Morning"; 
    } else if (this.hours >= 12 && this.hours <= 17) { 
     return "Afternoon"; 
    } else { 
     return "Evening"; 
    } 
} 

var greeting1 = new DateGreeting(".greet"); 
var greeting2 = new DateGreeting(".greet"); 
console.log(greeting1, greeting2); 
// the output: 

output

雖然添加方法構造每個創建的每個方法的拷貝對象實例:

function DateGreeting(selector) { 
    ... 
    this.greeting = function() { 
     if(this.hours <= 11) { 
      return "Morning"; 
     } else if (this.hours >= 12 && this.hours <= 17) { 
      return "Afternoon"; 
     } else { 
      return "Evening"; 
     } 
    } 
} 

var greeting1 = new DateGreeting(".greet"); 
var greeting2 = new DateGreeting(".greet"); 
console.log(greeting1, greeting2); 
// the output: 

output2

2

工程是一個權衡的遊戲。沒有普遍的最佳解決方案。爲簡單的權衡感到高興,就像你在這裏一樣。答案是:

無論函數/原型的性能影響如何,代碼的99%主要部分是this.element.innerHTML = whatever;。與呈現HTML的成本相比,開銷很小。

性能優化代價高昂,通常會導致難以理解和維護的代碼。大多數時候,你想用最容易理解和簡單的方式去做某件事,而不是優化性能。理解績效決定所關注的地方和概況;優化每一件事情幾乎總是淨虧損。

至於最佳實踐,我擔心這些是堆棧溢出的話題,因爲它們總是非常主觀並且吸引了非常褒獎的答案,不太可能是非常有幫助的。你可以嘗試一些編程論壇,或者只是閱讀一本書或一些文章。

相關問題