Обновить
64K+

Node.JS *

Среда для запуска JavaScript-приложений

54,81
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Свой веб-сервер на NodeJS, и ни единого фреймворка. Часть 1

Время на прочтение7 мин
Охват и читатели142K
Для многих людей JavaScript ассоциативно связан с обилием разнообразных фреймворков и библиотек. Разумеется, инструменты, которые помогают нам каждый день — это хорошо, но, мне кажется, нужно искать некий баланс между использованием инструментов и прокрастинацией, а также знать, как работают вещи, которыми ты пользуешься. Поэтому, когда я только сел разбираться с NodeJS, мне было особенно интересно написать полноценный веб-сервер, которым я мог бы пользоваться сам.
Читать дальше →

Трудные уроки: пять лет с Node.js

Время на прочтение11 мин
Охват и читатели35K
После пяти лет работы с Node.js я многое понял. Я уже делился некоторыми историями, но в этот раз хочу рассказать о том, какие знания дались труднее всего. Баги, проблемы, сюрпризы и уроки, которые вы можете использовать в собственных проектах!

Базовые концепции


В каждой новой платформе есть свои хитрости, но в данный момент эти концепции для меня вторичны. Разобраться в своём баге — хороший способ гарантированного обучения. Даже если это немного болезненно!

Классы


Когда я только начал работать с Node.js, то написал скрапер. Очень быстро я понял, что если ничего не предпринять, то он будет осуществлять много запросов параллельно. Одно это стало важным открытием. Но поскольку я ещё не полностью усвоил мощь экосистемы, то сел и написал собственный ограничитель параллелизма. Он работал и проверял, что в каждый момент времени активны не более N запросов одновременно.
Читать дальше →

node.js бьет бинарные данные при работе по http из-за кодировки по умолчанию — лечим и ненавидим

Время на прочтение2 мин
Охват и читатели4.3K
Короче, пишу свой прокси-сервер на node.js (это все равно пригодится, но и просто прокси свое применение имеет, мне давно тему спалили, интересно, живо ли это еще)

Прокси на основе методов типа .pipe() мне не подходит – мне надо полные данные через себя пропускать, а так они мимо пройдут. Мне надо скачать данные полностью, обработать и потом отправить.

Написал прокси на сокетах на основе примеров – бьет картинки (скачиваются данные другой длины, чем content-length, причем для маленьких картинок разница меньше, для больших больше)

Переписал на модуле http – все равно бьет, видимость проблемы та же.

Долго ***ся, нигде ничего нет про такую проблему…

Причина – что весь ввод-вывод и с сокетами, и с http – имеет указание кодировки, и даже если ты ее не указываешь (опциональный параметр), там внутри есть какая-то кодировка по умолчанию, и она по умолчанию что-то делает!
Читать дальше →

$PHP не нужен*

Время на прочтение3 мин
Охват и читатели102K

Хорошо известно, что PHP — это мёртвый язык программирования и его 22-летняя экосистема фактически стала бесполезна, когда появился Node и новые асинхронные фреймворки на его основе. Превосходство Node очевидно, потому что все знают, что однопоточные асинхронные программы более лучше по умолчанию. И быстрее.


«Но Саймон! Почему?!", вы, вероятно, прокричите увидев этот текст на экране. И вот почему:


Перспективы трудоустройства


PHP-разработчики не пользуются спросом. По прошествии 22 лет, все компании, использующие PHP, сразу же отказались от него, как только был выпущен Node v0.0.1, потому что этот стек разработки мгновенно стал лучшим. Кроме того, всем известно, что для успешного запуска (забудем про Slack) вам нужно создавать веб-интерфейсы на Node, а данные сохранять в MongoDB.


Иначе просто невозможно добиться успеха.


Приведем немного научных™ фактов, чтобы доказать эти утверждения:
image
$заголовок = ‘PHP-разработчики не могут найти работу чтобы содержать свои семьи’;

Читать дальше →

Cluster + EXPRESS + socket.io без REDIS

Время на прочтение5 мин
Охват и читатели20K
Мне очень понравилась библиотека socket.io. С помощью нее можно легко реализовать realtime-приложения. Она сама выбирает протокол в зависимости от браузера, если необходимо, создает WebSocket.

Это, конечно, все хорошо, но не стоит забывать о том, что Node.js работает в одном потоке. Для этого у нас есть отличный инструмент Cluset.

Передо мной встал вопрос, а можно ли сделать приложения с кластеризацией, но не использовать для этого REDIS? Также для удобства используем EXPRESS.
Читать дальше →

