Рубрики
Без рубрики

Почему каждая бэкэнд разработчик должен изучать Nodejs

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

Автор оригинала: Shyam Seshadri.

У меня есть признание, чтобы сделать – я начал как разработчик Java, когда я присоединился к моему первое рабочее место, Google. Это было не до 2009 года, что я впервые начал играть с JavaScript и 2011 года, когда я впервые играл с Nodejs.

Я очень любил узел в первый раз, когда я работал с ним по разным причинам, в том числе, но не ограничиваясь:

  • Это JavaScript, который делает его сжатым и четким
  • Однопоточный по природе, что позволяет легко рассуждать по коду
  • Асинхронный по умолчанию

Это последний, который я считаю критическим, что изменилось, как я думаю о коде в целом. Дело в том, что когда вы кодируете в Java или Python, вы по умолчанию в конечном итоге с подаптимам, если вы не проводите время, думая об этом.

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

teams = teamsDb.getTeams();
for (var i = 0; i < teams.size(); i++) {
    team = teams.get(i);
    team.setExtraInfo(
    	teamsDb.getTeamExtraInfo(team.getId());
}
return teams;

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

  • Позвоните в БД, чтобы получить дополнительную информацию для команды
  • Блок и дождитесь возврата БД
  • Установите его и переместите на следующий элемент в списке

Это так распространено, и поэтому стандарт, что вы просто не думай об этом во второй раз Отказ

Теперь, почему я говорю, что ты должен Учить узла ? Потому что, в узле поведение по умолчанию неблокирует и асинхронный Отказ На самом деле, очень трудно написать блокировку кода в узле. Так что же приведен приведенный выше пример в узле?

teamsDb.getTeams(function(teams) {
  for (var i = 0; i < teams.size(); i++) {
      team = teams.get(i);
      teamsDb.getTeamExtraInfo(team.getId(),
                function(teamExtra) {
            team.setTeamExtraInfo(teamExtra);
        });
      }
});

Каждый неблокирующий вызов, каждый вызов, который включает в себя сеть ввода/вывода или любой другой ввод/вывод, в конечном итоге принимает функцию обратного вызова, которая будет выполняться, когда будет завершена тяжелая работа. Все функции ориентированы на обратный вызов ( Обещания и дело с обратным вызовом Ада – это тема для другого поста! ), что означает, что каждый раз, когда вы называете функцию, вы вынуждены думать:

  • Это звонок будет возвращаться немедленно, или займет некоторое время?
  • Если этот звонок собирается занять некоторое время, мне нужно ждать, пока он закончится, прежде чем продолжить, или я могу продолжать выполнять другую работу, пока она не закончится?

Я бы утвердовал, что это заставляет вас по умолчанию подумайте параллельному дружелюбному подходу, потому что в ту минуту вы пишете этот код, вы понимаете, что каждый звонок, чтобы получить дополнительную информацию – это вызов БД, и вы можете сделать это параллельно, скорее чем это последовательно. На самом деле, Делать его последовательно, будет сложнее, чем делать это параллельно! Отказ

Это просто небольшой пример того, как узел заставляет вас думать с точки зрения обратных вызовов и асинхронного поведения. Как только вы привыкнете к этой модели, вы можете сделать этот процесс мышления обратно в Java, Python или что-то еще, и будь лучшим программистом! Или вы могли бы быть как я, и просто начнем любить узел и не хочу вернуться!