2011-10-11 6 views
1

Я кодирую назад совместимый процесс загрузки файлов для AJAX. В HTML5 есть событие xhr.upload.progress; это было бы альтернативой для браузеров, отличных от XHR2. Я использую расширение APC для отслеживания прогресса.Лучший способ SSE для получения прогресса в загрузке файлов?

Теперь, мой вопрос: что является лучшим методом для запуска пользовательского xhr.upload.progress события? Я планирую использовать SSE для HTML5, но если они не поддерживаются, я не уверен, к чему я должен вернуться.

  1. опрос: непрерывные запросы AJAX для прогресса каждого пару секунд
  2. Long-опрос: по-видимому, лучше, чем опрос? хотя я слышал, что они заставляют сервер замерзать, потому что запросы на самом деле не обрабатываются асинхронно на сервере. Итак, я предполагаю, что мне придется реализовать что-то вроде NodeJS, чтобы этого избежать. Если проблема замерзания была завышена/переоценена, я бы, вероятно, пошел с длинным опросом.
  3. Un-end iframe: iframe кажется хорошей идеей, но я уверен, что с ним проблемы. Замораживает ли сервер как длинный опрос?

Редактировать: Я думаю, вот мои основные проблемы. Какова масштабируемость этих методов AJAX? Может ли EventSource SSE заморозить память сервера? Если да, следует ли мне использовать что-то вроде NodeJS или ScaleStack? И действительно ли накладные расходы сервера имеют значение с панелью загрузки?

ответ

1

Все эти решения требуют от вас работы на стороне сервера, в то время как наилучшим решением будет только клиентская сторона. На данный момент я использую Flash-компонент Uploadify для выполнения этой задачи.

http://www.uploadify.com/

+0

Я в порядке с кодом сервера. – Azmisov

+0

Конечно, но создание большего количества запросов и ответов замедляет первоначальную загрузку. – ZippyV

+1

Правда, но я ищу ответ на свой вопрос, а не альтернативу. – Azmisov

0

Для удобства, вы можете использовать SSE polyfill в качестве запасного варианта: https://github.com/Yaffle/EventSource - вам не придется писать дополнительный код для не-SSE браузеров.

Совершенно другой подход может заключаться в отслеживании прогресса загрузки в JS на стороне клиента. Относительно новые API XHR2 and FormData делают это возможным.