Создание npm пакета React компонентов на базе create-react-app

Время на прочтение3 мин
Охват и читатели18K

В данной публикации мы рассмотрим, как создать npm пакет React компонентов используя create-react-app.

Читать дальше →

Async/await: 6 причин забыть о промисах

Время на прочтение7 мин
Охват и читатели162K
Если вы не в курсе, в Node.js, начиная с версии 7.6, встроена поддержка механизма async/await. Говорят о нём, конечно, уже давно, но одно дело, когда для использования некоей функциональности нужны «костыли», и совсем другое, когда всё это идёт, что называется, «из коробки». Если вы ещё не пробовали async/await — обязательно попробуйте.

image

Сегодня мы рассмотрим шесть особенностей async/await, позволяющих отнести новый подход к написанию асинхронного кода к разряду инструментов, которые стоит освоить и использовать везде, где это возможно, заменив ими то, что было раньше.
Читать дальше →

Unity3d / Android: проверка пользователя на собственном сервере Node.JS

Время на прочтение5 мин
Охват и читатели9.5K
Для реализации проверки пользователя вашего android приложения, созданного в unity3d, на своем node.js сервере, вам понадобится:

Приложение в GooglePlay (опубликованное даже в режиме альфа-тестирования)
— Плагин GooglePlayGames for Unity3D
— Доступ в консоль Google Cloud
— Ваш Node.JS-сервер
— Модуль GoogleApis для node.js: npm install googleapis --save
Читать дальше →

Эволюция на React+Redux

Время на прочтение13 мин
Охват и читатели22K
КДПВ

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

Читать дальше →

Отчет и презентации с Moscow JS в офисе Superjob

Время на прочтение3 мин
Охват и читатели5.2K
В офисе Superjob состоялась встреча JavaScript-разработчиков MoscowJS. Рассказываем, что обсуждали участники, и делимся презентациями.



Александр Савин, Superjob

Трудно переоценить важность тестирования в процессе разработки. Тестирование интерфейсов скриншотами — один из подходов, который не только вовремя сигнализирует о регрессии в CSS, но и позволяет проводить рефакторинг шаблонов и стилей, не меняя тесты, упрощает процесс ревью.
Читать дальше →

The State of Reactive in JS: практический обзор FRP библиотек

Время на прочтение2 мин
Охват и читатели10K
Статья родилась из этого ответа на StackOverflow и переросла в этот блог пост (на английском), но я думаю она не утратила актуальность.

Сейчас очень много шума вокруг Reactive Programming. Я потратил какое-то время на изучение этой дисциплины применимо к JavaScript и Node.js и сложил свое мнение о самых, на мой взгляд, интересных библиотеках.
Читать дальше →

Runtyper — инструмент для проверки типов при выполнении JavaScript кода

Время на прочтение2 мин
Охват и читатели7.3K

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


Runtyper warning example

Читать дальше →

Node.js Streams и реактивное программирование

Время на прочтение4 мин
Охват и читатели13K

В этой статье мы попробуем решить реальную проблему при помощи Node.js Stream и чуточку Reactive Programming. В последнем не уверен – RP, в какой-то мере, "жупел" (как перевести buzzword?) о котором все говорят, но никто не "делает".


Статья рассматривает практический пример и ориентирована на знакомого с платформой читателя, по-этому намеренно не объясняет базовые понятия – если что-то непонятно по Stream API, то стоит обратится в документацию платформы или в какой-нибудь ее пересказ (например, этот).


Начнем с описания проблемы: нам нужно построить “паука” который заберет все данные с “чужого” REST API, как-то их обработает и запишет в “нашу” базу данных. Для удобства моделирования мы опустим детали о конкретных API и базы данных (в реальности, это было API одного известного стартапа связанного с гостиницами и Postgres база данных).

Читать дальше →

Ближайшие события

Прямая трансляция MoscowJS из офиса Superjob

Время на прочтение1 мин
Охват и читатели2.5K
Сегодня в 19:00 по московскому времени в офисе Superjob состоится встреча JavaScript-разработчиков «MoscowJS». Присоединяйтесь к прямой трансляции!


Блог а-ля Хабр, выбор платформы

Время на прочтение5 мин
Охват и читатели15K

