标题：Ajax企业级开发
摘录
本书首先解释了AJAX 为什么在大规模的开发中能有如此广阔的应用前景，接着系统地介绍了当前重要的AJAX 技术和组件。你将看到把数据表、Web 窗体、图表、搜索和过滤连接在一起用于构建AJAX 应用程序的框架开发的整个过程；在此基础上，本书给出了已经过证实的AJAX 架构模式，以及来源于实际的.NET 和Java AJAX 应用程序的案例研究。
本书适用于任何平台上的Web 开发和设计人员。目录第1章　AJAX和RIA1.1　变化中的Web 2
1.1.1　传统Web应用之痛 3
1.1.2　AJAX止痛药 4
1.2　企业中的AJAX 6
1.3　采用AJAX的驱动因素 7
1.3.1　可用性 7
1.3.2　网络利用率 9
1.3.3　以数据为中心 10
1.3.4　渐增的技巧、工具和技术升级 10
1.3.5　服务器中立 10
1.4　关于应用 10
1.4.1　AJAX技术 11
1.4.2　编程模式 12
1.5　AJAX的替换技术 12
1.5.1　XUL 12
1.5.2　XAML 13
1.5.3　Java Applet和Web Start 13
1.5.4　Adobe Flash、Flex和Apollo 13
1.5.5　OpenLaszlo 14
1.6　小结 14
1.7　资源 15
第2章　AJAX构建块2.1　JavaScript 16
2.1.1　JavaScript类型 17
2.1.2　闭包 18
2.1.3　面向对象的JavaScript 19
2.1.4　prototype属性 21
2.1.5　面向对象编程和继承 22
2.1.6　易变性 24
2.1.7　线程 25
2.1.8　错误处理 26
2.1.9　命名空间 26
2.2　DOM 27
2.2.1　基本原理 28
2.2.2　操作DOM 30
2.3　CSS 31
2.3.1　继承和层叠 32
2.3.2　内联样式 33
2.3.3　样式表 33
2.3.4　动态样式 35
2.4　事件 38
2.4.1　事件流 39
2.4.2　事件绑定 40
2.4.3　跨浏览器事件 42
2.4.4　事件对象 44
2.5　客户端/服务器通信 44
2.5.1　XMLHttpRequest基础知识 45
2.5.2　处理数据 51
2.6　小结 53
2.7　资源 53第3章　Web浏览器中的AJAX3.1　基于组件的AJAX 55
3.1.1　渐增的AJAX 56
3.1.2　对服务器的影响 56
3.2　HTML标准 57
3.2.1　文档类型定义 57
3.2.2　盒子模型 59
3.3　启动加载AJAX组件 60
3.3.1　onload事件 60
3.3.2　浏览器编码技巧 63
3.4　模型—视图—控制器 66
3.4.1　视图 66
3.4.2　控制器 68
3.4.3　模型 69
3.5　AJAX MVC 70
3.5.1　AJAX模型 70
3.5.2　AJAX视图 77
3.5.3　AJAX控制器 79
3.5.4　面向方面的JavaScript 86
3.6　小结 88
3.7　资源 88第4章　AJAX组件4.1　命令式组件 89
4.2　声明式组件 92
4.2.1　服务器端声明式编程 92
4.2.2　声明式Google地图 93
4.2.3　替代方法 97
4.3　自定义声明式组件 98
4.3.1　行为式组件 100
4.3.2　声明式组件 103
4.3.3　关于声明 107
4.4　构建组件 110
4.4.1　基本功能 110
4.4.2　连接到服务器 114
4.4.3　最终版本 117
4.5　小结 119
4.6　资源 119第5章　从设计到部署5.1　设计 120
5.1.1　AJAX建模 121
5.1.2　应用模型—视图—控制器模式 121
5.1.3　预先考虑性能问题 122
5.2　原型设计 123
5.2.1　线框绘制 124
5.2.2　验证设计决议 128
5.3　测试 136
5.3.1　测试驱动开发 136
5.3.2　调试 147
5.4　部署 151
5.4.1　JavaScript压缩 151
5.4.2　图片合并 155
5.4.3　保护知识产权 156
5.4.4　文档 157
5.5　小结 158
5.6　资源 159第6章　AJAX架构6.1　多层架构：从单层到多层 160
6.2　异步消息 161
6.3　轮询 162
6.4　服务器推送 162
6.5　跟踪请求 163
6.6　缓存：处理数据 164
6.7　基本缓存 165
6.8　在组件中缓存 166
6.9　在浏览器中缓存 169
6.10　在服务器中缓存 171
6.11　在数据库中缓存 173
6.11.1　MySQL 174
6.11.2　MS SQL Server 174
6.11.3　Oracle 174
6.12　更新服务器模型：并发 174
6.12.1　悲观锁定 175
6.12.2　只读锁定 175
6.12.3　乐观锁定 175
6.12.4　冲突鉴定 175
6.12.5　冲突解决 177
6.12.6　自动的冲突解决 178
6.13　流量控制 178
6.13.1　客户端 178
6.13.2　服务器 179
6.14　可伸缩性 179
6.14.1　负载平衡和群集 180
6.14.2　AJAX可伸缩性问题 181
6.15　离线AJAX 181
6.16　FireFox离线存储 183
6.17　IE userData离线存储 185
6.18　使用Flash客户端存储 186
6.19　离线AJAX和并发 188
6.20　小结 189
6.21　资源 189
6.21.1　REST和Web服务 189
6.21.2　缓存 189
6.21.3　数据库性能 190
6.21.4　离线AJAX 190第7章　Web Service和安全性7.1　Web Service 191
7.2　Web Service协议 192
7.2.1　表象状态传输 192
7.2.2　XML远程过程调用 192
7.2.3　Web Service 193
7.2.4　选择合适的工具 194
7.3　客户端的SOAP 196
7.3.1　IBM Web Service JavaScript库 196
7.3.2　Firefox 198
7.3.3　IE 199
7.4　跨域Web Service 200
7.4.1　服务器代理 200
7.4.2　URL片段标识符 202
7.4.3　Flash跨域XML 204
7.4.4　脚本注入 204
7.5　安全性 205
7.6　AJAX的安全性考虑 206
7.7　跨域漏洞 206
7.7.1　跨站脚本 207
7.7.2　跨站请求伪造 210
7.7.3　JavaScript劫持 211
7.8　SQL注入 213
7.8.1　预处理语句 214
7.8.2　存储过程 215
7.8.3　XPath注入 216
7.9　数据加密和隐私 216
7.10　防火墙 217
7.11　小结 218
7.12　资源 218第8章　AJAX可用性8.1 常见问题 219
8.1.1 后退按钮和书签 220
8.1.2 页面大小 228
8.1.3 自动提交 230
8.2 可访问性 231
8.2.1 识别用户的可访问性需求 232
8.2.2 JavaScript和Web可访问性 232
8.2.3 屏幕阅读器和可访问性 232
8.2.4 不该为屏幕阅读器提供的解决方案 233
8.2.5 兼容JAWS的AJAX交互 233
8.2.6 键盘可访问性 235
8.3 可用性测试 237
8.4 迅速而又随性的测试 237
8.4.1 征募参与者 237
8.4.2 设计并运行测试 238
8.5 软件辅助测试 238
8.5.1 用于测试可用性的工具 238
8.5.2 对软件辅助测试的一般忠告 239
8.6 小结 239
8.7 资源 239
8.7.1 后退按钮 239
8.7.2 可用性测试 240第9章　用户界面模式9.1 显示模式 241
9.2 交互模式 248
9.3 小结 256
9.4 资源 256
9.4.1 拖曳资源 256
9.4.2 进度栏资源 257
9.4.3 活动指示器资源 257
9.4.4 颜色淡出资源 257
9.4.5 即时编辑资源 257
9.4.6 向下钻取资源 257
9.4.7 即时搜索资源 257
9.4.8 即时表单资源 257第10章　风险和最佳实践10.1　风险来源 258
10.1.1　技术风险 259
10.1.2　文化/政策风险 259
10.1.3　市场风险 259
10.2　技术风险 259
10.2.1　范围 259
10.2.2　浏览器能力 260
10.2.3　可维护性 261
10.2.4　向前兼容 261
10.2.5　第三方工具支持和代码过时 262
10.3　文化和政策风险 262
10.3.1　终端用户的期待 263
10.3.2　可培训性 263
10.3.3　合法性 264
10.4　市场风险 264
10.4.1　搜索引擎的可访问性 264
10.4.2　范围 266
10.4.3　货币化 266
10.5　风险评估和最佳实践 267
10.5.1　采用特定的AJAX框架或者组件 267
10.5.2　渐进增强和不唐突的JavaScript 267
10.5.3　Google网站地图 269
10.5.4　可视化提示 270
10.5.5　避免镀金式设计 270
10.5.6　制定维护计划 271
10.5.7　采用一种收益模型 271
10.5.8　把培训作为应用的一部分 272
10.6　小结 272
10.7　资源 273
10.7.1　搜索引擎优化 273
10.7.2　统计 273
10.7.3　网站地图 273
10.7.4　屏幕截取工具 273第11章　案例研究11.1　基于Web 2.0重新武装美国国防部 274
11.1.1　背景 274
11.1.2　挑战 275
11.1.3　解决方案 275
11.1.4　采用技术 275
11.1.5　成果 276
11.2　Agrium公司将AJAX技术整合到实际运作中 276
11.2.1　背景 276
11.2.2　挑战 277
11.2.3　解决方案 277
11.2.4　采用的技术 279
11.2.5　成果 279
11.3　AJAX助力国际运输与物流公司 279
11.3.1　背景 279
11.3.2　挑战 280
11.3.3　解决方案 280
11.3.4　采用的技术 282
11.3.5　成果 282
11.4　小结 283
11.5　资源 284
附录A　OPENAJAX HUB 285
前 言
也许你和我们所遇见的许多有才华的开发者一样，对AJAX 技术以及如何使用这项技术来改善Web 应用很感兴趣，你可能已经初步上网做了一番研究，访问过Ajaxian 网站或者阅读了关于AJAX开发的入门图书。当然，你也可能属于人数更多的另一类有才华的开发者群体，想要走进AJAX世界，开始实际使用这项技术。无论是哪种情况，我们都做了考虑。令人高兴的是，开发者社区终于开始真正理解AJAX了。其实并没有那么难。
我们决定编写本书是因为我们对于现状很失望：关于AJAX 开发更为高级的主题的信息太少了。主要原因可能是讲述这方面主题的图书仍然还在“编写”中，而且，尽管AJAX 进入主流应用已有几年时间，但它才刚刚开始进入企业级软件开发的领地。我们希望本书能成为企业级开发者感兴趣的信息资源。为此，我们尝试把目前的开发方法与JavaScript 以及其他组成AJAX 的技术结合起来，并以所有企业级开发者都熟悉和易于理解的方式讲述。
为什么需要本书
本书大部分内容源自多年来我们在Nitobi 公司构建AJAX 应用和用户界面组件的第一手经验。这代表了我们在开发过程中的所知所得，对于那些希望把AJAX 引入到开发项目中的开发者来说，这应该是很有用的资源。如果你想更加精通JavaScript 开发，想解决AJAX 怪癖①和性能问题，想从头设计可用性好的Web 软件，那么本书将成为绝佳的资源。  Ajax企业级开发我们有足够的时间来讨论如何以一种Java或者C#开发者熟悉的方式来编写JavaScript 代码，并能使你快速上手。在这个过程中，我们会通过一些耳熟能详的软件设计模式来描述AJAX 开发，并包含了AJAX 开发过程中最热门的话题，例如安全性和离线存储。同时，不仅仅通过代码的优化，而且还通过利用因特网基础设施支柱（例如缓存），给出了构建高性能AJAX应用的真实解决方案。
本书采用了与其他AJAX 图书略微不同的方法，讨论范围较为全面，其中包括关于编程方面的大量建议，以及应用可用性、可访问性和国际化等问题的丰富讨论。本书还包含了一个框架，用于AJAX 开发项目中的风险评估。本书还特别介绍了在真实企业应用中使用AJAX 的一些开发者，看看从他们的经验中能够学到些什么。 
本书读者
本书主要面向中高级服务器端（Java、面向对象PHP ）开发者。书中的很多概念来自Erich Gamma 、Richard Helm、Ralph Johnson 和John Vlissides 所著《设计模式——可复用面向对象软件基础》一书提出的那些经过时间考验的软件工程模式。因为整本书都应用了这些思想，所以读者如果对软件设计模式有一个基本的理解，或者至少对学习这方面更多的知识有兴趣，会很有帮助。我们希望以一种常见的方式，即使用模式来描述AJAX，从而帮助更多有经验的开发者更容易地理解其中的概念和思想。
也许比理解模式更重要的是，你至少应该掌握JavaScript 、HTML 和CSS 的基础知识，甚至是理解XML 、XSLT或者JSON，这些知识也很有用，但不是必需的。除此之外，我们希望你拥有以面向对象的语言，如Java、C#或PHP等进行服务器端编程的经验。
阅读完本书之后，开发者应该熟悉组成AJAX 的系列技术，以及面向对象JavaScript 的开发。同时，你将很好地了解有助于开发应用的工具，以及诸如安全、可用性和可访问性等各种AJAX 问题。
本书内容
第1章涵盖了AJAX 应用的基本要素并阐明了这些要素是如何组合在一起的。同时讨论了Web 应用的演进，以及AJAX成为基于Web 应用首选解决方案的主要原因。 
第2章研究组成AJAX 的各种技术本章包含了关于使用正确的方法来编写JavaScript 的重要信息，特别关注面向对象 JavaScript 的开发、DOM、CSS 、事件和XMLHttprequest 对象，同时还包括了从客户端到服务器端数据传输相关的问题。
第3章是基于第2章内容的扩展为理解主流浏览器的差异奠定了基础。具备了这些知识后，我们介绍了如何使用MVC （模型—视图—控制器，Model-View-Controller ）模式来构建AJAX 应用。特别是，你将明白如何在JavaScript 中编写客户端模型，如何从数据生成 HTML 视图，如何使用依赖发布—订阅（publish-subscribe ）事件系统的基于JavaScipt的控制器来连接视图和模型。
﻿﻿
第4章准备介绍如何构建AJAX 用户界面组件﻿﻿特别地，我们分析了命令式和声明式方法的不同点，给出了一个构建基于AJAX的数据网格组件完整示例，同时还介绍了声明式方法的一些限制。然后，本书给出了AJAX 开发一些总体的目标和问题。
第5章从应用设计到测试，再到部署具体分析贯穿软件开发生命周期中AJAX特有的问题。阅读完本章之后，你将很好地把握各种AJAX性能问题以及对任意的AJAX开发项目自始至终都有用的许多工具。Ajax企业级开发(4张)
﻿第6章为AJAX开发过程中各种架构问题﻿　　其中包括异步消息通信模式的研究，以及与服务器通信的方法的研究，例如服务器推送（push）、缓存、负载和离线AJAX 。虽然其中很多问题在任何基于Web 的应用上都很常见，但这里我们将从一个独特的AJAX视角来讨论这些问题。
﻿第7章AJAX使用Web 服务来面向服务的架构﻿以及在构建AJAX Web 应用时可能出现的各种安全问题。第8章讨论了可用性方面的一些问题尤其是如何为普通的用户把这些讨论应用到AJAX应用的构建中。本章介绍了人们所关注的常见问题的完整解决方案，例如后退按钮问题、处理可访问性以及国际化的方法。
﻿第9章探索一些强大的AJAX 用户界面模式﻿包括即时编辑（in-place editing）、主从复合结构（master-detail ）、实时表单以及拖拽等。构建大多数的AJAX 应用时，有许多核心的用户界面设计模式是每个开发者都应该了解的。第10章企业级AJAX 应用时的风险来源这个主题也许是AJAX书籍中探索最少的主题，但是当考虑构建新的应用时，它与技术本身同样重要。
第11章作为总结，分析了在要求最为严格的企业环境中的一些实际AJAX 实现。我们与这些应用的开发者对话，并且倾听他们做对的和做错的事，以及下一次开发过程中将采取何种不同的实现方式。
总之，我们希望在AJAX 开发方面给你一个新的认识，最重要的是，你可以把一些新的技巧引入到你的项目开发中。