JS Json разбор более быстрой альтернативы - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть чип esp32 (32-битный микроконтроллер с WiFi-связью), который записывает важные данные в локальную память.Мне нужно отправить эти данные пользователю веб-браузера для рисования диаграммы.Это около 1 МБ в час, и мне нужны графики с данными за 5 дней (до 120 МБ необработанных данных).

На данный момент я написал сервер http и анализатор JSON.Когда пользователь запрашивает данные, необработанные данные из памяти считываются и анализируются в JSON для шлифования.Анализ необработанных данных в текстовом формате json приводит к расширению каждого 1 МБ (необработанного) до примерно 2 МБ (текстового).

Локальный браузер ожидает файл JSON и, используя JS JSON.parse (this.responseText), анализирует его в объект для добавления в массив.

JSON.parse занимает много времени!Около 5 секунд на каждые 2 МБ (1 МБ необработанного).

function loadChartData(address) {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = loadChartDataReady;
    xhttp.open("GET", "http://192.168.1.1/"+address, true);
    xhttp.send();
}
function loadChartDataReady() {
    if (this.readyState != 4) return;
    if (this.status != 200) { return; }
    try {
        var json = JSON.parse(this.responseText);
        for(var i = 1; i < json.length; i++) {
            var obj = json[i];
            series.splice(i - 1, 0, {ts: obj[0], time: obj[1], s: obj[2], m: obj[3], on: obj[4]} );
        }
        updateChart();
    } catch(err) {
        console.log("error: " + err);
    }
}

Я брожу, что я могу сделать для ускорения моего кода с точки зрения используемой памяти и времени выполнения.

  • Можно ли как-то разобрать необработанные данные в javascript?
  • Могу ли я изменить JSON.parse на какую-то другую функцию для ускорения?
  • Можно ли изменить XMLHttpRequest на что-то другое для начала анализа данных, пока они еще отправляются?
...