【问题标题】:Storing large Cookies in Javascript.. How to在 Javascript 中存储大型 Cookie .. 如何
【发布时间】:2011-12-21 15:45:25
【问题描述】:

为了问题的简单性,我假设我的网站是这样工作的:我有一组 Javascript 数据,几乎在我网站的每个页面上都使用。我使用 PHP 在每一页上打印这个 javascript 数组。现在这个数组已经增长到大约 0.5MB,所以它现在落后于系统,正如你可以想象的那样。简单的选择是将某些内容放入缓存中,因此不需要每次都打印数组,但是存储值的数组会在用户浏览不同页面时不时更新。

我最初的想法是使用 javascript cookie 来存储信息,也许只是做一个快速的 PHP 来检查数组是否已更改,如果它已删除旧 cookie 并将更新的数组下载到该 cookie 中。但是,我被引导相信 cookie 有大小限制。

有人对此有什么好的建议吗?

感谢您的帮助!

【问题讨论】:

  • 这样您就可以将价值 0.5MB 的数据从 HTTP 响应移动到 HTTP 请求,不是吗? :-?

标签: php javascript cookies


【解决方案1】:

Cookie 会针对 每个 网络请求(每个 html 页面、每个 图像、每个 css 文件等...)。让用户在每个 Web 请求上上传 1/2 mb 的数据是很疯狂的。因此,Cookie 应该非常少。

你不需要任何异国情调的东西。

有一个 php 脚本输出必要的数据。让它向浏览器发送建议它可以缓存请求很长时间的http标头。要强制它更新数据(当它更改时),请通过更改查询字符串参数来更改脚本 src 的 url。由于 url 发生变化,如果浏览器之前从未请求过 url,则必须请求该文件。使用顺序编号方案来保证唯一性。

例如,1234 是最新的修订号

<script src="js-data.php?version=1234"></script>

js-data.php

<?php
header("cache-control: max-age=1000000");
header("content-type: application/javascript");
echo 'var data = {...}';

或者,不要更改修订号,而是让 js-data.php 脚本支持条件 http 请求,这正是为此而设计的。您可以在此处阅读 mopre 关于 http 标头以及如何解决新鲜度问题http://www.mnot.net/cache_docs/

虽然前一种方法更有效,因为浏览器不需要向网络服务器发出额外的 http 请求来保持检查新鲜度,第二种方法的好处是你不需要添加带有逻辑的 php 代码用于将最新的修订号输出到您的所有 html 页面。所有逻辑都包含在 js-data.php 脚本中。这更容易管理和使用。

【讨论】:

    【解决方案2】:

    我会通过以下方式解决这个问题。
    编写一个 php 文件,该文件使用您的数组返回一个 javascript 内容。 在该文件中,您应该检测是否有一些更改,以便 数组需要更新。如果应该更新数组,则返回内容,否则 返回 http 状态 304,表示资源未未修改

    php 文件的内容应该是这样的: 脚本.php

    <?php
    $nochanges = TRUE;
    
    //Detect if changes are required
    
    if($nochanges)
    {
      http_send_status (304);
    } 
    else
    {
    ?>
    <script>
      myarray=[1,2,3];
    <script>
    

    html的内容

    PS: 对不起,我不会用php,所以我真的不知道如何正确地做到这一点。

    【讨论】:

      【解决方案3】:

      您可以使用 WebStorage 来做到这一点。这仅限于非常现代但不一定是最先进的浏览器。见这里:Wikipedia WebStorage

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 2012-04-10
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多