编辑推荐
如果你的网站还是一系列跳转页面,那就落伍了。单页Web应用(single page web application,SPA)是你接下来的选择:将用户界面渲染和业务逻辑放在浏览器端,只在同步数据的时候才和服务器通信,它们可以提供流畅的用户体验,就像本地应用程序一样。不过,单页Web应用的开发、管理和测试有很大的挑战。
本书展示了从前端到后端都使用JavaScript来开发复杂的单页Web应用,你的团队能够很容易地进行设计、测试、维护和扩展,不会受到某个框架的限制。期间你将会使用HTML5、CSS3和JavaScript的高级开发技能,Web服务器和数据库的语言也是JavaScript。
本书读者需要具备基本的Web开发知识,但不要求具备单页Web应用的相关开发经验。
要下载本书的代码可以登录manning.com/SinglePageWebApplications。
内容简介
《单页Web应用:JavaScript从前端到后端》是设计和构建大规模JavaScript单页Web应用(SPA)的宝贵指南,这些应用从前端到后端都使用JavaScript:浏览器端应用、Web服务器和数据库。
《单页Web应用:JavaScript从前端到后端》大约三分之二的内容专门讲解单页Web应用的客户端开发,先定义何为JavaScript单页应用,接着介绍书中使用的单页Web应用的架构,然后依次讲解Shell模块、功能模块、Model模块、Data模块和Fake模块等,其中还专门拿出一整章讲解开发单页Web应用时需要掌握的JavaScript概念和特性;剩下三分之一的内容讲解单页Web应用的服务器端开发和其他与单页Web应用相关的知识,如Node.js、MongoDB、CDN、搜索引擎优化、数据分析、错误日志以及各个层级的缓存等。本书最后的两个附录分别介绍JavaScript的编码规范和单页Web应用的测试。
《单页Web应用:JavaScript从前端到后端》适合Web开发人员、架构师和产品经理阅读,需要读者至少要有些JavaScript、HTML和CSS的开发经验。
作者简介
本书作者是架构师和工程管理者。Michael Mikowski已经开发过许多商业级单页Web应用,其中有个平台每年要处理的请求超过1000亿次。Josh Powell搭建过一些流量非常大的网站。
目录
- 第一部分 单页应用简介
- 第1章 第一个单页应用
- 1.1 定义、一些历史和一些关注点
- 1.1.1 一些历史
- 1.1.2 是什么导致JavaScript单页应用姗姗来迟
- 1.1.3 我们的关注点
- 1.2 构建第一个单页应用
- 1.2.1 定义目标
- 1.2.2 创建文件结构
- 1.2.3 使用Chrome开发者工具
- 1.2.4 开发HTML和CSS
- 1.2.5 添加JavaScript
- 1.2.6 使用Chrome开发者工具查看应用
- 1.3 精心编写的单页应用的用户效益
- 1.4 小结
- 第2章 温故JavaScript
- 2.1 变量作用域
- 2.2 变量提升
- 2.3 高级变量提升和执行环境对象
- 2.3.1 提升
- 2.3.2 执行环境和执行环境对象
- 2.4 作用域链
- 2.5 JavaScript对象和原型链
- 2.6 函数——更深入的窥探
- 2.6.1 函数和匿名函数
- 2.6.2 自执行匿名函数
- 2.6.3 模块模式——将私有变量引入JavaScript
- 2.6.4 闭包
- 2.7 小结
- 第二部分 单页应用客户端
- 第3章 开发Shell
- 3.1 深刻理解Shell
- 3.2 创建文件和名字空间
- 3.2.1 创建文件结构
- 3.2.2 编写应用的HTML文件
- 3.2.3 创建CSS根名字空间
- 3.2.4 创建JavaScript根名字空间
- 3.3 创建功能容器
- 3.3.1 选取策略
- 3.3.2 编写Shell的HTML
- 3.3.3 编写Shell的CSS
- 3.4 渲染功能容器
- 3.4.1 将HTML转换为JavaScript
- 3.4.2 在JavaScript中添加HTML模板
- 3.4.3 编写Shell的样式表
- 3.4.4 指示应用使用Shell
- 3.5 管理功能容器
- 3.5.1 编写展开或收起聊天滑块的方法
- 3.5.2 给聊天滑块添加点击事件处理程序
- 3.6 管理应用状态
- 3.6.1 理解浏览器用户所期望的行为
- 3.6.2 选取一个策略来管理历史控件
- 3.6.3 当发生历史事件时,更改锚
- 3.6.4 使用锚来驱动应用状态
- 3.7 小结
- 第4章 添加功能模块
- 4.1 功能模块策略
- 4.1.1 与第三方模块的比较
- 4.1.2 功能模块和分形MVC模式
- 4.2 创建功能模块文件
- 4.2.1 规划文件结构
- 4.2.2 填写文件
- 4.2.3 我们创建了什么
- 4.3 设计方法API
- 4.3.1 锚接口模式
- 4.3.2 Chat的配置API
- 4.3.3 Chat的初始化API
- 4.3.4 Chat的setSliderPosition API
- 4.3.5 配置和初始化的级联
- 4.4 实现功能API
- 4.4.1 样式表
- 4.4.2 修改Chat
- 4.4.3 清理Shell
- 4.4.4 详细解释执行的过程
- 4.5 添加经常使用的方法
- 4.5.1 removeSlider方法
- 4.5.2 handleResize方法
- 4.6 小结
- 第5章 构建Model
- 5.1 理解Model
- 5.1.1 我们将要构建什么
- 5.1.2 Model做什么
- 5.1.3 Model不做什么
- 5.2 创建Model和其他文件
- 5.2.1 规划文件结构
- 5.2.2 填充文件
- 5.2.3 使用统一的触摸——鼠标库
- 5.3 设计people对象
- 5.3.1 设计person对象
- 5.3.2 设计people对象的API
- 5.3.3 给people对象的API编写文档
- 5.4 构建people对象
- 5.4.1 创建伪造的人员列表
- 5.4.2 开始构建people对象
- 5.4.3 完成people对象的构建
- 5.4.4 测试people对象的API
- 5.5 在Shell中开启登入和登出的功能
- 5.5.1 设计用户登入的体验
- 5.5.2 更新Shell的JavaScript
- 5.5.3 更新Shell的样式表
- 5.5.4 使用UI测试登入和登出
- 5.6 小结
- 第6章 完成Model和Data模块
- 6.1 设计chat对象
- 6.1.1 设计方法和事件
- 6.1.2 给chat对象的API添加文档
- 6.2 构建chat对象
- 6.2.1 先创建chat对象的join方法
- 6.2.2 更新Fake以响应chat.join
- 6.2.3 测试chat.join方法
- 6.2.4 给chat对象添加消息传输功能
- 6.2.5 更新Fake,模拟消息传输功能
- 6.2.6 测试chat的消息传输功能
- 6.3 给Model添加Avatar功能
- 6.3.1 给chat对象添加Avatar功能
- 6.3.2 修改Fake来模拟头像功能
- 6.3.3 测试头像功能
- 6.3.4 测试驱动开发
- 6.4 完成Chat功能模块
- 6.4.1 更新Chat的JavaScript
- 6.4.2 更新样式表
- 6.4.3 测试Chat UI
- 6.5 创建Avatar功能模块
- 6.5.1 创建Avatar的JavaScript
- 6.5.2 创建Avatar的样式表
- 6.5.3 更新Shell和浏览文档
- 6.5.4 测试Avatar功能模块
- 6.6 数据绑定和jQuery
- 6.7 创建Data模块
- 6.8 小结
- 第三部分 单页应用服务器
- 第7章 Web服务器
- 7.1 服务器的作用
- 7.1.1 认证和授权
- 7.1.2 验证
- 7.1.3 数据的保存和同步
- 7.2 Node.js
- 7.2.1 为什么选择Node.js
- 7.2.2 使用Node.js创建‘Hello World’应用
- 7.2.3 安装并使用Connect
- 7.2.4 添加Connect中间件
- 7.2.5 安装并使用Express
- 7.2.6 添加Express中间件
- 7.2.7 Express的使用环境
- 7.2.8 Express的静态文件服务
- 7.3 高级路由
- 7.3.1 用户对象的CRUD路由
- 7.3.2 通用CRUD路由
- 7.3.3 把路由放到单独的Node.js模块里面
- 7.4 添加认证和授权
- 7.5 Web socket和Socket.IO
- 7.5.1 简单的Socket.IO应用程序
- 7.5.2 Socket.IO和消息服务器
- 7.5.3 使用Socket.IO更新JavaScript
- 7.6 小结
- 第8章 服务器数据库
- 8.1 数据库的作用
- 8.1.1 选择数据存储
- 8.1.2 消除数据转换
- 8.1.3 把逻辑放在需要的地方
- 8.2 MongoDB简介
- 8.2.1 面向文档的存储
- 8.2.2 动态文档结构
- 8.2.3 开始使用MongoDB
- 8.3 使用MongoDB驱动程序
- 8.3.1 准备项目文件
- 8.3.2 安装并连接MongoDB
- 8.3.3 使用MongoDB的CRUD方法
- 8.3.4 向服务器应用添加CRUD操作
- 8.4 验证客户端数据
- 8.4.1 验证对象类型
- 8.4.2 验证对象
- 8.5 创建单独的CRUD模块
- 8.5.1 组织文件结构
- 8.5.2 把CRUD移到它自己的模块里面
- 8.6 构建chat模块
- 8.6.1 开始创建chat模块
- 8.6.2 创建adduser消息处理程序
- 8.6.3 创建updatechat消息处理程序
- 8.6.4 创建disconnect消息处理程序
- 8.6.5 创建updateavatar消息处理程序
- 8.7 小结
- 第9章 单页应用发布准备
- 9.1 单页应用针对搜索引擎的优化
- 9.2 云和第三方服务
- 9.2.1 站点分析
- 9.2.2 记录客户端错误
- 9.2.3 内容分发网络
- 9.3 缓存和缓存破坏
- 9.3.1 缓存时机
- 9.3.2 Web存储
- 9.3.3 HTTP缓存
- 9.3.4 服务器缓存
- 9.3.5 数据库查询缓存
- 9.4 小结
- 附录A JavaScript编码标准
- 附录B 测试单页应用