第 1 章 客户端数据存储概述

第 1 章 客户端数据存储概述

过去十年中,浏览器已经发展成为一个强大的工具。这是一个缓慢的过程,伴随着许多成长之痛。现在,增强型布局控件、3D 图形和游戏,甚至是音乐都可以在小而古老的浏览器中实现。客户端数据存储是一个更加令人兴奋的特性,虽然相比之下,它没那么华丽(没有别的意思)。但我们为什么这样说呢?

浏览 Web 的“经典”过程从一开始就没有变过:浏览器请求一个 URL,Web 服务器返回请求的内容,然后浏览器请求更多的内容,而服务器则返回更多的内容。

当然,你可以引入 JavaScript 和 AJAX,让情况更复杂一些。但是,即使是在精心设计的 Web 2.0 应用程序中,浏览器还是会一次又一次地向服务器请求信息。之所以会这样,是因为浏览器(似乎)很健忘。它知道的所有东西都必须从服务器习得。

虽然一般而言确实如此,但这忽视了一个功能强大的替代方案:将数据存储在浏览器中,让它可以跳过向服务器请求信息的过程,而只从用户的本地机器上获取数据。它甚至还可以操作那些数据,用于任何合理的用途。数据可以稍后被发回服务器用于更新。

总之,这让浏览器可以拥有如下能力。

  • 直接访问数据。虽然使用 AJAX 获取数据的速度通常已经快了很多,但将数据存储在本地机器上会让数据访问速度更快。

  • 节省网络流量。浏览器获取一次数据,只要有用就一直保存着,而不必不断地从服务器获取数据。这能够减轻服务器的压力。

  • 减轻服务器的压力。如果服务器不断地响应请求,并从数据库服务器获取数据,那么服务器会负担过重。减少请求次数,可以减少服务器的工作量。

  • 最后,数据存储在本地,这使创建完全离线的应用程序变得更加可行。

当然,并非一切都如此美好。将数据转移到浏览器也有以下几点不足。

  • 没有任何同步支持。设想一下,你已经将数据从服务器复制到了浏览器。如何处理数据同步呢?如果出现冲突会怎样?本书所谈及的核心技术,没有一项支持任何有关同步处理的概念。不过,你会发现,像 PouchDB(http://www.pouchdb.com)这样的库内置了同步功能。

  • 存储限制模糊。作为开发人员,我们讨厌模糊。我们希望准确地知道可以使用多少资源。遗憾的是,对于本书将要谈及的许多技术而言,这些限制(以及打破限制的后果)有点模糊。

  • 最后,虽然本书谈及的技术功能非常强大,但它们并不能取代纯正的数据库服务器。数据库服务器针对处理大量数据的任务进行了特别仔细的优化,并提供了查找数据的方法。本书将要谈及的方案无疑能够存储数据,但它们并不像一个嵌入式 Oracle 服务器。(虽然这可能是一件好事。)

本书将讨论各种客户端存储技术。对于每一种技术,本书还会清楚公正地讨论它们实际上得到了多大程度的支持。你将会看到 API 示例以及演示程序,它们可以帮助你学习如何使用 API。最后,我们将看几个旨在简化客户端存储的库。做好准备,让我们浏览一些更为实用的 Web 特性,这将是一段有趣但时而艰难的旅途。

目录