当前位置:嗨网首页>书籍在线阅读

13-小结

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.4 小结

在这一章,我们回答了在发布单页应用网站时会遇到的一些常见问题。演示了如何修改我们的单页应用,以便搜索引擎可以为之建立索引,如何使用分析工具(像 Google Analytics),以及如何把应用产生的错误信息发送给服务器。最后,我们讨论了如何在应用的每个层级进行缓存,每一层缓存的实际价值是什么,以及如何使用缓存。

关于如何构建健壮的、可测试的和可扩展的单页应用,我们的建议差不多就结束了。我们强烈建议你阅读一下附录A和附录B,因为它们覆盖了很重要的话题,讲解得非常深入。附录A演示了整本书自始至终使用的代码标准,附录B演示了如何使用测试模式和自动化测试,很容易地识别、隔离和修复软件的缺陷。

在本书的第一部分,我们构建了第一个单页应用,讨论了为什么对于很多网站来说,单页应用是非常好的选择。尤其是单页应用可以提供难以置信的快速响应和交互式用户体验,而传统网站是无法企及的。接下来我们回顾了一些JavaScript编程方面的概念,要想顺利地实现大规模的单页应用,需要理解这些概念。

在本书的第二部分,我们使用久经考验的架构,继续设计并实现单页应用。我们没有使用框架库,是因为我们希望演示单页应用的内部工作。你可以使用这个架构来开发自己的单页应用,或者着手挑战学习众多框架中的其中一个,再根据必要的经验来判断它是否提供了你需要的工具。

在本书的第三部分,我们安装了Node.js和MongoDB服务器,为单页应用提供了CRUD的后端实现。我们使用Socket.IO,提供了在客户端和服务器之间快速响应和轻量的全双工通信。我们也消除了数据格式之间的互相转换,这种转换在传统网站中是经常可以见到的。

最后,在整个开发过程中,我们使用的语言是JavaScript,使用的数据格式是JSON。使用这种优雅简洁的方式,开发过程中的每个环节都能获益。比如,使用单一的语言,就提供了在客户端和服务器之间移动并共享代码的机会,大大地减少了代码的体积和复杂度。它也节省了我们的时间,避免了混乱,因为几乎没有了语言和数据格式之间的环境切换。好处还延伸到了测试环节,因为不但需要测试的代码大大地减少了,而且也可以使用相同的测试框架来测试几乎所有的代码,没有浏览器测试集的开销和费用。

我们希望你喜欢这本书,并学会了书中介绍的所有知识。学习单页 Web 应用的最好方法就是持续不断地开发单页应用。我们已经尽我们所能,向你提供了从前端到后端都使用JavaScript来开发单页应用所需的所有工具。

注 释

[1]. 还有一个浏览器默认会发起的获取/favicon.ico 的请求。——译者注

[2]. 虽然对认证信息的Base64 编码结果很难用肉眼识别解码,但它仍可以极为轻松地被计算机所解码,就像其容易编码一样。编码这一步骤的目的并不是为了安全与隐私,而是为了将认证信息中的不兼容字符转换为与HTTP协议兼容的字符集。由于每个请求都会发送认证信息,所以发送途中被他人窃取的概率就大大地增加了。更多信息请参考http://zh.wikipedia.org/wiki/HTTP基本认证。——译者注

[3]. YouTube 网站的很多请求都是由Apache 承载的。——译者注

[4].意即 Socket.IO 大大地减少了开发人员的工作量,不用花费很多时间就可以完成消息通信的功能。——译者注

[5]. 这么说是不对的。要加载的内容需要和当前页面所在的服务器相同(两者的 URI 同源),和JavaScript来自哪个服务器无关。——译者注

[6].在生产环境的设置中,通常希望把对文件的轮询保持在最小值,因为这会拖垮服务器的性能。fileWatch方法有选项集,这样文件就可以较低的频率被轮询。比如,可以每隔30000毫秒(30秒)轮询一次,而不是使用默认值0(我们只能假定这意味着“真的真的是经常在检查”)。

[7]. 是的,可以创建关系型数据库集群和副本,但是对它们进行配置和维护通常需要大量的专门知识。购买更快的服务器就容易得多了。

[8].而在关系型数据库中,为了存储文档,首先得转换成SQL,然后在检索的时候又要把它转换回JSON。

[9]. Star Trek(《星际旅行》)电视剧(1966-69)中的红衣船员,在很多集中,出场后不久就会被敌人消灭掉,是非常典型的龙套角色。红衣人在科幻片中的这一定型角色(出场不久就会死去),就是源自于此。——译者注

[10]. 在我的64位开发机上,每个几乎是空的集合都会占用大约64 MB的磁盘空间。

[11]. 出自爱因斯坦(Albert Einstein)的名言:“Everything should be made as simple as possible, but no simpler.”(凡事都应该尽可能简单,但也不能过于简单)。——译者注

[12]. 另外一种机制叫做promise,它通常比普通的回调函数更加灵活。Promise库包括Q(npm install q)和Promised-IO(npm install promised-io)。jQuery 也为Node.js提供了丰富的和熟悉的promise方法集。附录B演示了jQuery在Node.js中的使用。

[13].“#”的英文是hash,“!”的英文是bang。中文一般就读作“井号感叹号”。——译者注

[14]. 1999 年,微软在IE5 中内置了XMLHTTPActiveX 控件,为Ajax 的前身。而“Ajax”这个词是在2005 年由 Jesse James Garrett 提出的。更多信息请参考http://en.wikipedia.org/wiki/Ajax_(programming)。——译者注

[15]. 除了window对象外,还有其他元素也有onerror 事件,如script、img等。具体的支持情况可以参考:http://www.quirksmode.org/dom/events/error.html。——译者注

[16]. 下面的示例并不能达到预期的效果。需要先绑定window.onerror事件,才能捕获JavaScript错误。——译者注

[17]. “Memcached是一种内存中的键值存储,用来保存任意类型的小块数据。”——译者注