Flot оказывает весь участок за один проход в потоке пользовательского интерфейса. Невозможно показать прогресс без изменения самой библиотеки. Идеальное решение потребует много работы, но, в зависимости от ваших данных, достойная аппроксимация может не потребовать больших усилий.
Например, предположим, что ваш сюжет содержит много серий, и каждый сам по себе делает довольно быстро, но вместе они занимают много времени. В этом случае, если открыть источник и искать Флот для функции дро, вы увидите, что есть простой цикл вызова drawSeries для каждой серии:
function draw() {
CODE BLOCK A
for (var i = 0; i < series.length; ++i) {
executeHooks(hooks.drawSeries, [ctx, series[i]]);
drawSeries(series[i]);
}
CODE BLOCK B
}
Replace, что с (примерно, не проверял это) следующее:
function draw() {
CODE BLOCK A
var i = 0,
drawNextSeries = function() {
drawSeries(series[i]);
if (++i < series.length) {
setTimeout(drawNextSeries, 0);
} else {
CODE BLOCK B
}
};
setTimeout(drawNextSeries, 0);
}
Идея состоит в том, чтобы рисовать каждую серию отдельным вызовом через setTimeout. Нулевая миллисекунда задержки приостанавливает вызов для запуска после любой ожидающей работы, такой как другой JS-код, анимация и т. Д. Поэтому после того, как каждая серия рисует, есть вероятность, что пользовательский интерфейс будет обновлен до следующего розыгрыша.
Опять же, это работает только в том случае, если у вас есть много серий, которые кажутся довольно быстро. Если у вас есть только одна большая серия, вы все равно будете делать что-то подобное, но внутри drawSeries.
По вашему описанию я бы предположил, что флот использует поток пользовательского интерфейса для визуализации графика, чтобы страница оставалась замороженной до тех пор, пока график не был отображен. Адаптация к использованию веб-работника, вероятно, не стоит того. –
Я использую анимированный gif, чтобы показывать пользователям данные графика. Я не знаю, как вы получаете данные, но я использую вызов ajax, и он работает нормально. – Blake
@ FabrícioMatté - возможно, это будет полезно для достаточно большого графика. Я видел случаи на медленных машинах, где довольно простой график занимает 10+ секунд для загрузки, полностью замораживая пользовательский интерфейс, тем временем – Ryley