2012-07-06 11 views
0

我手邊有一個大型數組(2300個元素,共280 KB,最短爲180 KB)。我需要在PHP或JavaScript中處理它,而不用加載頁面或服務器太多。頁面中有一個自動填充字段,我不希望每次用戶鍵入一個字母時都會向180 KB頁面發送請求(因爲它對我來說效率很低)。我不想在原始頁面中存儲所有內容,因爲它會降低頁面的速度(不是嗎?)。在PHP或JavaScript中處理的大型數組

我試圖將它推入Cookies中,但似乎在Cookies中沒有空間容納如此巨大的數組。有什麼建議麼?也許在數據庫中搜索是更好的解決方案,我應該將它們存儲在數據庫中嗎?

+0

對自動填充字段使用數據庫確實是一個經典的解決方案。它工作得很好。永遠不要發送給客戶完整的清單,這是沒用的,這個解決方案不會擴展。 – 2012-07-06 08:54:32

+0

我認爲你必須爲此使用JSON + PHP。 這將只是一個小的請求,並獲取您的數據 – 2012-07-06 08:54:42

+0

我以前做過一個JavaScript數組與約81,000元素的東西。唯一的問題是,當我嘗試訪問length屬性時,它崩潰了:'array.length'。 – starbeamrainbowlabs 2012-07-06 09:12:07

回答

1

你想自動完成一個列表,你只加載一個?將其存儲在JavaScript文件中並設置適當的緩存標題,以便客戶端僅加載列表一次。

不要將它設置爲cookie,這只是無稽之談。

+0

是的,我需要加載列表一次(實際上每3-4個月)。你能指示我的任何資源與**正確的緩存頭***的信息,請?你在談論以下嗎? 'Cache-Control:max-age = 3600,must-revalidate Expires:Fri,1998年10月30日14:19:41 GMT' 而且,我該如何確保瀏覽器每次刪除緩存版本服務器上的更新版本(每3-4個月)? – demechanico 2012-07-06 09:29:53

+0

尋找你的服務器的文檔,[這是Apache 2的文檔](https://httpd.apache.org/docs/2.2/caching.html)。你會通過谷歌或者在StackOverflow的這裏找到關於這個特定主題的大量文檔。爲文件提供無限制的緩存生存期,並在更新時更改路徑。像list-rev1.js,然後是list-rev2.js等等...... – 2012-07-06 11:40:17

+0

哦,還有,當客戶端支持它的時候用gzip。由於它是一個包含文本的文件,因此可以節省很多帶寬並加快頁面加載速度。 – 2012-07-06 11:42:12

0

對自動填充字段使用數據庫確實是一個經典的解決方案。我認爲你不會有困難找到一個PHP/MySQL/jQuery自動完成教程。

它工作得很好。

永遠不要發送給客戶的完整列表,這是沒用的,這個解決方案不會在您的值數量增長時擴展。

+0

我也可以使用數據庫的技巧,只是我不確定它是最好的選擇。另外,我不會發送超過10個元素給客戶,但是謝謝你也注意到了這一點。 – demechanico 2012-07-06 09:42:59

+0

這顯然是最好的選擇,也是最常用的選擇,特別是在使用PHP時。 – 2012-07-06 09:44:43

+0

取決於數據庫的大小。如果它適合280kB(使用gzip除以3或4),則可以通過將整個列表發送給用戶來節省CPU使用量。這是一個用戶體驗,因爲它立即自動完成。 Voyages-sncf.com(法國鐵路預訂系統,每月1100萬獨立訪客)使用此功能自動填充火車站。 – 2012-07-06 11:46:19

1

我認爲它實際上是最好的輸入發送到服務器通過Ajax &等待服務器端答覆,如果您擔心網頁加載時間+如果你的陣列是從時間更改爲時間...

另一方面,您可以將數組以JSON格式存儲在服務器上的fie上&在JavaScript中通過Ajax發出問題,這樣您的用戶將不得不一次下載數組&以後您可以依靠瀏覽器緩存來加速它起來。

例如。

$.get("array.txt",function(array){ 

    var myArray = eval(array); 
    //Now DO WHat YOu WAnt with the Array now Housed in the variable 'myArray' 

}); 

這僅僅是一個例子,它不是你使用jQuery的必備工具。

注: -

如果使用第二種方法......盡最大努力添加某種緩衝 機制,使您的用戶等待它加載首次 用戶訪問網站在他們目前的會議中。這只是讓 用戶得到他們期望的第一次嘗試,否則他們可能不會看到 任何建議或任何你想要做的與陣列然後 他們會變得惱火&最終離開。

如果使用PHP,您需要設置正確的Cache Header。正常情況下,您上傳​​的 txt文件一旦&永不改變將自動將 發送到大多數現代瀏覽器中的緩存。

+0

陣列變化不大 - 在3-4個月內只有一次。另外,我已經在使用jQuery,以JSON格式發送信息。實際的查詢(包括請求和回覆)都很小,只是我不想讓服務器一次又一次地處理相同的數組。關於緩存的問題,我希望能夠在我擁有它時向用戶發送較新的列表。有沒有任何方法檢查這一點,而不依賴於時間的事情? – demechanico 2012-07-06 09:40:26