第一部分 单页应用简介 3
第1章 第一个单页应用 3
1.1定义、一些历史和一些关注点 4
1.1.1一些历史 4
1.1.2是什么导致JavaScript单页应用姗姗来迟 5
1.1.3我们的关注点 8
1.2构建第一个单页应用 9
1.2.1定义目标 9
1.2.2创建文件结构 10
1.2.3使用Chrome开发者工具 10
1.2.4开发HTML和CSS 11
1.2.5添加JavaScript 12
1.2.6使用Chrome开发者工具查看应用 17
1.3精心编写的单页应用的用户效益 19
1.4小结 20
第2章 温故JavaScript 22
2.1变量作用域 24
2.2变量提升 27
2.3高级变量提升和执行环境对象 28
2.3.1提升 28
2.3.2执行环境和执行环境对象 30
2.4作用域链 33
2.5JavaScript对象和原型链 35
2.6函数——更深入的窥探 43
2.6.1函数和匿名函数 43
2.6.2自执行匿名函数 44
2.6.3模块模式——将私有变量引入JavaScript 46
2.6.4闭包 51
2.7小结 54
第二部分 单页应用客户端 57
第3章 开发Shell 57
3.1深刻理解Shell 57
3.2创建文件和名字空间 59
3.2.1创建文件结构 59
3.2.2编写应用的HTML文件 60
3.2.3创建CSS根名字空间 61
3.2.4创建JavaScript根名字空间 62
3.3创建功能容器 64
3.3.1选取策略 64
3.3.2编写Shell的HTML 64
3.3.3编写Shell的CSS 65
3.4渲染功能容器 68
3.4.1将HTML转换为JavaScript 68
3.4.2在JavaScript中添加HTML模板 69
3.4.3编写Shell的样式表 71
3.4.4指示应用使用Shell 73
3.5管理功能容器 74
3.5.1编写展开或收起聊天滑块的方法 74
3.5.2给聊天滑块添加点击事件处理程序 76
3.6管理应用状态 80
3.6.1理解浏览器用户所期望的行为 80
3.6.2选取一个策略来管理历史控件 81
3.6.3当发生历史事件时,更改锚 82
3.6.4使用锚来驱动应用状态 83
3.7小结 89
第4章 添加功能模块 90
4.1功能模块策略 91
4.1.1与第三方模块的比较 91
4.1.2功能模块和分形MVC模式 93
4.2创建功能模块文件 96
4.2.1规划文件结构 96
4.2.2填写文件 97
4.2.3我们创建了什么 103
4.3设计方法API 103
4.3.1锚接口模式 104
4.3.2 Chat的配置API 105
4.3.3 Chat的初始化API 106
4.3.4 Chat的setSliderPosition API 107
4.3.5配置和初始化的级联 107
4.4实现功能API 109
4.4.1样式表 110
4.4.2修改Chat 114
4.4.3清理Shell 120
4.4.4详细解释执行的过程 125
4.5 添加经常使用的方法 127
4.5.1 removeSlider方法 127
4.5.2 handleResize方法 129
4.6小结 133
第5章 构建Model 134
5.1理解Model 135
5.1.1我们将要构建什么 135
5.1.2 Model做什么 137
5.1.3 Model不做什么 137
5.2创建Model和其他文件 138
5.2.1规划文件结构 138
5.2.2填充文件 139
5.2.3使用统一的触摸-鼠标库 145
5.3设计people对象 145
5.3.1设计person对象 146
5.3.2 设计people对API 147
5.3.3给people对象的API编写文档 150
5.4构建people对象 151
5.4.1创建伪造的人员列表 152
5.4.2开始构建people对象 154
5.4.3完成people对象的构建 157
5.4.4测试people对象的API 164
5.5在Shell中开启登入和登出的功能 166
5.5.1设计用户登入的体验 167
5.5.2更新Shell的JavaScript 167
5.5.3更新Shell的样式表 169
5.5.4使用UI测试登入和登出 170
5.6小结 171
第6章 完成Model和Data模块 172
6.1设计chat对象 172
6.1.1设计方法和事件 173
6.1.2给chat对象的API添加文档 175
6.2构建chat对象 177
6.2.1先创建chat对象的join方法 177
6.2.2更新Fake以响应chat.join 179
6.2.3测试chat.join方法 181
6.2.4给chat对象添加消息传输功能 182
6.2.5更新Fake,模拟消息传输功能 187
6.2.6测试chat的消息传输功能 189
6.3给Model添加Avatar功能 190
6.3.1给chat对象添加Avatar功能 190
6.3.2修改Fake来模拟头像功能 191
6.3.3测试头像功能 192
6.3.4测试驱动开发 193
6.4完成Chat功能模块 195
6.4.1更新Chat的JavaScript 196
6.4.2更新样式表 203
6.4.3测试Chat UI 207
6.5创建Avatar功能模块 208
6.5.1创建Avatar的JavaScript 209
6.5.2创建Avatar的样式表 213
6.5.3更新Shell和浏览文档 214
6.5.4测试Avatar功能模块 215
6.6数据绑定和jQuery 216
6.7创建Data模块 217
6.8小结 220
第三部分 单页应用服务器 223
第7章 Web服务器 223
7.1服务器的作用 223
7.1.1认证和授权 224
7.1.2验证 224
7.1.3数据的保存和同步 225
7.2Node.js 225
7.2.1为什么选择Node.js 225
7.2.2使用Node.js创建‘Hello World’应用 226
7.2.3安装并使用Connect 229
7.2.4添加Connect中间件 230
7.2.5安装并使用Express 231
7.2.6添加Express中间件 234
7.2.7 Express的使用环境 235
7.2.8 Express的静态文件服务 236
7.3高级路由 237
7.3.1用户对象的CRUD路由 237
7.3.2通用CRUD路由 243
7.3.3把路由放到单独的Node.js模块里面 246
7.4添加认证和授权 249
7.5 Web socket和Socke.IO 251
7.5.1简单的Socket.IO应用程序 251
7.5.2 Socket.IO和消息服务器 254
7.5.3使用Socket.IO更新JavaScript 255
7.6小结 258
第8章 服务器数据库 259
8.1数据库的作用 259
8.1.1选择数据存储 260
8.1.2消除数据转换 260
8.1.3把逻辑放在需要的地方 261
8.2MongoDB简介 262
8.2.1面向文档的存储 262
8.2.2动态文档结构 262
8.2.3开始使用MongoDB 263
8.3使用MongoDB驱动程序 264
8.3.1准备项目文件 265
8.3.2安装并连接MongoDB 265
8.3.3使用MongoDB的CRUD方法 267
8.3.4向服务器应用添加CRUD操作 270
8.4验证客户端数据 274
8.4.1验证对象类型 274
8.4.2验证对象 276
8.5创建单独的CRUD模块 283
8.5.1组织文件结构 284
8.5.2把CRUD移到它自己的模块里面 287
8.6构建chat模块 292
8.6.1开始创建chat模块 293
8.6.2创建adduser消息处理程序 295
8.6.3创建updatechat消息处理程序 299
8.6.4创建disconnect消息处理程序 301
8.6.5创建updateavatar消息处理程序 302
8.7小结 305
第9章 单页应用发布准备 306
9.1单页应用针对搜索引擎的优化 307
9.2云和第三方服务 310
9.2.1站点分析 310
9.2.2记录客户端错误 312
9.2.3内容分发网络 314
9.3缓存和缓存破坏 314
9.3.1缓存时机 315
9.3.2 Web存储 316
9.3.3 HTTP缓存 317
9.3.4服务器缓存 320
9.3.5数据库查询缓存 325
9.4小结 326
附录A JavaScript编码 328
附录B测试单页应用 361