Node.js на стороне браузера или неблокирующий javascript? - PullRequest
0 голосов
/ 11 октября 2011

Я очарован неблокирующими архитектурами. Хотя я не использовал Node.js, я это понял концептуально. Кроме того, я разрабатывал веб-приложение, управляемое событиями, поэтому у меня есть общее представление о программировании событий.

Как вы пишете неблокирующий JavaScript в браузере? Я полагаю, что это должно несколько отличаться от того, как это делает Node. Мое приложение, например, позволяет пользователям загружать огромные объемы данных (сериализованные в JSON). Эти данные анализируются для восстановления состояния приложения. Это тяжелая операция, которая может привести к блокировке браузера на некоторое время.

Я считаю, что использование веб-работников - это один из способов. (Казалось, это был очевидный выбор, однако Node реализует неблокирующую, управляемую событиями архитектуру, которую я считаю без использования Web Workers, поэтому я думаю, что должен быть другой путь.) Я считаю, что таймеры также могут сыграть свою роль. Я читал о TameJS и некоторых других библиотеках, расширяющих язык javascript. Я заинтересован в библиотеках JavaScript, которые используют нативный JavaScript без введения нового синтаксиса языка.

Ссылки на ресурсы, библиотеки и практические примеры являются наиболее ценными.

EDIT:

Узнал больше, и я понимаю, что то, о чем я говорю, подпадает под термин "Фьючерс". JQuery реализует это, однако, он всегда использует XHR для вызова сервера, где сервер выполняет обработку, прежде чем вернуть результат, и то, что я хочу, делает то же самое, не вызывая сервер, где клиент выполняет обработку, но в неблокирующей образом.

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

Ответы [ 2 ]

2 голосов
/ 12 октября 2011

Три два способа выполнения неблокирующей работы в браузере

  • Web Workers . WebWorkers создают новый изолированный поток, в котором вы можете выполнять вычисления, однако поддержка браузера говорит вам, что IE <10 ненавидит вас. </li>
  • если этого не сделать, на клиенте не следует выполнять дорогостоящую работу с блокировкой, отправьте запрос ajax на сервер, чтобы сделать это, а затем верните результаты на сервер.

Плохие мужские темы:

Есть несколько хаков, которые вы можете использовать:

  • эмулировать сращивание времени с помощью setTimeout. По сути, это означает, что после каждого «куска» работы вы предоставляете браузеру некоторое пространство для отклика, вызывая setTimeout(doMore, 10). Это в основном написание вашего собственного планировщика процессов в очень плохой неоптимизированной манере, вместо этого используйте веб-работников
  • создание «нового процесса» путем создания iframe с собственным HTML-документом. В этом iframe вы можете выполнять вычисления, не блокируя при этом ваш собственный HTML-документ от ответа.
0 голосов
/ 11 октября 2011

Что вы подразумеваете под неблокирующим?

Самые длинные операции, Ajax-вызовы, уже неблокирующие (асинхронные)

Если вам нужна какая-то длительная функция длязапустить «где-то», а затем сделать что-то, вы можете позвонить

 setTimeout(function, 0)

и вызвать обратный вызов из функции.

И вы также можете прочитать обещания и здесь также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...