2011-12-21 42 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,所以我不知道如何正確執行。