Обновление GUI во время синхронного вызова AJAX - PullRequest
0 голосов
/ 02 января 2012

Я использую Google Appengine для запуска веб-приложения, и у меня возникла небольшая проблема. Мне нужно сгенерировать довольно большой файл CSV и отправить его клиенту. Поскольку максимальный тайм-аут составляет 60 секунд и нет файловой системы для записи, я решил использовать SJAX (я полагаю, синхронный AJAX), чтобы получать данные с сервера порциями, объединять их, а затем отправлять обратно на сервер, где сервер отправляет его обратно клиенту в виде файла CSV. Очень надоедливый.

В любом случае, это занимает очень много времени, поэтому я подумал, что буду использовать индикатор выполнения, который проверяет, сколько чанков было получено, против общего количества. Проблема в том, что, поскольку я использую SJAX, отдельный поток js блокируется. setTimeout() также блокируется. Кто-нибудь знает какой-либо способ обойти это (часть с графическим интерфейсом, я пытаюсь найти лучший способ обработать файл отдельно)?

РЕДАКТИРОВАТЬ: Хотя я ценю, что Шей указал мне правильное направление для решения моей проблемы, мне все еще интересно, есть ли способ угадать эмуляцию многопоточности во время вызова SJAX.

1 Ответ

3 голосов
/ 02 января 2012

Я собираюсь ответить на часть о генерации CSV, так как это коренная причина вашей проблемы.

Вы можете сгенерировать данные, используя очередь задач, и сохранить их в blobstore или Google Cloud Storage. Очередь задач имеет 10-минутный тайм-аут, который, как мы надеемся, должен быть достаточным для генерации данных

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

...