色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

【總結】網站令瀏覽器崩潰的原因

  面試某公司的時候,面試官問到,導致瀏覽器崩潰的原因有哪些?愚輩不才,僅回答出了內存泄漏。其實在網頁在裝載的過程中,常常由于種種原因使瀏覽器的反映變的很慢,或造成瀏覽器失去響應,甚至會導致機器無法進行其他的操作。

  對于訪客,如果登錄您網站,瀏覽器就立刻崩潰,我想這對誰都是無法容忍的,對此總結了網站導致瀏覽器崩潰的原因:

  1. 內存泄漏

  還是先談下內存泄漏,網站由于內存泄漏的而照成崩潰有兩種情況,服務器的崩潰和瀏覽器的崩潰。內存泄漏所造成的問題是顯而易見的,它使得已分配的內存的引用就會丟失,只要系統還在運行中,則進程就會一直使用該內存。這樣的結果是,曾占用更多的內存的程序會降低系統性能,直到機器完全停止工作,才會完全清空內存。

  Apache的Web服務器是用C/C++編寫的,C/C++的內存泄漏問題不必多說,系統中存在無法回收的內存,有時候會造成內存不足或系統崩潰。在Java中,內存泄漏就是存在一些被分配的可達而無用的對象,這些對象不會被GC所回收,然而它卻占用內存。

  而在客戶端,JavaScript所造成的內存泄漏,也將可能使得瀏覽器崩潰。關于JavaScript的內存泄漏的文章,較權威的有《Memory leak patterns in JavaScript》和《Understanding and Solving InterNET Explorer Leak Patterns》。

  JavaScript 是一種垃圾收集式(garbage collector,GC)語言,這就是說,內存是根據對象的創建分配給該對象的,并會在沒有對該對象的引用時由瀏覽器收回。再根據《Fabulous Adventures In Coding》一文的說法:“JScript uses a nongenerational mark-and-sweep garbage collector.”,對” nongenerational mark-and-sweep”的可以這樣理解,瀏覽器處理JavaScript并非采用純粹的垃圾收集,還使用引用計數來為Native對象(例如Dom、ActiveX Object)處理內存。

  在引用計數系統,每個所引用的對象都會保留一個計數,以獲悉有多少對象正在引用它。如果計數為零,該對象就會被銷毀,其占用的內存也會返回給堆。 當對象相互引用時,就構成循環引用,瀏覽器(IE6,Firefox2.0)對于純粹的JavaScript對象間的循環引用是可以正確處理的,但由于在引用計數系統,相互引用的對象都不能被銷毀,因為是引用計數永遠不能為零,因此瀏覽器無法處理JavaScript與Native對象(例如Dom、ActiveX Object)之間循環引用。所以,當我們出現Native對象與JavaScript對象間的循環引用時,就會出現內存泄漏的問題。

  簡單來說就是,瀏覽器使用引用計數來為Native對象處理內存,而引用計數的對象無法被銷毀,涉及Native對象的循環引用將會出現內存泄漏。配合下面的例子,理解這句話,基本上就可以理解JavaScript造成的內存泄漏了。

var obj;
window.onload
= function(){
// JavaScript對象obj到DOM對象的引用,根據id獲得
obj=document.getElementById("DivElement");
  // DOM 對象則有到此 JavaScript 對象的引用,由expandoProperty實現
  document.getElementById("DivElement").expandoProperty=obj;
};

it知識庫【總結】網站令瀏覽器崩潰的原因,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 门头沟区| 彩票| 娄烦县| 永兴县| 新民市| 新泰市| 乡城县| 满城县| 将乐县| 库伦旗| 武功县| 信阳市| 上栗县| 佛坪县| 闽侯县| 龙陵县| 逊克县| 彭州市| 建湖县| 蕲春县| 岚皋县| 镇沅| 江阴市| 营山县| 尖扎县| 宜宾县| 敦煌市| 锡林郭勒盟| 盐津县| 安仁县| 宜丰县| 海阳市| 辰溪县| 大连市| 奉贤区| 黔西县| 东港市| 县级市| 潼南县| 肃北| 繁峙县|