В предыдущей серии (Как слямзить Хабр по-быстрому) запустил проект на базе Create React App (CRA). Но это SPA, что не очень подходит, когда требуется индексация в поисковиках. Нужен Server Side Rendering (SSR). И желательно из коробки, а не на коленке. Крайне расточительно тратить ресурсы на самостоятельную разработку базовых технологий. Как выбирать платформу с поддержкой SSR? На практике, конечно, POC. Попробую реализовать CRUD с формой ввода на Material-UI, рассматривая кандидатов: React Starter Kit (RSK), NEXT.js и Electrode (не путать с Electron).


Исходники на GitHub.

Читать дальше →

Node.js в PayPal

Время на прочтение4 мин
Охват и читатели18K
Представляю вашему вниманию перевод статьи Node.js at PayPal, где инженер PayPal, Jeff Harrell, рассказывается о том как PayPal выбирал инструменты для работы с Node.js, сравнивает разработку на Java и Node.js на примере одного и того же продукта, а так же говорит о будущем Node.js в PayPal.

image
Читать дальше →

JVM не такая тяжёлая

Время на прочтение5 мин
Охват и читатели19K
В основном ответ на то, что Clojure — это JVM. Мол, эта хрень такая тяжёлая.

Это появилось на канале ZA Tech в группе Slack несколько недель назад. Во время некоторых выступлений по Clojure спикеры делали такое замечание снова и снова.

По этому поводу я выступил в Slack. Теперь запишу для более широкого чтения и обсуждения.

Предисловие


Я тоже раньше думал, что JVM тяжёлая. Это было в начале 2000-х, в сравнении с PHP. Там были и другие тяжеловесы, вроде .NET и ColdFusion. Были и более лёгкие альтернативы вроде Perl и Python, но я тогда сидел на Windows, так что ActivePerl и ActivePython тоже были несколько тяжеловаты.

Впервые я преодолел свой «страх» перед JVM, когда развернул небольшое производственное приложение JRuby на Heroku. Этот маленький монстрик должен был выполнять только одну задачу в день. Он генерировал ряд PDF'ов, потом загружал их на iSign (сейчас не функционирует) для хранения и распространения. Сам iSign был классическим приложением Rails, которое хостилось на трёх AMI. Этот маленький динозавр на стоковом JVM (за исключением -server -Xmx=512M) производил PDF'ки так быстро, что он буквально убивал трёхнодовый кластер при каждом запуске.

Я по-прежнему думал, что он немного тяжеловат в работе, но влюбился в этого гадкого утёнка.
Читать дальше →

NodeJS фреймворк с синтаксисом Laravel

 (и без лапши в коде)

Время на прочтение3 мин
Охват и читатели34K

Пробежавшись по Хабру с удивлением заметил, что этот фреймворк упомянут только в нескольких дайджестах, хотя по моему мнению заслуживает большего внимания. Ниже будет много кода и совсем немного комментариев к нему. И да, друзья! Это моя первая статья на хабре, просьба сильно не быть и не ругать.

Читать дальше →

Create React App (aka React Scripts) и серверный рендеринг с Redux и Router

Время на прочтение5 мин
Охват и читатели28K

Из комментариев к статье стало понятно, что очень многие люди склоняются в сторону экосистемы Create React App (он же React Scripts). Это вполне разумно, т.к. это самый популярный и простой в использовании продукт (благодаря отсутствию конфигурации и поддержке ведущих людей React-сообщества), в котором, к тому же, есть почти все необходимое — сборка, режим разработки, тесты, статистика покрытия. Не хватает только серверного рендеринга.


В качестве одного из способов в официальной документации предлагается либо вбивать начальные данные в шаблон либо воспользоваться статическими слепками. Первый подход не позволит поисковикам нормально индексировать статичный HTML, а второй — не поддерживает проброс никаких начальных данных, кроме HTML (фраза из документации: this doesn't pass down any state except what's contained in the markup). Поэтому если используется Redux, то придется для рендеринга использовать что-то другое.


Я адаптировал пример из статьи для использования с Create React App, теперь он называется Create React Server и умеет запускать серверный рендеринг командой:


create-react-server --createRoutes src/routes.js --createStore src/store.js
Читать дальше →

Новинки JavaScript: Асинхронные итераторы

Время на прочтение5 мин
Охват и читатели23K

В этом небольшом посте я хочу рассказать об одном интересном предложении (англ. proposal) в стандарт EcmaScript. Речь пойдёт об асинхронных итераторах, о том, что это такое, как ими пользоваться и зачем они вообще нужны простому разработчику.


Асинхронные итераторы, это расширение возможностей обычных итераторов, которые с помощью цикла for-of/for-await-of позволяют пробежать по всем элементам коллекции.

Читать дальше →