2014-06-03 2 views
0

Я загрузив большой (многие ГБ) фрагментированное двоичный файл на сервер с помощью HTML5 Files API и т.д.Любые потребности в веб-работнике?

Во многих местах я видел загрузку итерационный куска сделано в отдельном веб-Worker якобы так, что работа не происходит в основной ветке браузера.

Этот подход действительно необходим, хотя по умолчанию XMLHttpRequest#send является асинхронным и, следовательно, будет работать в своей собственной нити? Или это не то, что действительно происходит, и веб-рабочий нужен?

В принципе есть что-нибудь «неоптимальный» с (pusdo кодом):

var blob = file.slice(start, finish); 
var request = new XMLHttpRequest(); 
request.open('POST', url); 
request.onreadystatechange = function(e) { 
    if (request.readyState === 4) { 
     increment start etc 
     sendChunk(); 
    } 
}; 
request.send(blob); 
+0

Не могли бы вы связать некоторые из этих «многих мест»? Из моей интуиции я буду следовать вашим аргументам, что асинхронные задачи происходят в фоновом режиме в любом случае. – Bergi

+0

http://www.html5rocks.com/en/tutorials/file/filesystem-sync/ – Kong

ответ

0

неблокируемого асинхронные запросы могут означать, что появление параллельности смоделировано. чтобы параллельные потоки выполнялись параллельно, вы можете использовать веб-работников.

+1

Но WebWorkers только имитирует параллелизм? – Bergi

0

предположительно, чтобы работа не выполнялась в основной ветке браузера.

No. Сошлемся the article вы связаны между собой:

Как и следовало ожидать, обратные вызовы ушли с синхронным FileReader. Этот упрощает количество разворота обратного вызова при чтении файлов. Вместо этого методы readAs * возвращают файл чтения.

В некоторых случаях синхронный API намного более чист для определенных задач. Меньшие обратные вызовы приятны и, безусловно, делают вещи более читабельными.

Несомненно, запуск и обслуживание асинхронного - это некоторая работа, и вы можете загрузить это в WebWorker. Тем не менее, тяжелая работа (чтение файлов, выполнение сетевых запросов) всегда выполняется в фоновом режиме.

В статье также упоминается, что WebWorkers создает некоторые накладные расходы. Вам нужно не только создать экземпляр рабочего, вам также нужно скопировать все данные, с которыми он должен работать.

+0

Да, «обратные вызовы пропадают с синхронным FileReader» - это значит, что ваш поточный веб-рабочий может заблокировать. Но зачем вообще проходить этот хаоплу? – Kong

+0

Поскольку синхронный код для веб-рабочего проще писать, читать и поддерживать. И достаточно часто вы не хотите делать только IO, но также и некоторые вычисления с результатами, для которых веб-работник действительно окупается. – Bergi

+0

Да, я понял - в основном, я думаю, что я трачу одного из разработчиков Chromium или Spidermonkey, чтобы дать мне ответ, не переходя через исходный код. – Kong

Смежные вопросы