Фоновая загрузка данных в приложении HTML5 в базу данных браузера - settimeout vs work thread
Знаю это
- Javascript является строго однопоточным, а settimeout не создает новых потоков. Вместо этого следует модель события цикла
- Рабочие потоки - это новые функции HTML5, и его поддержка по-прежнему доступна не во всех браузерах HTML5.
Какой из них мне следует использовать для фоновой загрузки данных? Если у вас есть какой-либо опыт или есть какие-либо данные тестов, пожалуйста, поделитесь
Не уверен, как важно задавать вопросы, но все же для полноты картины я хотел бы отметить, что данные должны быть в формате XML, и для их получения будут задействованы несколько серверных служб. Есть ли уже доступная инфраструктура, которая обслуживает как загрузку данных с браузеров на мобильных устройствах, так и с настольных ПК?
3 ответа
Рабочие потоки пока не поддерживаются во всех основных браузерах, поэтому я не думаю, что будет хорошей идеей включить рабочий поток в ваш дизайн, если вы не хотите поддерживать только самые последние браузеры.
Все вызовы Ajax могут выполняться параллельно, но я думаю, что ваша проблема будет в том, как узнать, что ответ на все вызовы Ajax пришел и данные вставлены / обновлены в базе данных браузера. Один из способов узнать, что все ответы AJAX были обработаны, - это связать все вызовы AJAX. Но это гарантирует, что вы жестко закодируете последовательность вызовов AJAX в вашу кодовую базу. Если это нежелательно, вам понадобится отдельный поток асинхронной проверки, чтобы проверить, все ли вызовы AJAX были обработаны. Вы можете достичь этого, установив флаг для каждого вызова ajax и установив для него значение true, когда ответ был использован. Затем вы продолжите проверять состояние всех флагов в другом потоке (началось использование settimeout).
Мне известны любые существующие фреймворки для такой сложной деятельности, поэтому вам придется самостоятельно писать код для этого. Надеюсь, это помогло бы вам дать направление.
Javascript является однопоточным, но это не означает, что данные не загружаются параллельно. Если вы делаете асинхронный вызов AJAX, вы загружаете данные в фоновом режиме, в то время как остальная часть кода выполняется.
Веб-работники должны выполнять нагрузку на процессор из основного потока. Они не помогут вам получить данные быстрее.
Вот поток, в котором они показывают, как выполнить несколько параллельных вызовов AJAX с помощью JQuery. Параллельные асинхронные запросы Ajax с использованием jQuery.
Единственная причина, по которой я могу использовать рабочий поток, состоит в том, чтобы он постоянно общался с сервером, но в этом случае веб-сокеты - лучшее решение http://www.html5rocks.com/en/tutorials/websockets/basics/
Веб-работники поддерживаются только в IE10+, поэтому вам все равно понадобится запасное решение, если вы хотите поддерживать более старые версии IE. http://msdn.microsoft.com/en-us/library/ie/hh673568(v=vs.85).aspx