2012-03-04 242 views
0

我正在使用$.getJSON來拉動對象的庫存(100個項目,不是一個大集合),但它的XHR呼叫需要8-10秒。

想知道是否有什麼我失蹤或我可以做什麼來加快我的計劃?

+2

找出哪個部分先慢;它是否發出初始請求,是服務器端生成,是將時間下載到客戶端的時間,還是分析客戶端數據的時間? – 2012-03-04 08:13:21

+1

請使用WebKit開發人員工具中的[時間軸](http://www.webkit.org/blog/1091/more-web-inspector-updates/#timeline_panel)/ Profiles面板等JavaScript分析工具。 – Gumbo 2012-03-04 08:24:13

+0

我猜初始請求$ .getJSON(blah) – 2012-03-04 08:37:46

回答

2

它涉及很多事情。兩個主要的瓶頸,我認爲這些是

  • 服務器腳本生成的JSON可能導致該問題或採取長期的過程的時間來產生輸出。

  • 你有你的頁面一樣的效果或滑塊上的腳本數量過多,使的getJSON,運行速度慢

在大多數的情況下,第一個是一個無聲的殺手。爲了測試你的腳本,對頁面做一個getJSON請求,它只是顯示JSON字符串,不做任何處理。東西非常輕便這樣

{ "test" : "value" } 

在PHP

回聲 '{ 「測試」: 「值」}';

並對此頁面發出getJSON請求,並檢查腳本是否運行得很快。如果速度很快,問題出在您的服務器腳本中。

+0

有沒有辦法通過查詢一次並將其存儲在本地對象中來訪問JSON文件? – 2012-03-06 06:25:52

+0

@AbhishekKumar,使用會話作爲'$ _SESSION ['backup']'是完美的方式,這 – Starx 2012-03-06 06:29:51

+0

你可以分享更多關於$ _SESSION ['備份']。抱歉,我是js – 2012-03-06 06:51:52

3

在請求的整個範圍內有很多事情可能出錯。

這裏有幾個值得注意的地方,你可以檢查瓶頸,從請求到響應。

  • 您的瀏覽器/系統/硬件能夠使用嗎?

    由於此操作是JavaScript,IE6等較舊的瀏覽器,上網本等低功耗系統以及在特定時間運行太多應用程序的弱建立系統,可能會造成後果。

  • 瀏覽器是否立即執行任務?還是推遲了?

    繁忙的JavaScript是這裏的罪魁禍首。 JavaScript是單線程的,太多的操作可能會讓瀏覽器停滯不前,並可能延遲排隊的任務運行。可以發生這種情況的場景的一個示例是,當您的頁面包含過多的JavaScript插件,或者包含編碼不良的代碼時,其中一些甚至可能會使用同步操作。

  • 難道是PHP/JSP/[其他服務器端語言]?

    是的,它可能是。例如,PHP可能會按請求線程化,但其代碼的操作是同步的。如果一行PHP執行時間過長,則這部分延遲。在該行完成之前,服務器將不會響應。

  • 您是否使用多個/嵌套的SQL查詢?

    深入到服務器深處,多個和/或嵌套的SQL查詢,特別是對於常用操作而言,可能並且會導致進一步的延遲。建議是將查詢僅限於應該提取的內容,而不是整個記錄。如果嵌套查詢無法避免,請嘗試使用其他方法檢索該數據。

  • 未優化的函數調用

    這同樣適用於這兩種服務器端和客戶端腳本。過度的操作也可能是造成延誤的原因。確定過度冗餘的代碼併合並/縮短它們。例如,在JS中,可以使用三元操作完成簡單的條件分配操作。

  • 循環太多?

    循環太多也是導致延遲的一個常見原因。 SQL中的一個錯誤是檢索所有行並用PHP計數,而不是使用SQL中內置的COUNT()。這個錯誤是雙重的,你從SQL返回太多的數據,然後你計算/循環PHP中太多的項目。

  • 你在撥號嗎?

    帶寬是必不可少的,因此大小很重要。所以,請將您的回報數據僅限於所需的數據。開發者更喜歡JSON的主要原因是與XML相比,它的尺寸更小,並且標記內容也更多。另外,您還可以使用gzip壓縮來壓縮您的返回數據。

+0

我不知道是否有一種方法來減少從$ .getJSON中讀取的JSON文件的大小? – 2012-03-04 08:57:50

+0

據我所知,從PHP中,'json_encode()'將數據編碼成JSON,它不是非常漂亮,因此已經很緊湊。爲了補充說明,服務器可以使用GZIP進行壓縮傳輸,也就是說,如果瀏覽器支持檢索GZIPped內容。 – Joseph 2012-10-10 06:37:14