2012-03-23 34 views
1

我正在構建一個ajax應用程序,我可以選擇如何構造數據尋呼功能。基本上,用戶將使用1,000-2,000條記錄,但只有20條記錄從數據庫中同時加載,發送到客戶端,然後緩存在本地會話存儲中。這些記錄是包含對象屬性(基本上是客戶記錄)的json字符串。尋呼ajax應用程序的設計模式

下面是兩種選擇,讓我們假設我們正在處理1,500條記錄,並且每個頁面長度爲20條記錄。 困境是存儲記錄的1,500個ID的地方。

選項1:存儲爲在服務器會話,和序列INT的列表和反序列化對每個請求的1500個記錄的ID。客戶端不知道每個頁面的記錄ID,只需要一個頁碼。在服務器上,當用戶請求頁面X時,我們查看int列表並確定頁面X的記錄ID,加載這些記錄並向客戶端發送帶有這些ID的json字符串。這裏的缺點是我們在服務器會話中列出了1,500個整數。好處是,當我們請求一個頁面時,我們只向服務器發送一個int。

選項2: 的1500個記錄的ID被髮送到客戶端時,然後該列表存儲在本地存儲會話用戶登錄。當用戶請求頁面X時,JavaScript函數確定頁面X上的哪些記錄ID,並向服務器發送一個20個字節的json序列化列表。服務器然後用這些ID返回記錄。好處在於服務器端會話要輕得多,並且應該可以提高性能(無需在每個請求中讀/寫/序列化該列表),並且可能更具可擴展性。缺點是我們每次請求頁面時都會向服務器發送20個整數列表。

我傾向於選擇2:這是最好的方法嗎?

注1)我要求用戶支持HTML5本地存儲和2)服務器端實現將是azure和WCF。

+0

爲什麼客戶端(或者服務器)需要存儲這些ID?你不能只存儲當前頁碼並獲得下一頁?似乎你正在做的工作比你需要的多,但也許我錯過了一些東西。 – CodingGorilla 2012-03-23 20:49:14

+0

你對數據使用SQL嗎?或者他們存儲在其他地方?如果你使用SQL有必要緩存數據?如果沒有,那麼你可以使用SQL的直接分頁命令,並避免保留除頁碼和頁面大小之外的任何內容。 – Aristos 2012-03-23 20:49:37

+0

在數據庫中存儲1500個ID?!?客戶端請求頁碼?繁榮完成。 – dotjoe 2012-03-23 20:51:35

回答

0

也許我是誤解,但我並不真正瞭解你的方法。如果你知道頁面長度並知道所需的頁碼,爲什麼不能在ajax調用中將這些參數作爲參數發送到服務器,然後在你的sql語句中將其限制爲db。我的意思是說,首先了解這些ID的意義何在。例如,看看jQuery數據表插件如何在這裏執行分頁:http://www.datatables.net/examples/server_side/server_side.html。正如你所看到的,他們使用將頁碼和頁面位置發佈到服務器的方法。然後,很容易限制你想要返回的行(至少在Oracle,MySQL和MS SQL中)。除非我完全忽略了這種情況,請讓我知道。

+0

因爲如果我知道這些ID,那麼我可以說「讓我的記錄ID爲x,y,z ......」。如果我不知道這些ID,那麼在我甚至可以請求記錄之前,我需要先說出「去獲取所有ID的列表並找出哪些記錄在X頁上」,然後才能請求記錄。知道這些ID可以保存一個查詢,這就是爲什麼我要緩存它們;現在我需要弄清楚最適合存儲它們的位置:服務器端會話還是本地存儲。 – frenchie 2012-03-24 00:17:44

+0

每個人似乎都感受到上面那樣......每頁仍有20條記錄......簡單的解決方案,簡單的解決方案。 – user1288802 2012-03-26 20:34:32