2014-01-27 3 views
1

Я создаю приложение, которое должно работать в автономном режиме. Я использую jQuery Mobile, PHP, MySQL и jStorage, чтобы легко использовать HTML5 localStorageAJAX разбор большого количества JSON и магазин в localStorage

Я пытаюсь найти лучший способ загрузить данные на локальное устройство localStorage и использовать его на более поздних этапах без замедления или сбой браузера.

У меня около 5000 записей (500 Кбайт данных) в таблице MySQL, и мне нужно приложение для загрузки всех этих данных, чтобы он мог использоваться на втором этапе в автономном режиме.

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

Сначала установите DATATYPE в "текст", так что JQuery не пытается проанализировать его, а затем просто назначить ему ключ localstorage. вы не можете действительно оптимизировать его намного раньше, чем меньше, чем уменьшать дамп данных. –

+1

Возможно, вы столкнулись с ручьем без весла с точки зрения использования AJAX, но вот идея: http://stackoverflow.com/a/3360510/2191572 – MonkeyZeus

+0

Возможно, это тоже: http://stackoverflow.com/a/15405450/2191572 – MonkeyZeus

ответ

1

(Вы хорошо провели обсуждение в комментариях, но вопрос остается без ответа ...) «для того, чтобы не повесить браузер» нужно разделить данные на более мелкие части и получать каждую часть отдельно

(например, в цикле). В противном случае разбор большого фрагмента JSON может повесить браузер на несколько миллисекунд. Rapidjson не может этого сделать, потому что Rapidjson - это C++, а браузер - JavaScript.

«Чтобы отобразить процент данных», вам необходимо сначала сообщить об этом JavaScript в обозревателе. Опять же, ничего общего с Рапидзоном.

Есть также JavaScript-потоковые JSON-парсеры (например, Clarinet), которые теоретически могут анализировать большой документ JSON в кусках. Это дает вам больше контроля над синтаксическим анализом, ценой большого количества процессора и сложности программирования. Вероятно, вам нужно будет ввести 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 
Смежные вопросы