2015-12-30 48 views
0

我的新聞JSON數據是這樣的:什麼更有效:每次發出ajax請求或切入func的結果?

{ 
"news": [ 
    {"title": "some title #1","text": "text","date": "27.12.15 23:45"}, 
    {"title": "some title #2","text": "text","date": "26.12.15 22:35"}, 
    ... 
    ] 
} 

我需要一定數量的這份名單中,依賴於在函數的參數。據我所知,它被稱爲分頁。 我可以得到ajax響應並立即切片。所以每次調用該函數時 - 每次都發出ajax請求。 像這樣:

function showNews(page) { 
var newsPerPage = 5, 
    firstArticle = newsPerPage*(page-1); 
xhr.onreadystatechange = function() { 
    if(xhr.readyState == 4) { 
     var newsArr = JSON.parse(xhr.responseText), 
      ; 
     newsArr.news = newsArr.news.slice(firstArticle, newsPerPage*(page)); 
     addNews(newsArr); 
    } 
}; 
xhr.open("GET", url, true); 
xhr.send(); 

或者,我可以將所有結果newsArr和切它在附加功能addNews,通過網頁進行排序。

function addNews(newsArr, newsPerPage) { 
var pages = Math.ceil(amount/newsPerPages), // counts number of pages 
    pagesData = {}; 
for(var i=0; i<=pages; i++) { 
    var min = i*newsPerPages, //min index of current page in loop 
     max = (i+1)*newsPerPages; // max index of current page in loop 
    newsArr.news.forEach(createPageData); 
} 
function createPageData(item, j) { 
    if(j+1 <= max && j >= min) { 
     if(!pagesData["page"+(i+1)]) { 
      pagesData["page"+(i+1)] = {news: []}; 
     } 
     pagesData["page"+(i+1)].news.push(item); 
    } 
} 

所以,簡單的問題是哪個變種更有效?第一個加載服務器,第二個加載用戶的內存。你會在我的情況下選擇什麼? :)

感謝您的答案。我明白我想要什麼。但我不能選擇最好的

+0

爲什麼你不改變你的服務只返回n個記錄而不是在UI上切分數組? – gurvinder372

+0

gurvinder372,你是對的,但我需要這兩種方法中的一種。 –

+0

在這種情況下,有多少取決於您的服務將返回多少記錄。如果它小於1000,那麼一個服務呼叫就可以,因爲有效載荷不會很大,你可以選擇2。 – gurvinder372

回答

1

它實際上是一個主要基於觀點的問題。

對於我來說,分頁方法看起來更好,因爲它在顯示新聞之前不會產生「延遲」。從用戶的POV頁面將加載更快。

至於我,我會做下一頁的分頁+預加載。即,始終存儲下一頁的內容,以便您可以毫不拖延地顯示它。當用戶移動到最後一頁時 - 加載另一頁。

載入所有新聞肯定是一個壞主意。如果你有1000條新聞記錄,那麼每個用戶將不得不加載所有這些新聞記錄,即使他不打算閱讀一個新聞記錄。

在我看來,less requests == better規則不適用於此。不保證用戶將閱讀所有新聞。如果StackOverflow加載了每次打開主頁面時遇到的所有問題,那麼StackOverflow和用戶都會遇到大問題。

+0

這意味着,這些變體都不夠好嗎?更好 - 服務器端切片? –

+0

@БогданГусейнов哦,當然。我雖然你選擇服務器端切片和分頁與獲取所有項目和客戶端切片。你應該使用服務器端片。在獲取所有項目,然後在客戶端切片,沒有實際意義。 –

+0

@YeldarKurmangaliyev有:客戶端緩存。另外1000個記錄根本不重。圖像重量更多。無論如何,他應該嘗試一切可能性,並選擇最適合他的人。 – freakish

1

作爲一個經驗法則這麼多好的答案:

less requests == better 

但是這並不總是可行的。如果您存儲的數據量很大,則可能會導致內存/網絡用盡,即您可能需要在服務器端進行分頁。實際上,服務器端分頁應該是默認方法,然後如果您確實需要改進(例如本地緩存),則可以考慮進行改進。

所以你應該做的就是嘗試所有場景,看看他們在具體情況下的表現如何。

0

我更喜歡獲取所有的數據,但在某些情況下顯示,如點擊下一個按鈕數據已經存在,只是隱藏和顯示條件使用jQuery。

Every time call ajax is bad idea. 

但你也需要的,如果數據被一些週期性時間

1

如果記錄的最大數量,你的服務回報大約是1000的話,我不認爲它以後改叫新的數據AJAX是要創造一個巨大的有效載荷或內存問題(通過查看數據的性質),所以我覺得選項-2是更好的因爲

  • 數量的服務電話會少
  • 因爲用戶在分頁時不會看到任何延遲,所以他使用網站的經驗會更好。