#baza
Во первых, вы попали на канал про Node.js, где основной темой обсуждения будет этот самый хост для JavaScript'а. Во вторых, я думаю, что вы уже имеете общее представление о Fastify, как минимум знаете, что это фреймворк для Node.js. По смыслу схож с Express, но во много другой. В течении следующих постов я постараюсь раскрыть, в чем же отличия, почему я последние 4 года выбираю именно его для всех своих серверных проектов, посмотрим на его составные части, а также экосистему вокруг него.
В 2016 году Маттео Коллина (Matteo Collina), в тот момент уже один из активных членов Node.js сообщества, недовольный состоянием популярных на тот момент Express и Koa приступил к написанию собсвеного решения. Прежде, он уже был известен, как один из авторов pino - быстрого логгера для Node.js и своим выступлением The Cost of Logging.
Теперь пришло время ускорять и web-сервер. После обсуждения был найден "убийца перформенса" -
JSON.stringify, с помощью которого осуществлялась сериализация и десереализация. Так, Мануэль Спиголон (Manuel Spigolon) начал реализацию первого важного компонента Fastify fast-json-stringify. В конечном итоге получилось решение превосходящее по скорости JSON.stringify в два раза. В тоже время на вооружение было взято быстрое решение для HTTP роутинга find-my-way от Томаса Ведова (Tomas Della Vedova), реализующее быструю маршутизацию по строкам вида
'/example/near/:lat-:lng/radius/:r' при помощи сжатого префиксного дерева. Томас, будучи одним из первых ментейнеров, собрал и внедрил все важные кусочки во фреймворк: мощную систему плагинов avvio (по верх которой можно было переиспользовать мидлвары из Express), pino в качестве логгера и fast-json-stringify как сериализатор.И доведя все части до ума в 2018 году, команда выкатила v1.0.0 и статью "Fastify goes LTS with 1.0.0!". Основным заявлением было наличие большого количества готовых плагинов, простота и скорость. Что актуально и по сей день.
На самом деле каждый кусочек Fastify заслуживает отдельного разбора. Что, я и планирую покрыть в следующих постах. А также делать небольшие обзоры на новости новых версий интересных мне пакетов Node.js.
Какая часть Fastify вам интереснее всего? С какими проблемами при изучении и использовании вы сталкивались? Буду рад комментариям и раскрыть интересные топики в следующих постах!
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
The Cost of Logging - Matteo Collina, nearForm
The Cost of Logging - Matteo Collina, nearForm
Sunday morning and your phone rings: production is down. After two hours, you manage to solve it: you could have fixed it in one minute if you had the right information from the start. First thing in the morning…
Sunday morning and your phone rings: production is down. After two hours, you manage to solve it: you could have fixed it in one minute if you had the right information from the start. First thing in the morning…
🔥3
v5.2.0
#news
Случился релиз минорной версии
👉 Добавлен тип для метода
👉 Поправлен краш сервера, когда отсутствует заголовок
Сама релизная политика Fastify такая, что если есть хоть один коммит, помеченный по Conventional Commits как
#news
Случился релиз минорной версии
v5.2.0. Никаких глобальных изменений не случилось. Полный чейнджлог можно посмотреть на страничке релиза.addHttpMethod, который позволяет опредилить кастомные HTTP глаголы к стандартным (например, видел новый глагол SEARCH) #5811host #5892Сама релизная политика Fastify такая, что если есть хоть один коммит, помеченный по Conventional Commits как
feature, то текущий лид-мейнтейнер поднимает минорную версию и релизит пакет.Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release v5.2.0 · fastify/fastify
What's Changed
docs: add HeroDevs mentions to README and LTS docs by @AndreAngelantoni in #5730
test: migrated reply-early-hints.test.js from tap to node:test by @Tony133 in #5803
chore: Bump ...
docs: add HeroDevs mentions to README and LTS docs by @AndreAngelantoni in #5730
test: migrated reply-early-hints.test.js from tap to node:test by @Tony133 in #5803
chore: Bump ...
🔥2
Плагины. Регистрация
Когда я спрашиваю на собеседовании "Что такое Fastify?", то чаще всего получаю ответ, что это как Express, только побыстрее. В целом, ответ-то валидный, хотя мне хочется услышать немного другое.
Fastify - это эффективная система плагинов над http сервером. И эти самые плагины являются ключом к организации кода, точками расширений и переиспользуемости. Что могут делать плагины:
Регистрировать другие плагины внутри себя
➖ Создавать новую область инкапсуляции, наследуя от родительской области. Это отдельная крутая фича, которую мы рассмотрим позже
➖ Принимать
➖ Создавать область роутинга, невешивая хуки и префиксы на все дочерние роуты
Все начинается с корневого приложения, куда мы можем зарегистрировать с помощью метода
Без вызова done плагин не прейдет в фазу "зарегистированного" и это одна из причин, полчему сейчас более привычен promise-based стиль плагинов с
Когда я спрашиваю на собеседовании "Что такое Fastify?", то чаще всего получаю ответ, что это как Express, только побыстрее. В целом, ответ-то валидный, хотя мне хочется услышать немного другое.
Fastify - это эффективная система плагинов над http сервером. И эти самые плагины являются ключом к организации кода, точками расширений и переиспользуемости. Что могут делать плагины:
Регистрировать другие плагины внутри себя
options и использовать их для настройки Все начинается с корневого приложения, куда мы можем зарегистрировать с помощью метода
register первые плагины.
app.register(function noError(fastify, opts, done) {
app.log.info('Registering my first plugin.')
done() // можно использовать колбек done для передачи управления
})
app.register(function (fastify, opts, done) {
app.log.info('Registering my second plugin.')
try {
throw new Error('Something bad happened!')
done() // это может быть полезно для перехвата исключений
} catch (err) {
done(err) // ну и имеет классический стиль для ноды передачи ошибок
}
})
Без вызова done плагин не прейдет в фазу "зарегистированного" и это одна из причин, полчему сейчас более привычен promise-based стиль плагинов с
async/await
app.register(async function myPlugin(fastify, options) {
app.log.info(options.myplugin.first) // здесь у нас async плагин
}, function options(parent) {
// вторым аргументом можно передать как сразу объект конфигов
// так и функцию возвращающую объект
return ({
prefix: '1',
myPlugin: {
first: 'option',
}
})
})
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Что у вас по системе модулей? 🍾
Anonymous Poll
46%
Честный ESM
15%
CommonJS с require
23%
Бандлим код
15%
import'ы в коде, require после траспайлинга
The Definitive Guide for NodeJs in Enterprise (Interactive).pdf
8 MB
Бесплатная книга про Fastify и Plarformatic https://www.platformatichq.com/reports/the-node-book
🔥10
