2014-01-27 74 views
1

我正在構建一個應該能夠脫機工作的應用程序。 我正在使用jQuery Mobile,PHP,MySQL和jStorage爲了方便地使用HTML5 localStorageAJAX解析大量的JSON並存儲在localStorage中

我想弄清楚將數據下載到本地設備localStorage並在稍後階段使用它的最佳方式,而不會減慢速度或者瀏覽器崩潰。

我在MySQL表中有大約5000條記錄(500 Kb的數據),我需要應用程序下載所有這些數據,以便它可以在離線時在第二階段使用。

download_script.php返回JSON格式的所有記錄

{"1":{"1":{"p_bar":"10.30","v_0":"0.0312207306000000","h_vap":"311.78","p_10c":"99.99"}},"2":{"1":{"p_bar":"10.40","v_0":"0.0309405941000000","h_vap":"311.29","p_10c":"0.00"}}, 

我想知道是否有什麼辦法可以優化下面的腳本(例如,爲了不掛的瀏覽器,並可能顯示正在下載數據的百分比)

$.ajax({ 
    url: "download_script.php", 
    cache: false, 
    success: function(big_json_dump){ 
    $.jStorage.set('some_key', big_json_dump); 
} 
}); 

這種方法可以優化,例如使用radpidjson?如何更改它以顯示下載的實時數據百分比?

+1

首先,設置數據類型爲 「文本」,這樣的jQuery不會嘗試解析它,然後將其分配給本地存儲密鑰。除了使數據轉儲更小之外,您無法真正優化它。 –

+1

你可能沒有使用AJAX槳的小溪,但這裏是一個想法:http://stackoverflow.com/a/3360510/2191572 – MonkeyZeus

+0

也許這也是:http://stackoverflow.com/a/15405450/2191572 – MonkeyZeus

回答

1

(你必須在評論一個很好的討論,但問題是沒有答案......)「以不掛瀏覽器」,你需要將數據分割成更小的部分,並分別獲取每一個部分

(例如在一個循環中)。否則,解析一大塊JSON可能會使瀏覽器掛幾毫秒。 Rapidjson無法幫助,因爲Rapidjson是C++並且瀏覽器使用JavaScript。

「顯示數據的百分比」,您需要首先通知瀏覽器的JavaScript關於部件總量。再次,與Rapidjson無關。

還有JavaScript流JSON解析器(如Clarinet),理論上它可以解析大塊JSON文檔。這使您可以更多地控制解析,但代價是很多CPU和編程複雜性。您可能需要引入Web Worker或閒置時間來保持瀏覽器的響應。但是,如果您使用Web Worker,則可以在其中執行標準JSON.parse:http://igorminar.github.io/webworker-json-perf/; http://blog.softwareispoetry.com/2013/05/using-web-workers-to-jsonparse-large.html

1

分頁的結果,並在一個循環中執行$.ajax

var total_records = 5000; // get this number to the browser somehow. 
var per_page = 75; 
var total_pages = Math.floor(total_records/per_page); 

for(var i = 0; i < total_pages; i++) { 
    $.ajax({ 
     url: "download_script.php", 
     cache: false, 
     data: { page: i }, 
     success: function(big_json_dump){ 
     $.jStorage.set('some_key', big_json_dump); 
    } 
    }); 
} 

進行分頁的PHP /在你的SQL語句:

$page = intval($_GET['page']); 
$from = $page * 50; 
SELECT * FROM my_table LIMIT $from, 50; 
          ^^  ^^ total records to show 
          record_cursor