2011-05-04 42 views
0

我有一個網頁,在加載時需要從服務器做很多json提取動態填充各種東西。特別是它更新了我從中導出數據的圖形表示的大型數據結構的部分。大量的併發ajax調用和處理它的方法

所以它在鉻中效果很好;然而,safari和ff似乎有點受損;在查詢衆多json請求時,瀏覽器變得呆滯且無法使用。我假設這是由於所述數據結構的相當昂貴的迭代造成的。這是一個有效的假設嗎?

如何減輕這個而不是更改查詢語言,以便它是一個單一的提取?

我想申請一個隊列,可以限制併發AJAX查詢的數量(因此也限制了有爭議的更新數據結構...任何想法多少?有用的線索嗎?其他的建議?

+0

你可以根據請求緩存響應嗎? – Tim 2011-05-04 01:06:50

+0

@Tim:不,只有服務器真的知道數據是新的(或緩存是舊的)。說過我確實想知道是否應該在客戶端安裝本地數據庫。 (但後來我不得不提高緩存無效等) – yee379 2011-05-04 20:24:41

回答

1

在瀏覽器端JS中,創建一個圍繞jQuery.post()(或者你正在使用的任何一種方法)的包裝器 ,將請求附加到隊列中
另外創建一個函數'queue_send',它實際上會調用jQuery.post()傳遞整個隊列結構

在服務器上創建一個名爲'queue_receive'的代理函數,它重播JSON t o您的服務器接口就像來自瀏覽器一樣,將結果收集到單個響應中,然後發送回瀏覽器。 瀏覽器端queue_send_success()(queue_send的成功處理程序)必須對此響應進行解碼並填充數據結構。

有了這個,你應該可以減少你的初始化流量到一個實際的請求,也可以整合你的網站上的一些其他請求。

+0

+1這對網絡來說也很好,因爲HTTP頭的比例:JSON數據很可怕,有很多小的JSON請求。 – 2011-05-04 02:16:32

+0

謝謝;這也是我的想法;但認爲有人必須已經創建它...它是:[jquery.ba-jqmq.js](http://benalman.com/code/projects/jquery-message-queuing/docs/files/jquery-ba- jqmq-js.html):)似乎也工作得很好! – yee379 2011-05-04 20:20:29

0

特別是,它更新了我從中得出數據的圖形表示的大型數據結構的部分。

我想嘗試:

  • 排隊的反應,因爲他們進來,然後更新一次結構
  • 隱藏表示不可見,直到響應是

Magicianeer's answer也好 - 但我不確定它是否符合你定義的「沒有改變查詢語言,以便它是一個單一的提取」 - 它會避免重新設計現有的邏輯。

+0

排隊迴應的好主意:)我也會試一試。顯示器本身需要是動態的(否則我只會有一個大的單個查詢),所以我可能會投入一些努力讓計時器在客戶端觸發批量更新。乾杯! – yee379 2011-05-04 20:22:53

+0

沒有想法_my_打字atm發生了什麼,「隱藏不可見」...... tsk – 2011-05-04 20:24:22