Любые анти-шаблоны nodejs?

Каковы анти-шаблоны node.js, чего вам следует избегать при разработке с помощью node.js?

Опасности, такие как GC, закрытие, обработка ошибок, OO и т.д.

Ответы

Ответ 1

Анти-шаблоны:

Синхронное выполнение:

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

  • fs.renameSync
  • fs.truncateSync
  • fs.statSync
  • path.existsSync
  • ...

Все блокирующие вызовы ввода-вывода и их следует избегать.

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

Недооценка V8:

V8 является базовым интерпретатором JavaScript, который строится на node.js. (Да, spidernode работает!) V8 быстрый, он очень хорош, он точно знает, что он делает. Нет необходимости микро оптимизировать или оценивать V8.

Утечки памяти:

Если вы исходите из сильного фона на основе JavaScript на основе браузера, вам все равно, что утечка памяти из-за того, что срок службы одной страницы колеблется от нескольких секунд до нескольких часов. Где время жизни одного сервера node.js варьируется от нескольких дней до нескольких месяцев.

Утечки памяти - это просто не то, о чем вы думаете, когда приходите с фона на стороне JS-сервера. Очень важно получить сильное понимание утечек памяти.

Некоторые ресурсы:

В настоящее время я сам не знаю, как упреждающе защищать их.

JavaScript

Все анти-шаблоны JavaScript применяются. Главными причинами, по моему мнению, являются JavaScript, подобные C (только для написания процедурного кода) или как С#/Java (подделка классического наследования).

JavaScript следует трактовать как прототипный язык ООП или как функциональный язык. Я лично рекомендую вам использовать новые функции ES5, а также использовать underscore в качестве поясницы. Если вы воспользуетесь этими двумя преимуществами, вы автоматически начнете писать свой код в функциональном стиле, подходящем для JavaScript.

У меня лично нет хорошей рекомендации по написанию правильного прототипического кода ООП, потому что я никогда не получал его.

Модульный код:

node.js имеет отличный оператор require, это означает, что вы можете модулировать весь свой код.

Глобальное состояние не требуется в node.js. На самом деле вам нужно специально перейти global.foo = ..., чтобы поднять его в глобальное состояние, и это всегда анти-шаблон.

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

Код завершен:

Все, что содержится в Code Complete 2, применяется, и я не буду повторять его.