Подтвердить что ты не робот

Почему meteor.js синхронно?

Не влияет ли код на эффективность, будучи синхронным? Почему синхронно кодируется выигрыш? Я нашел эти две ссылки в следующих исследованиях: http://bjouhier.wordpress.com/2012/03/11/fibers-and-threads-in-node-js-what-for/, https://github.com/Sage/streamlinejs/

Если целью является предотвращение кода спагетти, то, очевидно, вы можете иметь асинхронный код, например, с streamline.js, который не является пирамидой обратного вызова, правильно?

4b9b3361

Ответ 1

Здесь вы должны различать две вещи:

  • Синхронные функции, такие как node fs.readFileSync, fs.statSync и т.д. Все эти функции имеют Sync в своих именах (*). Эти функции действительно синхронны и блокируются. Если вы их вызываете, вы блокируете цикл событий, и вы убиваете производительность node. Эти функции следует использовать только при инициализации сервера script (или в сценариях командной строки).
  • Библиотеки и инструменты, такие как волокна или streamline.js. Эти решения позволяют писать код в стиле синхронизации, но код, который вы пишете с ними, будет выполняться асинхронно. Они не блокируют цикл событий.

(*) require также блокирует.

Метеор использует волокна. Его код написан в стиле синхронизации, но он не блокируется.

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

25 января 2017 г.. Я создал 3-х элементов для иллюстрации неблокирующих волокон: fiber-does-not-block.js, fiber-sleep- sequential.js, fiber-sleep-parallel.js

Ответ 2

Код не является "синхронным" при использовании чего-то типа streamlinejs. Фактический код будет выполняться асинхронно. Не очень красиво писать много анонимных функций обратного вызова, вот почему это помогает.