考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
  当前位置:设计制作 > JavaScript > 文章内容
  

网站令浏览器崩溃的原因

 [ 2017年8月8日 ] 【

面试某公司的时候,面试官问到,导致浏览器崩溃的原因有哪些?愚辈不才, 仅回答出了内存泄漏。其实在网页在装载的过程中,常常由于种种原因使浏览器 的反映变的很慢,或造成浏览器失去响应,甚至会导致机器无法进行其他的操作 。

对于访客,如果登录您网站,浏览器就立刻崩溃,我想这对谁都是无法容忍的 ,对此总结了网站导致浏览器崩溃的原因:

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对象间的循环引用时,就会出现内存泄漏的问 题。

本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2007-2013 中华考试网(Examw.com) All Rights Reserved