2011-12-21 80 views
2

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

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

任何人有任何建议,以一个很好的方法呢?

感谢您的帮助!

+0

这样你就可以将你的0.5MB的数据从HTTP响应转移到HTTP请求中,不是吗? : - ? – 2011-12-21 15:47:10

回答

3

Cookie传送到您的服务器为每个网络请求(每个 html页面,每个图像,每个 CSS文件等)。让用户上传每个Web请求中的1/2 MB数据是疯狂的。由于这个原因,Cookie应该非常小。

你不需要任何异国情调。

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

例如,1234是最新的版本号

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

JS-数据。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请求到Web服务器,以保持检查新鲜感,第二的好处方法是,你不需要添加PHP代码的逻辑输出最新版本号到你的所有html页面。所有的逻辑都包含在js-data.php脚本中。这很容易管理和使用。

0

您可以使用WebStorage来做到这一点。这仅限于相当现代但不一定是尖端的浏览器。看到这里:Wikipedia WebStorage

2

我会以下面的方式解决这个问题。
编写一个php文件,其中返回一个JavaScript内容与您的数组。 在该文件中,您应该检测是否有一些更改,以便 数组需要更新。如果阵列应该更新返回内容,否则 返回HTTP状态304,这意味着资源没有不修改

php文件的内容应该是这样的: 的script.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,所以我不知道如何正确执行。