13-小结
9.4 小结
在这一章,我们回答了在发布单页应用网站时会遇到的一些常见问题。演示了如何修改我们的单页应用,以便搜索引擎可以为之建立索引,如何使用分析工具(像 Google Analytics),以及如何把应用产生的错误信息发送给服务器。最后,我们讨论了如何在应用的每个层级进行缓存,每一层缓存的实际价值是什么,以及如何使用缓存。
关于如何构建健壮的、可测试的和可扩展的单页应用,我们的建议差不多就结束了。我们强烈建议你阅读一下附录A和附录B,因为它们覆盖了很重要的话题,讲解得非常深入。附录A演示了整本书自始至终使用的代码标准,附录B演示了如何使用测试模式和自动化测试,很容易地识别、隔离和修复软件的缺陷。
在本书的第一部分,我们构建了第一个单页应用,讨论了为什么对于很多网站来说,单页应用是非常好的选择。尤其是单页应用可以提供难以置信的快速响应和交互式用户体验,而传统网站是无法企及的。接下来我们回顾了一些JavaScript编程方面的概念,要想顺利地实现大规模的单页应用,需要理解这些概念。
在本书的第二部分,我们使用久经考验的架构,继续设计并实现单页应用。我们没有使用框架库,是因为我们希望演示单页应用的内部工作。你可以使用这个架构来开发自己的单页应用,或者着手挑战学习众多框架中的其中一个,再根据必要的经验来判断它是否提供了你需要的工具。
在本书的第三部分,我们安装了Node.js和MongoDB服务器,为单页应用提供了CRUD的后端实现。我们使用Socket.IO,提供了在客户端和服务器之间快速响应和轻量的全双工通信。我们也消除了数据格式之间的互相转换,这种转换在传统网站中是经常可以见到的。
最后,在整个开发过程中,我们使用的语言是JavaScript,使用的数据格式是JSON。使用这种优雅简洁的方式,开发过程中的每个环节都能获益。比如,使用单一的语言,就提供了在客户端和服务器之间移动并共享代码的机会,大大地减少了代码的体积和复杂度。它也节省了我们的时间,避免了混乱,因为几乎没有了语言和数据格式之间的环境切换。好处还延伸到了测试环节,因为不但需要测试的代码大大地减少了,而且也可以使用相同的测试框架来测试几乎所有的代码,没有浏览器测试集的开销和费用。
我们希望你喜欢这本书,并学会了书中介绍的所有知识。学习单页 Web 应用的最好方法就是持续不断地开发单页应用。我们已经尽我们所能,向你提供了从前端到后端都使用JavaScript来开发单页应用所需的所有工具。
注 释
[1]. 还有一个浏览器默认会发起的获取/favicon.ico 的请求。——译者注
[3]. YouTube 网站的很多请求都是由Apache 承载的。——译者注
[4].意即 Socket.IO 大大地减少了开发人员的工作量,不用花费很多时间就可以完成消息通信的功能。——译者注
[5]. 这么说是不对的。要加载的内容需要和当前页面所在的服务器相同(两者的 URI 同源),和JavaScript来自哪个服务器无关。——译者注
[7]. 是的,可以创建关系型数据库集群和副本,但是对它们进行配置和维护通常需要大量的专门知识。购买更快的服务器就容易得多了。
[8].而在关系型数据库中,为了存储文档,首先得转换成SQL,然后在检索的时候又要把它转换回JSON。
[10]. 在我的64位开发机上,每个几乎是空的集合都会占用大约64 MB的磁盘空间。
[13].“#”的英文是hash,“!”的英文是bang。中文一般就读作“井号感叹号”。——译者注
[15]. 除了window对象外,还有其他元素也有onerror 事件,如script、img等。具体的支持情况可以参考:http://www.quirksmode.org/dom/events/error.html。——译者注
[16]. 下面的示例并不能达到预期的效果。需要先绑定window.onerror事件,才能捕获JavaScript错误。——译者注