【问题标题】:HTML5 - localStorage, Cookies, and SQLHTML5 - 本地存储、Cookie 和 SQL
【发布时间】:2011-11-03 19:18:22
【问题描述】:

根据我在 SO 上看到的大量搜索结果,HTML5 的 localStorage 功能似乎比 Cookie 更有优势,仅当您关心存储不需要传输到服务器的大部分数据时。 (Local Storage vs Cookies)

我很难理解人们如何/为什么会使用此功能。谁能提供一个真实示例的链接来说明 localStorage 的好处?

另外,是否有过使用 localStorage 的情况……比如说……将某些信息写入 SQL 数据库?

抱歉,这与本网站上无数 HTML5 问题的重复。我已经阅读了一些,但没有一个人完全回答了我的问题。提前致谢!

【问题讨论】:

  • 如果服务器不需要数据,我总是使用 localStorage。它可以避免使您的 HTTP 请求变得臃肿,如果您正在执行大量 AJAX(或从同一域加载大量静态内容,但无论如何这都是个坏主意),这一点尤其重要。我喜欢使用 localStorage 来缓存数据客户端。
  • 所以我明白了......但也许我只是没有看到大局。并不是说我不同意它是一个有价值的功能……我只是还没有在现实世界的情况下把这些点联系起来。因此,从本质上讲,它是一种将某些信息存储在隐藏字段中或将其隐藏在其他 HTML 片段中以供将来参考的替代方法。听起来对吗?
  • 当然 :) 例如,Twitter 使用它来缓存推文的显示。

标签: javascript sql html cookies local-storage


【解决方案1】:

localStorage 是存储应用程序设置的好地方,您希望在会话之间保留这些设置(而不是 sessionStorage),而不是传输到服务器(而不是 cookie)。以前,为了避免将基于 cookie 的设置不必要地传输到服务器,您必须为 cookie 使用不同的子域。

下一个重要的优势是,虽然 localStorage 使用 SQLite,但所有 localStorage 值都由浏览器缓存在内存中。因此,虽然使用数据库 API,每个 executeSql 语句都是异步的,并且需要回调函数来获取数据,但 localStorage 是完全同步的,因为它直接从内存缓存中获取数据。这意味着从 localStorage 存储和检索大块数据的速度非常快。

localStorage 对象的实现方式也使得在您的代码中使用起来非常简单直观。例如,您是否知道,除了使用 getItem 和 setItem 之外,您还可以像使用任何其他对象一样使用 localStorage?

localStorage.someKeyName = 'someValue';
alert(localStorage.someKeyName); // alerts 'someValue'
delete localStorage.someKeyName; // removes the key

将此与从数据库中检索单个记录所需的代码量进行比较:

var db = openDatabase('myDb', '', '', 1024);
db.compatibleReadTransaction(function (t) {
    t.executeSql('SELECT someField FROM someTable WHERE somePrimaryKey = 1', function(t, r) {
        console.log(r.rows.item(0));
    }, function () {
        // error
    });
});

真实示例

g.joeblade.com 的 Guardian 网络应用程序将所有文章内容存储在 localStorage 中。这意味着页面加载是即时的。如果内容要存储在数据库中,它就不会像必须从数据库中异步获取每篇文章那样快,而且还有调用 SQLite 查询引擎、运行回调等的开销开。

【讨论】:

  • 因此文章内容存储在 SQL 数据库中,提供给用户,本地缓存在他们的 localStorage 数据库中,然后在将来的任何时候从那里引用。那个听起来是对的吗?这是否意味着在页面加载时总是有一个 javascript 检查来测试浏览器是否已经缓存了可能提供的数据?
  • 是的,是的。该场景可能看起来像这样:应用程序只是在 localStorage 中存储一个日期,该日期记录了它最后一次更新的时间。当应用程序启动时,它会被发送到服务器,服务器会返回自该日期以来的所有新内容,然后将其添加到 localStorage 中的其余内容中,并删除最旧的内容以节省空间。
  • 另外,localStorage api 中是否内置了某种 ORM 样式的查询功能?例如,不是编写 SQL 语句,而是将数据库中的项目作为对象引用?例如someTable.someField.Where(somePrimaryKey = 1) ?
  • 没有。 localStorage 与任何其他 JavaScript 对象完全一样,只是其属性的值只能是字符串。
  • 非常感谢您的帮助,马特!
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2011-03-14
相关资源
最近更新 更多