华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場 | 考試論壇  
  當(dāng)前位置:設(shè)計(jì)制作 > JavaScript > 文章內(nèi)容
  

網(wǎng)站令瀏覽器崩潰的原因

 [ 2017年8月8日 ] 【

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

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

1. 內(nèi)存泄漏

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

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

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

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

在引用計(jì)數(shù)系統(tǒng),每個(gè)所引用的對象都會保留一個(gè)計(jì)數(shù),以獲悉有多少對象正 在引用它。如果計(jì)數(shù)為零,該對象就會被銷毀,其占用的內(nèi)存也會返回給堆。 當(dāng) 對象相互引用時(shí),就構(gòu)成循環(huán)引用,瀏覽器(IE6,F(xiàn)irefox2.0)對于純粹的 JavaScript對象間的循環(huán)引用是可以正確處理的,但由于在引用計(jì)數(shù)系統(tǒng),相互 引用的對象都不能被銷毀,因?yàn)槭且糜?jì)數(shù)永遠(yuǎn)不能為零,因此瀏覽器無法處理 JavaScript與Native對象(例如Dom、 ActiveX Object)之間循環(huán)引用。所以,當(dāng) 我們出現(xiàn)Native對象與JavaScript對象間的循環(huán)引用時(shí),就會出現(xiàn)內(nèi)存泄漏的問 題。

本文糾錯】【告訴好友】【打印此文】【返回頂部
將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved
上林县| 汉中市| 玉林市| 土默特左旗| 札达县| 金塔县| 陕西省| 尼木县| 江北区| 修文县| 安乡县| 肇东市| 平顺县| 微博| 永嘉县| 修文县| 新平| 会昌县| 宜宾县| 苏尼特左旗| 北川| 阳泉市| 惠来县| 贵州省| 麻江县| 纳雍县| 三门峡市| 自贡市| 罗甸县| 重庆市| 祁阳县| 衡阳市| 临沂市| 杭锦旗| 德昌县| 嘉祥县| 得荣县| 罗城| 鹿泉市| 南京市| 安阳县|