2014-01-27 43 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