Хорошо, у меня проблемы с чем-то.Я хочу создать несколько графиков с CanvasJS, используя данные из одного источника данных.Проблема заключается в том, что я обновляю графики каждые 60 секунд, и когда я запускаю функцию обновления, она вызывает мой внешний JSON один раз для каждого обновляемого графика, что не идеально.Поэтому я пытался помещать вещи в отдельные циклы таймера в setTimeout каждые 60 секунд, но в двух разных функциях, и это работает, но я заметил, что иногда обновляемые данные отстают почти на 2 минуты, примерно на 1 м 50 с или около того.Что тоже не идеально.Мой код с большой краткостью выглядит примерно так ...
var updatedData = {}; // start empty
function updateData() {
$.getJSON("/update.php", function (data) {
updatedData = data; // new data for datapoints
});
}
function makeGraph(dataValue, color) {
// ... bunch of code here for making the graph and setting url's to use
$.getJSON(url, function(data) { // bring in initial data
$.each(data[dataType], function(k,v) {
// handle data for each dataType setting datapoints to be graphed
}
linechart.render(); // create initial chart
});
function updateLineChart() { // ok let's update each chart...
$.when(updateData()).done(function() {
// use updated data for new set of datapoints
linechart.render();// add new data to current chart
}
setTimeout(function() {
updateLineChart(); // run update every 60 seconds
}, 60000);
}
updateLineChart(); // initially run update
}
Это работает просто отлично, но, к сожалению, он вызывает update.php для каждого отображаемого графика, а udpate.php фактически отправляет данные длявсе графики на каждый звонок, поэтому нет необходимости звонить ему 3,4,5 раза или более каждую минуту.Когда он вызывает такие данные, данные обновляются и находятся в пределах 1 минуты или в режиме реального времени, поэтому точность хорошая.
Я повторял это несколько раз, пытаясь избавиться от лишних звонков черезмножество разных методов.То, что я сделал, которое вызывает его только один раз, но с большой вероятностью запаздывающих данных, выглядит так:в режиме реального времени, но я заметил, что это часто почти на две минуты позади.Также для записи я попытался установить дешевые приемы, такие как создание новых дат, проверка соответствия дат с помощью utcSeconds (0) и захват только update.php, если даты не совпадают безрезультатно.Он по-прежнему захватывает файл update.php несколько раз.
Может кто-нибудь придумать, как правильно синхронизировать их, запустив несколько диаграмм и совершив всего один вызов для получения данных?У меня заканчиваются идеи по этому вопросу.