※ 引述《flu (Twinkle stars)》之銘言:
: 針對Javascrit
: 我在某文件看見一段敘述,大意是說,如果有像以下這樣一段程式碼
: function Person(first, last) {
: this.first = first;
: this.last = last;
: this.fullName = function() {
: return this.first + ' ' + this.last;
: }
: this.fullNameReversed = function() {
: return this.last + ', ' + this.first;
: }
: }
: var s = new Person("Simon", "Willison");
: 這樣子每次在new Person的時候記憶體也會新產生一份Person的inner function
: 的程式碼佔住多餘的空間(可以用改寫prototype function的方式解決)
: 關於產生多於程式碼的敘述,真的是所說的那樣嗎?
: 另外,如果上述沒錯的話,這似乎跟c++裡的new object產生後的結果不一樣是嗎?
我並不是很確定啦。不過我有寫過多邊形跟點的constructor,用點來構成多邊形
結果用多邊形的constructor來產生多邊形時,有發現程式佔用的記憶體逐漸增加
而且幅度不小。
測試的時候發生意外,就是我用迴圈產生多邊形物件時,不小心輸入錯誤的數字
結果讓firefox企圖在程式中產生大概1024*1024個多邊形
因為讓程式跑以後就離開座位,我回到座位時發現電腦跑很慢
打開工作管理員看一看,發現firefox佔用了500多MB的記憶體,而且還在不斷增加
如果只是用一個單純的reference,記憶體增加的幅度應該不會那麼大吧?
他實際怎麼處理function物件的,可能看firefox的javascript引擎的程式會比較清楚
就是了,要不然就是要找一下ECMA-262,但是也不確定firefox或是IE有完全依照
spec來實做。
--
Sapere Aude! 這就是啟蒙運動的口號!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.192.103