2014-09-27 57 views
-4

我有一個問題。Object getter/setter vs new constructor - 測試結果

我希望您關閉這個狗屎 - 很多人都JavaScript的神 - 但他們寫的Ecmascript3 -
哈哈哈哈 - 如果你不明白的Object.create()做的,然後閉上你的嘴@ LJ_1102! !

我在jsperf.com上做了一個測試,大概有兩種不同的方法來操作一個對象。

請不要跟我討論關於「object.create(p,pr)」和新的Instance()。

Object.create()是簡單代碼的未來和非常簡單。

--->現在的問題不是:我需要的功能和一套原型和構造函數或需要我的Object.create(原型,新的屬性)< ---這是信仰問題

我的問題:爲什麼Chrome和Firefox的結果有很大的不同?

我知道 - 兩個不同的Javascript引擎。然而爲什麼如此不同?

--->link for testsite<---

測試:

 
    var obj = { 
    name: "", 
    get getName(){return this.name;}, 
    set setName(x){this.name = x;} 
    }; 

    function func(x){ 
    var that = this; 
    this.name = ""; 
    this.getName = function(){return that.name;}; 
    this.setName = function(x){that.name = x;}; 
    } 

    // Chrome: 1,536,214 ops/sec 
    // Firefox: 302,952 ops/sec 

      var newObj = Object.create(obj); 
      obj.setName = "svenskanda"; 
      obj.getName; 


    // Chrome: 315,572 ops/sec 
    // Firefox: 1,360,496 ops/sec 

      var newObj = new func(); 
      newObj.setName("Alex"); 
      newObj.getName(); 

在Chrome中,所述的Object.create() - 的getter/setter更快。

而在Firefox中,新的構造函數方法更快。

你能解釋一下嗎?

+0

你的第一個測試是無效的。 – 2014-09-28 00:12:32

+0

請注意,第一個例子中的'obj'將等同於使用'func.prototype'作爲第二個例子。在構造函數中嵌入方法定義將爲每個'new func'爲'getName'和'setName'創建新的'Function'對象。 – 2014-09-28 00:16:16

+0

是的 - 沒關係 - 我會知道什麼時候會有更好的方式 - 爲什麼同樣的任務會如此不同? – svenskanda 2014-09-28 00:28:50

回答

1

如果你想知道爲什麼有這樣的速度差異請查看源代碼,恐怕你不會找到一個鉻/火狐開發者,也知道另一個項目的完全相同的內部代碼,並且即使你會用這個答案做什麼?!

它們是兩個完全不同的JavaScript引擎。

另外你在'基準'中做了兩件完全不同的事情。 Object.create第一個參數是對象的原型創造,因此,您創建使用Object.create份額相同財產的情況下,所有的對象。在您的「構造函數」基準測試中,您正在構建對象的每個構造的成員方法。

首先學會正確使用原型和相關方法,然後編寫一些實際上遇到基於語言性能的性能問題的代碼,然後分析代碼並找出瓶頸。

+0

我的問題不是原型,因爲不同的時間 - 無論我設置什麼任務都沒有關係 - 重點是:在兩個大不同時間完成同樣的任務 - 您瞭解我 - 而且 - 測試的目的是不同的 - – svenskanda 2014-09-28 00:28:30

+0

再次閱讀我的答案。你沒有比較「*相同的任務*」...... – 2014-09-28 00:30:13

+0

它們是兩個完全不同的JavaScript引擎 - 這是一個附錄 - 由你編輯 - 你瞭解我 - 瀏覽器爲什麼這麼做?如果Chrome瀏覽器中的對象比Firefox更快,則會讓用戶感到困惑。而Firefox中的函數對象比Chrome更快。 – svenskanda 2014-09-28 00:47:56

相關問題