★首先,需要了解一下一般是什麼樣的原因導致了memory-leak,這樣才能有意識地避免寫出嚴重memory-leak的js**和快速查詢到問題的根源,強烈建議通篇閱讀一下下面的這篇文章:
understanding and solving internet explorer leak patterns
★根據經驗總結出如下幾個需要注意的地方:
[ 編輯]
new 大物件的時候記得監聽window的unload(或者beforeunload),來銷毀當前的例項
com.trs.test.bigman.prototype=.bind(
this
),false
);
},........
function $destroy(_obj)
catch
(err) }
} 這樣,當頁面進行重新整理或者切換時,可以保證將com.trs.test.bigman的當前示例進行有效地銷毀。當然,當當前例項是乙個singleton時,可以直接註冊unload/beforeunload事件銷毀該singleton,例如需要**crashboard的容器(即trsdialogcontainer,乙個singleton物件)的記憶體,像這樣子:
event.observe(window, 'unload', $destroyallboards);
function $destroyallboards()}
[編輯]
請參照understanding and solving internet explorer leak patterns中關於「cross-page leaks」的描述。
[ 編輯]
不建議用類似xx.onclick等方式來繫結事件,用prototype提供的event.observe
abutton.onclick = afunc;
event.observe(abutton, 'click', afunc);
消除由於ie事件註冊機制導致其記憶體洩漏(ie記憶體**時的引用計數方式導致了該記憶體洩漏),是prototype的event.observe之所以存在的另外乙個重要原因。
[ 編輯]
更新乙個元素的innerhtml時先刪除掉其所有子節點,或者採用element.update來更新
下面是乙個更新乙個innerhtml的實際的例子
var shtmlcontent = '.........'
shtmlcontent += '......';
shtmlcontent += '......';
........
// ohtmlele 是乙個已經在document dom 中存活的 html-element
for(;ohtmlele.childnodes.length>0;)
ohtmlele.innerhtml = shtmlcontent;
我們的element.update提供了類似的功能:
object.extend(element,
);html.textscripts(
).each(
function
(value,index)
);}, 1
);},
....... [
編輯]var shtmlcontent = '.........'
shtmlcontent += '......';
shtmlcontent += '......';
........
// ohtmlele 是乙個已經在document dom 中存活的 html-element
new insertion.after(ohtmlele, shtmlcontent);
.... [
編輯]應當避免試圖在html element 上附加方法
除非你有辦法徹底銷毀它, 對這一點建議用屬性替代方法,所以在把html element當成引數傳遞時,要注意這個引數不是普通的object,所有擴充套件此引數的操作需要謹慎,否則一旦出現memory leak,問題會非常隱蔽!
com.trs.test.bigman.prototype=,
...extendfuncs : function
(_field)
,...});
},extendprops : function
(_field)
,... [
編輯]當把html elment控制項當成引數傳遞到某個子方法(應該指非function ***(){}這樣定義的方法)中時,注意!需要將該引數的引用顯式的delete掉
下面是乙個實際使用的例子:
com.trs.test.bigman.prototype=,
... [
編輯]prototype的ajax方法未提供對transport的消毀,建議過載,或者使用ajax框架中做的過載.
部分過載方法如下:
object.extend(ajax.request.prototype,
catch
(err) }
} });
[ 編輯]
Selenium 谷歌無頭瀏覽器和預防檢測
from selenium import webdriver bro webdriver.chrome chromedriver.exe bro.get page text bro.page source print page text 無頭瀏覽器的使用 from selenium import w...
瀏覽器如何工作
吃飽沒事,隨便翻譯一篇文章。現在的瀏覽器可以做很多事,如chrome可以執行多種應用外掛程式。但我覺得你可能對如何載入展示網頁感興趣。網路是c s架構的。瀏覽器僅僅是其中的一半 客戶端 另一半是等待客戶端發請求的伺服器。首先,瀏覽器要找到web伺服器的位址。它問作業系統伺服器的名字 作業系統便查詢本...
瀏覽器和瀏覽器驅動對應版本
selenium是thoughtworks公司開發的一款開源的測試工具,主要用來做web端的自動化測試。python安裝selenium,直接使用執行pip install selenium python 命令安裝即可,預設安裝的是最新的,也就是selenium的3.x版本,以前selenium2....