【问题标题】:local storage vs cookie performance本地存储与 cookie 性能
【发布时间】:2015-11-26 00:29:48
【问题描述】:

我正在开发一个移动网站(主要用于 Android),我想在客户端存储一个字符串(大约 20 个字符)。我想知道哪种方式在性能方面更有效,本地存储还是 cookie?我将使用 JavaScript 编写 cookie 或本地存储。服务器不会在任何部分工作以创建 cookie。

我为此找到了一些测试结果,但它们对我来说似乎并不准确。并且还发现了一些关于堆栈溢出的问题,但他们也没有回答我的问题。如果有知道好文章或测试的人请帮忙。

【问题讨论】:

  • 在什么场景下表现?与不发送它们相比,通过 HTTP 发送 cookie 相对昂贵,因为本地存储保存了所有内容。
  • 不要使用 cookie 来存储前端特定的数据。使用 LocalStorage,您还应该考虑使用前端的 sqlite 数据库。 - 但不知道它的支持范围有多广
  • 我们的 Web 应用程序使用与我们的 IOS 应用程序相同的 API,因此我通过向我们的 API 发出 ajax 请求来获取所有内容。当我们的索引页面来到客户端时,它就像静态的 html 页面,但是通过使用 ajax 请求它变成了动态的。为了提出这些请求,我应该使用 JavaScript 存储会话 ID。这样一来哪个效率更高?
  • @mortalkombat 在处理后端需要存储的数据以使客户端自动化时,您应该使用 cookie 或存储在 cookie 中的会话 ID。
  • 相关:stackoverflow.com/questions/3220660/local-storage-vs-cookies(请注意,这不是链接问题的重复 - 链接问题询问页面加载,而此问题询问阅读/写入速度和 AJAX 请求的影响)。

标签: javascript browser web


【解决方案1】:

即使我想不出一些jsPerf 的例子,localStorage 的访问时间肯定比读取 cookie 更快。但这并不是您在这种情况下唯一关心的问题,尤其是当您处理 请求时间 和性能至关重要的移动设备时。

这意味着,cookie 将附加到 HTTP 请求,而 localStorage 数据不会。

我的建议显然是localStorage

【讨论】:

  • +1 用于考虑实际瓶颈是什么(网络),而不是陷入技术实施细节(访问 cookie/localStorage 的时间)。
  • 这里我使用 vanilla JavaScript 将字符串写入 cookie 和本地存储,作为第三种情况,我使用 jquery cookie。而且似乎写入本地存储要快得多。谢谢。 jsperf.com/cookie-vs-local-storage
【解决方案2】:

您可以使用 jsPerf here 在浏览器中运行一个测试。在我的带有 Chrome 的 Ubuntu 上,测试显示读取 localStorage 比读取 cookie 快,但写入 localStorage 比写入 cookie 慢。

【讨论】:

【解决方案3】:

请问您想如何衡量“效率”/“性能”?

例如,您可能会根据网络/数据使用情况来衡量,或者您可能会根据延迟来衡量,或者可能会根据用户“明显”的程度来衡量。

我还想问一下这个网站的安全性有多重要。

我个人有一种下意识的反应反对通过 JavaScript 访问 cookie,尤其是在会话管理方面。参考:

多久会提出这些请求?

如果是一次/小时、一次/分钟或一次/秒会影响结论。用户会以不同的方式感受到这些不同频率下几秒钟的延迟。

根据您将要部署的情况定制结论。

我的最后一个问题是如何将此会话 ID 发送到 API。

它是否包含在每个 AJAX 请求中?每个页面加载?如果它在每个 AJAX 请求中而不是每个 HTTP 请求中?

.. 实际回答您的问题:

没有看到您的设计/意图,没有对上述问题的答案,并且仅在性能/延迟的基础上考虑这一点:我认为 localStorage 只会有好处,因为您可以有选择地选择何时传输会话id(但这取决于用于“选择性选择”的代码 - 如果在每个请求上都发送它,那么无论如何它应该无关紧要)。

我建议考虑一下是否需要提高性能(例如在您将要部署的环境中过早优化和测试,而不是在独立环境中进行测试)以及是否存在安全隐患(严格来说不是在所有情况下都是必需的,例如广告跟踪与银行应用程序)。

本质上,这是一种冗长的表达方式“取决于情况”!

【讨论】:

  • 我只发送带有 AJAX 请求的会话 ID,每次我向我们的 API 发出请求时,我都会发送我们的会话 ID,以便我们的服务器知道它是哪个用户(它正在制作像一个移动应用程序,它只能通过 AJAX 请求获取信息)。但这不是我只想学习更快写入 cookie 还是写入本地存储的情况?
  • 在这个链接的顶部,它说得更快w3schools.com/html/html5_webstorage.asp。但它是否与JavaScript编写的cookie或服务器编写的cookie相比我不确定。
  • 如果会话 id 与每个请求一起发送(除了第一个?它是在哪里设置的?)那么关于如何存储会话 id 和个人读取/与通过网络传输数据所需的时间相比,写入。本能地(我手头没有数字)我认为 localStorage 将提供几乎可以忽略不计的更快读/写速度,并允许您对通过网络发送的内容和时间更有选择性。
  • 另外需要考虑的是您希望支持的浏览器是否具有 HTML5 功能。在为 iOS 开发时,您对支持/不支持的内容有相当深入的了解。当向其他支持互联网的手机/平板电脑开放时,世界要复杂得多。以 5 年前制造的非智能手机为例。然而,这对你来说可能并不重要(取决于你为谁开发),所以这变成了另一个“它取决于”:P
猜你喜欢
  • 2019-10-24
  • 2020-01-10
  • 2011-03-14
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多