jQuery пульсатор при обработке большого файла
-
11-10-2019 - |
Вопрос
В моем веб -приложении пользователь может генерировать файл CVS, который иногда может получить довольно большую 10+ МБ. Отчет, очевидно, может занять некоторое время, чтобы генерировать. Я хочу отобразить пульсатор для пользователя, пока генерируется отчет, как только им предложено сохранить/запустить, я хочу, чтобы пульсинщик скрылся. Это возможно?
Решение
Нет, на самом деле невозможно обнаружить, когда файл прибывает, и пользователь сохраняет его. Вы в значительной степени застряли, просто обновляете свой пульсатор и предлагаете конфиденциальную ссылку, когда они будут готовы к продолжению.
Если бы это было возможно, то сайты загрузки использовали бы его, чтобы автоматически перейти к списку загрузки, когда вы закончите на целевой странице файла.
Другие советы
Да, как правило, тяжелые операции в JavaScript разделены на куски, а затем вызываются из SetInterval. Тайм -аут удерживает страницу от замораживания.
var csvTxt = "";
var isDone = false;
addPart = function(){
csvTxt += addTextFromLongCalculation();
if(csvTxt > 10000000) isDone = true; // this is an arbitrary example
}
var handle = setInterval(function(){
addPart();
if(isDone){
clearInterval(handle);
}
}, 20);
Я предполагаю, что вы публикуете некоторые данные, генерируя CSV на сервере, устанавливая тип контента и ожидая появления диалога сохранения браузера. Правильный?
В этом случае, я думаю, вы будете разочарованы. Я провожу довольно много времени, пытаясь найти события, которые стреляют в этот точный сценарий, и я не мог понять это. Наконец -то мне пришлось сделать что -то запутанное, как использовать XHR, чтобы опросить статус создания файла. Как только я получил ответ, который хотел, я спрятал пульсатор и попросил CSV.
Быть более ясным:
- Покажите пульсатор
- Используйте XHR, чтобы сообщить серверу для начала генерации CSV
- Используйте XHR, чтобы опросить статус создания CSV
- После завершения создания файла:
- Добавьте невидимый iframe в документ, который указывает на недавно созданный CSV, и пусть сервер добавил к нему заголовок контента.
- Спрячьте пульсировку после короткой задержки (вы можете попытаться сделать время, чтобы пульс был скрыт после того, как окно сохранить файл будет отображаться, но в то время как пользователь взаимодействует с окном). Вы также можете обнаружить событие размытия в окне для скрытия пульсатора, но я уверен, что это не будет очень надежным.