javascript程序设计案例教程第二版许旻(JavaScript高级程序设计

http://www.itjxue.com  2023-02-03 13:00  来源:未知  点击次数: 

《JavaScript高级程序设计》第3版与第2版有何差异

第3版全新的内容就有5章,涵盖了全新的HTML5 API,比如历史状态管理、Canvas、离线应用、Web Workers,等等。在全书各章里,我也增加了ECMAScript 5带来的变化,包括严格模式的限制和如何使用新API创建对象。原有内容也都更新了最新浏览器支持信息,包括移动平台浏览器的支持情况(不过,浏览器支持情况永远跟不上变化)。另外,这一版还为ECMAScript Harmony增加了一个附录,以便读者提前了解一下未来的情形。

译者在翻译过程中比对的信息

本书第2版正文22章,另有两个附录。第3版则有25章,4个附录。作者在博客中提到的新增的5章大致应该如下。

第11章:DOM扩展

第15章:使用Canvas绘图

第16章:HTML5脚本编程

第23章:离线应用与客户端存储

第25章:新兴的API

之所以说大致是这5章,主要因为它们跟“HTML5及相关规范”都有联系。而事实上,可以算得上新增的不止这几章,以下几章内容基本上也算是全新的。

第20章:JSON(介绍浏览器对JSON序列化及字符串解析的原生API)

第21章:Ajax与Comet(介绍Ajax及长轮询和HTTP流——Comet)

附录A:ECMAScript Harmony

附录B:严格模式

除此之外,更新内容比较多的还有以下几章——主要区别是ECMAScript 5新增的严格模式下一些基本语法结构的变化及限制,还有新的语言特性(比如新增的数组操作方法、事件类型等)以及DOM3级事件模块相关的更新:

第3章:语言基础

第5章:引用类型

第13章:事件

目前,本书正在翻译中。图灵会在保证质量的前提下,尽量加快本书的出版进度,希望这个体现ECMAScript 5和HTML5规范的新版本早日与中文读者见面。

javascript频繁创建销毁对象会不会给浏览器造成负担

问题不大,

销毁不掉问题才大,

我以前做过一个项目,每一步每一个按钮都是Ajax性能什么的倒是没发现什么问题全看网速,但是,问题出在:在IE下(其他浏览器没测),每次刷新都会增加几十M内存的占用,多刷新几次内存就提示“虚拟内存不足”什么的,只能关闭浏览器了。就是js对象都没销毁掉。

楼上抄了一段书,我也把我看的发出来吧:

(好多字,没办法,对付看吧,我已经精简过了)

(一般用2种方式:标记清除,引用计数)

以下内容来自《javascript高级程序设计(第二版)》

4.3垃圾收集器:

垃圾收集机制的原理其实很简单:找出那些不再继续使用的变量,然后释放其内存。

4.3.1标记清除:

javascript中最常用的垃圾收集方式是“标记清除”(mark-and-sweep)。当变量进入环境(例如,在函数中声明一个变量)时,就将这个变量标记为“进入环境”。

……

当变量离开环境时。则将其标记为“离开环境”。

垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此之后仍然带有标记的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了。最后垃圾收集器完成“内存清理”工作,销毁那些标记的值并回收他们所占用的内存空间。

4.3.2引用计数:

另一种不太常见的垃圾收集策略叫做“引用计数”(reference counting)。引用计数的含义是跟踪记录每个值被引用的次数。当声明一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该引用次数加1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数减1.当这个值的引用次数变成0时,则说明没办法再访问这个值了,因此回收它。

Netscape Navigator 3.0 是最早使用引用计数策略的浏览器,但很快它就遇到了一个严重的问题:循环引用。

function problem(){

var objectA = new Object();

var objectB = new Object();

objectA.someOtherObject = objectB;

objectB.anotherObject = objectA;

}

两种引用的次数都是2。

为此:Netscape在 Navigator 4.0中放弃了引用计数方式,转而采用标记清除来实现垃圾回收。

IE中有一部分并不是原生javascript对象。例如,其BOM和DOM中的对象就是使用C++以COM(Component Object Model,组建对象模型)对象的形式实现的,而COM对象的垃圾收集机制采用的就是引用计数策略。因此,即使IE的javascript引擎是使用标记清除策略来实现的,但javascript访问的COM对象依然是基于引用计数策略的。

……

var element = document.getElementById('some_element');

var myObject = new Object();

myObject.element = element;

element.someObject = myObject;

……

为了避免类似这样的循环引用问题,最好是在不使用它们的时候手工断开原生javascript对象与DOM元素之间的链接。例如,

myObject.element = null;

element.someObject = null;

将变量设置为null意味着切断变量与它此前引用的值之间的链接。当垃圾收集器下次运行时就会删除这些值并回收它们占用的内存。

4.3.3性能问题:

垃圾收集器是周期运行的,而且如果为变量分配的内存数量很客观,那么回收工作量也是相当大的。

……

IE的垃圾收集器是根据内存分配量运行的,具体一点说就是256个变量、4096个对象(或数组)字面量和数组元素(slot)或者64KB的字符串。达到上述任何一个临界值,垃圾收集器就会运行。如果一个脚本中包含那么多变量,那么该脚本可能会在其生命周期中一直保有那么多变量。而这样一来,垃圾收集器就不得不频繁第运行。结果,由此引发的严重性能问题促使IE7重写了其垃圾收集器例程(临界值动态修改,一次回收中如果回收的内存小于15%,临界值就翻倍、如果回收大于85%,临界值就重置为默认值)。

4.3.4管理内存:

确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据不在有用,最好通过将其值设置为null来释放其引用——这个做法叫做“解除引用”(dereferencing)

……

不过,解除一个值的引用并不意味着自动回收该值所占用的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

《JavaScript从入门到精通第二版》pdf下载在线阅读全文,求百度网盘云资源

《JavaScript从入门到精通第二版》百度网盘pdf最新全集下载:

链接:

?pwd=zk58 提取码:zk58

简介:《JavaScript从入门到精通(第3版)/软件开发视频大讲堂》共分25章,包括初识JavaScript、JavaScript基础、流程控制、函数、JavaScript对象与数组、字符串与数值处理对象、正则表达式、程序调试与错误处理、事件处理、文档(document)对象、文档对象模型(DOM对象)、window窗口对象、级联样式表、表单和表单元素、页面打印、使用Cookie、图像处理、浏览器检测、嵌入式对象、JavaScript中的XML、JavaScript的安全、Ajax技术、iQuery技术、常用前端框架简介、JavaScript+Ajax+iQuery网页开发等。书中的大多数知识点都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,读者可轻松领会JavaScript程序开发的精髓,快速提高开发技能。 ?

(责任编辑:IT教学网)

更多

推荐PowerPoint文章