Дайджест за 2025-06-16 - 2025-06-20
A new way to style gaps in CSS
Пост в блоге Хрома про новые возможности стилизации отступов в CSS. Раньше для решения адачи приходилось использовать разные обходные пути, которые ухудшали доступность, читаемость, перформанс и вообще были сложными. Теперь же браузеры в рамках экспериментальных фич завезли стилизацию отступов через column-rule и new-rule
Поиграться в песочнице можно тут. Также в посте указаны ссылки и скриншоты разных демок новой фичи. Выглядит очень круто.
Jest 30: Faster, Leaner, Better
Анонсировал Jest 30. Обычно я про jest не пишу т.к. каждый раз сгораю от работы с ним, однако в 30 релиз завезли улучшения перформанса и несколько полезных плюшек
Остановлюсь на улучшении перформанса. Тот кто профилировал работу jest и пробовал выяснить, почему же сам describe отрабатывает за 100мс, а весь тест-ран за 10 секунд, примерно представляют насколько все плохо у jest с резолвом зависимостей. И вот в 30 jest завезли улучшения резолва модулей, который потребляет меньше памяти и ускоряет запуск тестов. На бенче от Jest сравниваются серверные и клиентские тесты. Серверные стали потреблять в 4 раза меньше памяти и ускорились на половину. Клиентские уменьшили потребление на 20% и ускорились где-то на 10. Итоговые цифры будут отличаться от проекта к проекту. Тесты в Happo ускорились с 14 минут до 9 при обновлении Jest
Part 7: Office Migration from Source Depot to Git, or how I learned to love DevEx.
История от Microsoft Office, как они мигрировали в Git. В статье очень мало технических подробностей. Тем не менее, её достаточно интересно почитать.
Почему вообще MS Office не в Git:
Reactivity is easy
Простая статья про то, как можно улучшить перформанс React-компонента, если правильно использовать реактивность. Автор написла статью на основе ускорения перформанса MUI X Data Grid.
В чем проблема: есть Grid и есть Cell. Cell рендерятся внутри Grid в цикле. Когда cell кликают, она становится сфокусированной и это записывается в стейт. При обновлении стейта ререндерится весь Grid - это плохо
Native Nodejs HMR
Короткая статья про то, как реализовать Hot Module Replacement в свежей Nodejs с помощью новых хуков для модулей.
В NodeJS есть флаг watch, но он перезапускает все приложение при изменении файла. Идея реализации HMR следующая:
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
A new way to style gaps in CSS
Пост в блоге Хрома про новые возможности стилизации отступов в CSS. Раньше для решения адачи приходилось использовать разные обходные пути, которые ухудшали доступность, читаемость, перформанс и вообще были сложными. Теперь же браузеры в рамках экспериментальных фич завезли стилизацию отступов через column-rule и new-rule
Поиграться в песочнице можно тут. Также в посте указаны ссылки и скриншоты разных демок новой фичи. Выглядит очень круто.
Jest 30: Faster, Leaner, Better
Анонсировал Jest 30. Обычно я про jest не пишу т.к. каждый раз сгораю от работы с ним, однако в 30 релиз завезли улучшения перформанса и несколько полезных плюшек
Остановлюсь на улучшении перформанса. Тот кто профилировал работу jest и пробовал выяснить, почему же сам describe отрабатывает за 100мс, а весь тест-ран за 10 секунд, примерно представляют насколько все плохо у jest с резолвом зависимостей. И вот в 30 jest завезли улучшения резолва модулей, который потребляет меньше памяти и ускоряет запуск тестов. На бенче от Jest сравниваются серверные и клиентские тесты. Серверные стали потреблять в 4 раза меньше памяти и ускорились на половину. Клиентские уменьшили потребление на 20% и ускорились где-то на 10. Итоговые цифры будут отличаться от проекта к проекту. Тесты в Happo ускорились с 14 минут до 9 при обновлении Jest
Part 7: Office Migration from Source Depot to Git, or how I learned to love DevEx.
История от Microsoft Office, как они мигрировали в Git. В статье очень мало технических подробностей. Тем не менее, её достаточно интересно почитать.
Почему вообще MS Office не в Git:
Reactivity is easy
Простая статья про то, как можно улучшить перформанс React-компонента, если правильно использовать реактивность. Автор написла статью на основе ускорения перформанса MUI X Data Grid.
В чем проблема: есть Grid и есть Cell. Cell рендерятся внутри Grid в цикле. Когда cell кликают, она становится сфокусированной и это записывается в стейт. При обновлении стейта ререндерится весь Grid - это плохо
Native Nodejs HMR
Короткая статья про то, как реализовать Hot Module Replacement в свежей Nodejs с помощью новых хуков для модулей.
В NodeJS есть флаг watch, но он перезапускает все приложение при изменении файла. Идея реализации HMR следующая:
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
🔥8❤1
Announcing Rolldown-Vite
Vite меняет сборщик на Rolldown. Rolldown написан на Rust и является частью экосистемы Oxc, в которой есть Oxlint, о котором я недавно писал.
Для удобной миграции сделан отдельный пакет
Основные причины переезда:
- 1 инструмент вместо esbuild+rollup
- Ускорение работы. Rolldown быстрый
- Дополнительные фичи, которые доступны в Rolldown, но недоступны в esbuild+rollup
Как ускоряется сборка в реальных проектах:
- Gitlab - ускорение с 2х с половиной минут до 40 секунд и уменьшение потребления памяти в 100 раз
- Excalidraw ускорил сборку в 16 раз (до 1.4 секунды)
- PLAID inc - также ускорили сборку в 16 раз
- Appwrite ускорили сборку и уменьшили потребление памяти в 4 раза
- Particl ускорили сборку в 10 раз
В общем, если вы используете Vite - рекомендую попробовать. Я свой пет проект постараюсь перевести в ближайшее время.
https://voidzero.dev/posts/announcing-rolldown-vite
#development #javascript #vite #rolldown #esbuild
Vite меняет сборщик на Rolldown. Rolldown написан на Rust и является частью экосистемы Oxc, в которой есть Oxlint, о котором я недавно писал.
Для удобной миграции сделан отдельный пакет
rolldown-vite
. Достаточно его поставить и для большинства проектов никаких больше правок не нужно. Однако, могут быть случаи, когда потребуются ручные правки или когда поведение изменилось. В этом случае поможет гайд по миграцииОсновные причины переезда:
- 1 инструмент вместо esbuild+rollup
- Ускорение работы. Rolldown быстрый
- Дополнительные фичи, которые доступны в Rolldown, но недоступны в esbuild+rollup
Как ускоряется сборка в реальных проектах:
- Gitlab - ускорение с 2х с половиной минут до 40 секунд и уменьшение потребления памяти в 100 раз
- Excalidraw ускорил сборку в 16 раз (до 1.4 секунды)
- PLAID inc - также ускорили сборку в 16 раз
- Appwrite ускорили сборку и уменьшили потребление памяти в 4 раза
- Particl ускорили сборку в 10 раз
В общем, если вы используете Vite - рекомендую попробовать. Я свой пет проект постараюсь перевести в ближайшее время.
https://voidzero.dev/posts/announcing-rolldown-vite
#development #javascript #vite #rolldown #esbuild
void(0)
Announcing Rolldown-Vite
We introduce Rolldown-Vite, a drop-in replacement for Vite that leverages the power of Rolldown for faster builds and reduced memory usage. Try it out today!
🔥14❤2
Отзыв на обучение в Стратоплане
Продолжаю серию отзывов про обучение в Стратоплане. На этот раз отзыв на модуль "Работа с людьми".
Начнем с прикольных вещей - вы знали, что прерывать задачу может быть эффективнее, чем ее завершать?
В психологии есть Эффект Зейгарник-Овсянкиной. Его суть в том, что когда мы прерываем действие, не достигая результата, то внутри нас возникает острая потребность в завершении действия.
Как вообще "открыли" этот эффект - взяли 2 группы людей и дали им задачи на математику, логику или усидчивость. Одна группа завершила свои задачи, а вторую группу прервали. Оказалось, что спустя перерыв, вторая группа намного лучше помнила свои задачи.
Например, вы пишете код для пет-проекта. Есть разные подходы к реализации фичей в пет-проекте - вайб-кодить, сделать план на день, делать их в перерывах и тд и тп. Тут важно не устать и не потерять мотивацию т.к. делать пет-проект, когда тебе не хочется его делать - это не круто.
Как правило, хорошей практикой считается сделать план на текущую итерацию, завершить его и пойти дальше. Таким образом будет получен какой-то цельный кусок задачи.
Но, если текущая итерация не будет завершена и вы прервете выполнение, то вы потом еще долго будете думать об этой задаче. И на следующий день будете все еще в контексте задачи и быстро ее завершите.
Это и есть Эффект Зейгарник-Овсянкиной. Его можно использовать осознанно. Если есть какая-то задача, которая вам не особо нравится, то вместо того, чтоб завершать текущую итерацию полностью, следует остановиться на стадии "почти готово, еще буквально пару вещей". Таким образом вы зафиксируете у себя в голове эту задачу и потом с легкостью вернетесь в контекст и будете довольны возвращением.
Можно использовать и в обратную сторону - если вы знаете, что какой-то проект надо отложить, то завершите текущий юнит работы и спокойно отложите. Если вы прерветесь на середине, то еще долго не сможете выкинуть его из головы. Это верно и для смены задач - если к вам прилетела новая срочная задача, которую нужно сделать вчера и все с этим согласны - лучше завершить текущую работу до какого-то логического завершения.
Всегда интересно узнать про то, что ты много раз наблюдал, но не замечал - когда отходишь от чего-то интересного и незавершенного и потом постоянно думаешь об этом, а потом возвращаешься и как будто не прерывался. Это могут быть и пет-проекты, и рабочие задачи, и игры (в последний раз я так играл в Age of Wonders 4 - к сожалению нельзя играть 12 часов в сутки, поэтому приходилось прерываться прямо по середине сценария, но возвращаться было очень легко)
Еще из прикольных вещей с обучения: лайфхак для карьерного роста:
- Берете успешное резюме с должности, на которую вы претендуете
- Пишете свое честное резюме
- Смотрите разницу - это то, куда вам надо расти
В целом, в поиске разницы между состояниями А (текущая должность) и Б (желаемая должность) нет ничего нового, но подход с резюме одновременно простой и интересный.
Из того, что не понравилось в модуле: модель Батерейка и шкалы мотивации.
Модель Батарейка - если вы когда то видели ретроспективу, где в начале надо указать свой "заряд" батарейки - то вы в целом понимаете что это. Но, оказывается, есть более менее описанная модель мотивации "Батарейка". Проблема в ней в том, что непонятно как её использовать т.к. все нормальные люди имеют заряд 30-50%, а остальные - либо выдающиеся люди, либо какие-то явные нарушения. Когда разбирались в примерах, оказалось что можно быть по поведению на 60+, а внутри 30-, хотя батарейка основывается на поведении. Короче, вообще не понял как использовать
Также была дана модель для развития сотрудников через 2 шкалы: шкала компетенций и шкала мотиваций. Обе шкалы от 0 до 10. Почему обе шкалы равнозначны и как сравнивать мотивации людей - непонятно. Цифры дают ощущение, что это какая-то строгая модель - но это не так. Лучше бы просто давали шкалы в виде классификаций - эксперт, опытный, новичок.
#stratoplan #note
Продолжаю серию отзывов про обучение в Стратоплане. На этот раз отзыв на модуль "Работа с людьми".
Начнем с прикольных вещей - вы знали, что прерывать задачу может быть эффективнее, чем ее завершать?
В психологии есть Эффект Зейгарник-Овсянкиной. Его суть в том, что когда мы прерываем действие, не достигая результата, то внутри нас возникает острая потребность в завершении действия.
Как вообще "открыли" этот эффект - взяли 2 группы людей и дали им задачи на математику, логику или усидчивость. Одна группа завершила свои задачи, а вторую группу прервали. Оказалось, что спустя перерыв, вторая группа намного лучше помнила свои задачи.
Например, вы пишете код для пет-проекта. Есть разные подходы к реализации фичей в пет-проекте - вайб-кодить, сделать план на день, делать их в перерывах и тд и тп. Тут важно не устать и не потерять мотивацию т.к. делать пет-проект, когда тебе не хочется его делать - это не круто.
Как правило, хорошей практикой считается сделать план на текущую итерацию, завершить его и пойти дальше. Таким образом будет получен какой-то цельный кусок задачи.
Но, если текущая итерация не будет завершена и вы прервете выполнение, то вы потом еще долго будете думать об этой задаче. И на следующий день будете все еще в контексте задачи и быстро ее завершите.
Это и есть Эффект Зейгарник-Овсянкиной. Его можно использовать осознанно. Если есть какая-то задача, которая вам не особо нравится, то вместо того, чтоб завершать текущую итерацию полностью, следует остановиться на стадии "почти готово, еще буквально пару вещей". Таким образом вы зафиксируете у себя в голове эту задачу и потом с легкостью вернетесь в контекст и будете довольны возвращением.
Можно использовать и в обратную сторону - если вы знаете, что какой-то проект надо отложить, то завершите текущий юнит работы и спокойно отложите. Если вы прерветесь на середине, то еще долго не сможете выкинуть его из головы. Это верно и для смены задач - если к вам прилетела новая срочная задача, которую нужно сделать вчера и все с этим согласны - лучше завершить текущую работу до какого-то логического завершения.
Всегда интересно узнать про то, что ты много раз наблюдал, но не замечал - когда отходишь от чего-то интересного и незавершенного и потом постоянно думаешь об этом, а потом возвращаешься и как будто не прерывался. Это могут быть и пет-проекты, и рабочие задачи, и игры (в последний раз я так играл в Age of Wonders 4 - к сожалению нельзя играть 12 часов в сутки, поэтому приходилось прерываться прямо по середине сценария, но возвращаться было очень легко)
Еще из прикольных вещей с обучения: лайфхак для карьерного роста:
- Берете успешное резюме с должности, на которую вы претендуете
- Пишете свое честное резюме
- Смотрите разницу - это то, куда вам надо расти
В целом, в поиске разницы между состояниями А (текущая должность) и Б (желаемая должность) нет ничего нового, но подход с резюме одновременно простой и интересный.
Из того, что не понравилось в модуле: модель Батерейка и шкалы мотивации.
Модель Батарейка - если вы когда то видели ретроспективу, где в начале надо указать свой "заряд" батарейки - то вы в целом понимаете что это. Но, оказывается, есть более менее описанная модель мотивации "Батарейка". Проблема в ней в том, что непонятно как её использовать т.к. все нормальные люди имеют заряд 30-50%, а остальные - либо выдающиеся люди, либо какие-то явные нарушения. Когда разбирались в примерах, оказалось что можно быть по поведению на 60+, а внутри 30-, хотя батарейка основывается на поведении. Короче, вообще не понял как использовать
Также была дана модель для развития сотрудников через 2 шкалы: шкала компетенций и шкала мотиваций. Обе шкалы от 0 до 10. Почему обе шкалы равнозначны и как сравнивать мотивации людей - непонятно. Цифры дают ощущение, что это какая-то строгая модель - но это не так. Лучше бы просто давали шкалы в виде классификаций - эксперт, опытный, новичок.
#stratoplan #note
👍21❤7👎3🔥3
A JavaScript Developer's Guide to Go
Недавно я постил ссылку на гайд по C# для JS-разработчиков. Здесь похожий контент, но теперь гайд по Go. Т.к. Go простой язык, то и гайд достаточно короткий - занимает ровно 1 страницу.
Гайд показывает основные концепции и показывает сходства и отличия Go и TS
https://prateeksurana.me/blog/guide-to-go-for-javascript-developers/
#development #javascript #go
Недавно я постил ссылку на гайд по C# для JS-разработчиков. Здесь похожий контент, но теперь гайд по Go. Т.к. Go простой язык, то и гайд достаточно короткий - занимает ровно 1 страницу.
Гайд показывает основные концепции и показывает сходства и отличия Go и TS
https://prateeksurana.me/blog/guide-to-go-for-javascript-developers/
#development #javascript #go
prateeksurana.me
A JavaScript Developer's Guide to Go
A guide for JavaScript developers learning Go through direct comparisons of fundamental concepts between both languages.
🔥18👍4
Дайджест за 2025-06-23 - 2025-06-25
Announcing Rolldown-Vite
Vite меняет сборщик на Rolldown. Rolldown написан на Rust и является частью экосистемы Oxc, в которой есть Oxlint, о котором я недавно писал.
Для удобной миграции сделан отдельный пакет rolldown-vite. Достаточно его поставить и для большинства проектов никаких больше правок не нужно. Однако, могут быть случаи, когда потребуются ручные правки или когда поведение изменилось. В этом случае поможет гайд по миграции
Отзыв на обучение в Стратоплане
Продолжаю серию отзывов про обучение в Стратоплане. На этот раз отзыв на модуль "Работа с людьми".
Начнем с прикольных вещей - вы знали, что прерывать задачу может быть эффективнее, чем ее завершать?
A JavaScript Developer's Guide to Go
Недавно я постил ссылку на гайд по C# для JS-разработчиков. Здесь похожий контент, но теперь гайд по Go. Т.к. Go простой язык, то и гайд достаточно короткий - занимает ровно 1 страницу.
Гайд показывает основные концепции и показывает сходства и отличия Go и TS
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
Announcing Rolldown-Vite
Vite меняет сборщик на Rolldown. Rolldown написан на Rust и является частью экосистемы Oxc, в которой есть Oxlint, о котором я недавно писал.
Для удобной миграции сделан отдельный пакет rolldown-vite. Достаточно его поставить и для большинства проектов никаких больше правок не нужно. Однако, могут быть случаи, когда потребуются ручные правки или когда поведение изменилось. В этом случае поможет гайд по миграции
Отзыв на обучение в Стратоплане
Продолжаю серию отзывов про обучение в Стратоплане. На этот раз отзыв на модуль "Работа с людьми".
Начнем с прикольных вещей - вы знали, что прерывать задачу может быть эффективнее, чем ее завершать?
A JavaScript Developer's Guide to Go
Недавно я постил ссылку на гайд по C# для JS-разработчиков. Здесь похожий контент, но теперь гайд по Go. Т.к. Go простой язык, то и гайд достаточно короткий - занимает ровно 1 страницу.
Гайд показывает основные концепции и показывает сходства и отличия Go и TS
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
👍11
Релиз Prettier 3.6
Вышел Prettier 3.6, в котором за экспериментальным флагом можно запустить более быстрый CLI. Этот cli, судя по всему, разрабатывали полтора года, т.к. текущий пост ссылается на предыдущий про ускорение CLI от ноября 2023-го года
На сколько стало быстрее и за счет чего - пока не описано. Еще из обновлений - можно подключить плагин OXC, который подключает быстрый oxc парсер для JS и TS
Кроме этого сделаны различные доработки в разных языках. Если смотреть на JS и TS, то часть изменений это поддержка нового синтаксиса или депрекрейт экспериментального, а часть, как обычно, стабилизация и улучшение единообразия работы форматтера - то комментарии, то отступы в каких-то эдж-кейсах вставали не одинаково.
https://prettier.io/blog/2025/06/23/3.6.0
#development #javascript #prettier #releaseNotes #performance
Вышел Prettier 3.6, в котором за экспериментальным флагом можно запустить более быстрый CLI. Этот cli, судя по всему, разрабатывали полтора года, т.к. текущий пост ссылается на предыдущий про ускорение CLI от ноября 2023-го года
На сколько стало быстрее и за счет чего - пока не описано. Еще из обновлений - можно подключить плагин OXC, который подключает быстрый oxc парсер для JS и TS
Кроме этого сделаны различные доработки в разных языках. Если смотреть на JS и TS, то часть изменений это поддержка нового синтаксиса или депрекрейт экспериментального, а часть, как обычно, стабилизация и улучшение единообразия работы форматтера - то комментарии, то отступы в каких-то эдж-кейсах вставали не одинаково.
https://prettier.io/blog/2025/06/23/3.6.0
#development #javascript #prettier #releaseNotes #performance
prettier.io
Prettier 3.6: Experimental fast CLI and new OXC and Hermes plugins! · Prettier
This release includes several important feature additions that we're excited to share with you.
👍11
Ecma International approves ECMAScript 2025: What’s new?
25 июня зафиксировали стандарт ECMAScript 2025.
Что зафиксировали: импорт-атрибуты (нужны для JSON-модулей), хелперы для итераторов, новые методы Set, немного улучшили RegExp, добавили
Import attributes
Добавили в язык возможность импортировать не JS код. Для этого понадобилось добавлять синтаксис, который бы объяснял движку или рантайму, что сейчас будет импорчено
Хелперы для итераторов
Для массивов есть удобные методы, а для итераторов - нет. Решили исправить эту несправедливость и перенесли часть методов на итераторы
Адаптированные для итератора методы
-
-
-
-
-
-
-
-
Также сделали аналоги
-
-
Еще сделали удобный метод для преобразования итератора в массив
Новые методы Set
- Создание нового сета из двух существующих:
-
-
-
-
- Определение отношения наборов:
-
-
-
Улучшения RegExp
Флаги теперь можно применять не ко всему RegExp, а к отдельным группам
Можно использовать одинаковые имена для групп
Promise.try
Если функция
Работа с 16-битными числами
По дефолту числа в JS представлены 64-битными числами с плавающей точкой. Но есть кейсы, когда необходимо вести все вычисления в 16 или 32-битных числах. В JS добавили разные хелперы для работы с такими числами, например
https://2ality.com/2025/06/ecmascript-2025.html
#development #javascript #ecmascript #releaseNotes
25 июня зафиксировали стандарт ECMAScript 2025.
Что зафиксировали: импорт-атрибуты (нужны для JSON-модулей), хелперы для итераторов, новые методы Set, немного улучшили RegExp, добавили
Promise.try
и поддержки 16-битных чисел с плавающей точкойImport attributes
Добавили в язык возможность импортировать не JS код. Для этого понадобилось добавлять синтаксис, который бы объяснял движку или рантайму, что сейчас будет импорчено
import configData1 from './config-data.json' with { type: 'json' };
// Dynamic import
const configData2 = await import(
'./config-data.json', { with: { type: 'json' } }
);
Хелперы для итераторов
Для массивов есть удобные методы, а для итераторов - нет. Решили исправить эту несправедливость и перенесли часть методов на итераторы
const arr = ['a', '', 'b', '', 'c', '', 'd', '', 'e'];
assert.deepEqual(
arr.values() // creates an iterator
.filter(x => x.length > 0)
.drop(1)
.take(3)
.map(x => `=${x}=`)
.toArray()
,
['=b=', '=c=', '=d=']
);
Адаптированные для итератора методы
-
iterator.filter(filterFn)
-
iterator.map(mapFn)
-
iterator.flatMap(mapFn)
-
iterator.some(fn)
-
iterator.every(fn)
-
iterator.find(fn)
-
iterator.reduce(reducer, initialValue?)
-
iterator.forEach(fn)
Также сделали аналоги
slice
-
iterator.drop(limit)
возвращает новый итератор без первых limit
значений (по сути slice(limit)
)-
iterator.take(limit)
возвращает новый итератор с первыми limit
значениями (по сути slice(0, limit)
)Еще сделали удобный метод для преобразования итератора в массив
iterator.toArray()
Новые методы Set
- Создание нового сета из двух существующих:
-
Set.prototype.intersection(other)
- пересечение - только те значения, которые есть в обоих наборах-
Set.prototype.union(other)
- объединение - значение из обоих наборов-
Set.prototype.difference(other)
- позволяет достать множество, которое получится если из множества А убрать все элементы множества Б -
Set.prototype.symmetricDifference(other)
- позволяет достать множество, которое содержит элементы которые входят только в одно из множеств- Определение отношения наборов:
-
Set.prototype.isSubsetOf(other)
- является ли набор А - подмножеством набора Б-
Set.prototype.isSupersetOf(other)
является ли набор А - надмножеством набора Б-
Set.prototype.isDisjointFrom(other)
- возвращает true, если у множеств нет пересеченийassert.deepEqual(
new Set(['a', 'b', 'c']).union(new Set(['b', 'c', 'd'])),
new Set(['a', 'b', 'c', 'd'])
);
assert.deepEqual(
new Set(['a', 'b', 'c']).intersection(new Set(['b', 'c', 'd'])),
new Set(['b', 'c'])
);
assert.deepEqual(
new Set(['a', 'b']).isSubsetOf(new Set(['a', 'b', 'c'])),
true
);
assert.deepEqual(
new Set(['a', 'b', 'c']).isSupersetOf(new Set(['a', 'b'])),
true
);
Улучшения RegExp
RegExp.escape(text)
позволяет вставить текст в RegExp и быть уверенным, что вставленный текст не сломает RegExpconst regExp = new RegExp(
`(?<!“)${RegExp.escape(text)}(?!”)`,
'gu'
);
Флаги теперь можно применять не ко всему RegExp, а к отдельным группам
/^x(?i:HELLO)x$/.test('xHELLOx') // true
Можно использовать одинаковые имена для групп
const RE = /(?<chars>a+)|(?<chars>b+)/v;
Promise.try
Promise.try
немного упрощает создание промиса с синхронными функциямиreturn Promise.try(() => {
const value = syncFuncMightThrow();
return asyncFunc(value);
});
Если функция
syncFuncMightThrow
бросит исключение, то Promise.try
вернет реджектнутый промис.Работа с 16-битными числами
По дефолту числа в JS представлены 64-битными числами с плавающей точкой. Но есть кейсы, когда необходимо вести все вычисления в 16 или 32-битных числах. В JS добавили разные хелперы для работы с такими числами, например
Math.f16round
делает округление в пространстве 16-битных чиселconsole.log(Math.f16round(2**16)) // Infinity
console.log(2**16) // 65536
https://2ality.com/2025/06/ecmascript-2025.html
#development #javascript #ecmascript #releaseNotes
2Ality
Ecma International approves ECMAScript 2025: What’s new?
On 25 June 2025, the 129th Ecma General Assembly approved the ECMAScript 2025 language specification (press release, GitHub release), which means that it’s officially a standard now. This blog post explains what’s new.
❤30👍3
What's coming to JavaScript
После релиза нового EcmaScript в блоге Deno описали пропозалы, которые обсуждаются сейчас в TC39.
Stage 4
Например, нам нужно открыть файл для чтения и закрыть его после чтения. Вместо ручного закрытия, можно использовать новый
Stage 3
Immutable ArrayBuffer
Как понятно из названия, добавлены методы для преобразования буферов в неизменяемые и наоборот
Stage 2
Random.Seeded - добавляет возможность генерировать псевдо-случайные числа из сида.
Stage 1
В Intl.NumberFormat добавлена возможность выводить висящие нули
Proposal-inspector - попытка стандартизировать сравнение объектов и вывод результата в человекочитаемом виде. Необходимо для стандартизации инструментов разных платформ (Node, Bun) и было бы полезно для тестовых фреймворков
Random Functions - добавляет пространство
https://deno.com/blog/updates-from-tc39
#development #javascript #ecmascript #deno #proposal
После релиза нового EcmaScript в блоге Deno описали пропозалы, которые обсуждаются сейчас в TC39.
Stage 4
using
уже доступен в Chrome, Firefox и Deno. using
позволяет описать использование ресурса, который будет освобожден в конце текущего скоупа. Например, нам нужно открыть файл для чтения и закрыть его после чтения. Вместо ручного закрытия, можно использовать новый
Symbol.dispose
и using
class FileHandle {
constructor(name) {
this.name = name; /* open file... */
}
[Symbol.dispose]() {
console.log(`${this.name} closed`); /* close file */
}
}
function readFile() {
{
using file = new FileHandle("data.txt");
// read from file...
}
// file.[Symbol.dispose]() was called here automatically
}
readFile(); // logs "data.txt closed"
Array.fromAsync
- позволяет собрать массив из асинхронного итератораasync function* generate() {
yield await Promise.resolve(1);
yield await Promise.resolve(2);
}
const nums = await Array.fromAsync(generate()); // [1, 2]
Error.isError
- метод, позволяющий проверять аргумент на то, является ли он инстансом ошибки. Этот метод нужен ровно по той же причине, по которой нужен Array.isArray
- не всегда проверка err instanceof Error
возвращает true
на ошибки т.к. некоторые ошибки могут быть созданы в другом пространстве. Я, честно сказать, плохо помню всю эту тему с Realm'ами в JS, но помню что теоретически ошибка или массив могут быть сгенерированы в другом пространстве и прилететь в текущее.Stage 3
Immutable ArrayBuffer
Как понятно из названия, добавлены методы для преобразования буферов в неизменяемые и наоборот
let buf = new ArrayBuffer(100);
let imm = buf.transferToImmutable();
// buf is now detached (byteLength 0), and imm is a new immutable ArrayBuffer of length 100
console.log(buf.byteLength, imm.byteLength); // 0, 100
// attempting to modify imm will throw a TypeError
imm[0] = 1; // TypeError: Cannot modify an immutable ArrayBuffer
Stage 2
Random.Seeded - добавляет возможность генерировать псевдо-случайные числа из сида.
const prng = new Random.Seeded(42);
for (let i = 0; i < 3; i++) {
console.log(prng.random());
// prints the same sequence on every run given seed 42
}
Number.prototype.clamp
- функция позволяет привести число к промежутку. Например, мы делаем какой-то функционал, где стоимость услуги зависит от объема, но градация скидки за объем начинается от, например, 10 (без скидки), и заканчивается на 1000 (т.е. клиенты с объемом в 1000 и 1100 получат одинаковую скидку за объем). clamp
позволяет как раз привести входное число к нужному диапазону(5).clamp(10, 1000); // 10
(500).clamp(10, 1000); // 500
(1000).clamp(10, 1000); // 1000
(1100).clamp(10, 1000); // 1000
Stage 1
В Intl.NumberFormat добавлена возможность выводить висящие нули
new Intl.NumberFormat("en", {
minimumFractionDigits: 2,
trailingZeroDisplay: "auto",
})
.format(1.5); // "1.50"
Proposal-inspector - попытка стандартизировать сравнение объектов и вывод результата в человекочитаемом виде. Необходимо для стандартизации инструментов разных платформ (Node, Bun) и было бы полезно для тестовых фреймворков
Random Functions - добавляет пространство
Random
с вспомогательными функциями, которые обычно пишутся на коленке в каждом проекте// Случайное число из диапазона
Random.int(-5, 5); // -1
Random.number(0, 10); // 8
Random.number(0, 5, 0.1); // 1.1 (0.1 - шаг)
// Выберет 2 случайных из массива
const name = Random.take(["Alice", "Bob", "Carol"], 2); // ['Alice', 'Bob']
// Выберет 1 случайный из массива
Random.sample(["Alice", "Bob", "Carol"]); // 'Bob'
// Перемешивание массивов
Random.shuffle([1, 2, 3, 4]); // [4,2,1,3]
const shuffled = Random.toShuffled([1, 2, 3, 4]);
https://deno.com/blog/updates-from-tc39
#development #javascript #ecmascript #deno #proposal
Deno
What's coming to JavaScript | Deno
Here are proposals that were advanced at the last TC39 meeting and what that means for the future of JavaScript.
❤16👍7🔥3
Announcing LogTape 1.0.0
Вышел релиз 1.0.0 библиотеки для логирования LogTape. Выглядит интересно. В фокусе проекта: перформанс, стабильность, интеграция с существующими решениями.
В первую очередь фокусируются на перформансе и возможности писать в консоль, не блокируя приложение. У меня был такой кейс, когда мы уронили прод из-за обильного использования
Также в LogTape сделаны интересные интеграции как с внешними тулами, так и с экосистемой. Интеграции с внешними тулами это интеграции с AWS CloudWatch, Windows Event Log. А для экосистемы сделаны адаптеры для
Пример интеграции с winston
Простая интеграция
Кастомизируемая
В общем, выглядит интересно, стоит присмотреться
https://hackers.pub/@hongminhee/2025/announcing-logtape-1-0
#development #javascript #library #logging
Вышел релиз 1.0.0 библиотеки для логирования LogTape. Выглядит интересно. В фокусе проекта: перформанс, стабильность, интеграция с существующими решениями.
В первую очередь фокусируются на перформансе и возможности писать в консоль, не блокируя приложение. У меня был такой кейс, когда мы уронили прод из-за обильного использования
console.log
- до этого кейса я не задумался над тем, как вывод в консоль может влиять на перформанс приложенияТакже в LogTape сделаны интересные интеграции как с внешними тулами, так и с экосистемой. Интеграции с внешними тулами это интеграции с AWS CloudWatch, Windows Event Log. А для экосистемы сделаны адаптеры для
winston
и pino
- популярных библиотек для логированияПример интеграции с winston
Простая интеграция
/ Quick setup with winston
import "@logtape/adaptor-winston/install";
Кастомизируемая
// Or with custom configuration
import { install } from "@logtape/adaptor-winston";
import winston from "winston";
const logger = winston.createLogger({/* your config */});
install(logger);
В общем, выглядит интересно, стоит присмотреться
https://hackers.pub/@hongminhee/2025/announcing-logtape-1-0
#development #javascript #library #logging
Hackers' Pub
Announcing LogTape 1.0.0
LogTape 1.0.0 has been released, marking a significant milestone for this zero-dependency logging library designed for the modern JavaScript ecosystem. This release emphasizes API stability and introduces high-performance features such as non-blocking sinks…
👍12
Рекомендую вакансию: SkyPro ищет тимлида
Я не размещаю вакансии, рекламу или промо всяких разных материалов т.к. это сразу снизит качество контента - я банально не могу быть уверен в контенте, который мне приносят, а отвечать за него - мне.
Но сегодня я размещаю ссылку на вакансию тимлида к моим хорошим знакомым, с которыми меня связывают как профессиональные так и личные отношения. Поэтому в данном случае в контенте я уверен на все 100, что и технически у ребят хорошо, и сами они - крутые ребята :)
Итак, в небольшую команду разработки SkyPro ищут тимлида. У ребят хорошая культура разработки - реальный agile (работа микро-итерациями), реальный CI\CD (реальный - это когда код разработчика постоянно интегрируется в общий бранч, а не только когда все завершено и протестировано и, дай бог, раз в день), пишут автотесты, поощряют автономность и самостоятельность, используют AI везде где можно.
SkyPro занимается образованием в IT. Построили успешный бизнес на идее "войти в айти", как яндекс практикумы, скилбоксы и другие. Команда занимается разработкой платформы для обучения, но также я точно знаю, что команда сама периодически участвуют в доработке своих курсов.
Команда разработки небольшая и автономная - сама решает, что и как надо делать - никаких отделов, согласований, регламентов. Очень круто, что можно вживую видеть как твой вклад влияет на развитие продукта.
По тех. стеку - angular и php.
По ожиданиям от тимлида - в вакансии написано разное, но главное - быть хорошим инженером, быть супер-agile и готовым участвовать в развитии продукта.
Рекомендую ребят. У них можно получить хороший опыт очень быстрой и качественной разработки.
В треде пишите любые вопросы - вам ответит чел из skypro
https://vacancies.skyeng.ru/dev-team-lead-skypro?utm_source=msosnov
#note
Я не размещаю вакансии, рекламу или промо всяких разных материалов т.к. это сразу снизит качество контента - я банально не могу быть уверен в контенте, который мне приносят, а отвечать за него - мне.
Но сегодня я размещаю ссылку на вакансию тимлида к моим хорошим знакомым, с которыми меня связывают как профессиональные так и личные отношения. Поэтому в данном случае в контенте я уверен на все 100, что и технически у ребят хорошо, и сами они - крутые ребята :)
Итак, в небольшую команду разработки SkyPro ищут тимлида. У ребят хорошая культура разработки - реальный agile (работа микро-итерациями), реальный CI\CD (реальный - это когда код разработчика постоянно интегрируется в общий бранч, а не только когда все завершено и протестировано и, дай бог, раз в день), пишут автотесты, поощряют автономность и самостоятельность, используют AI везде где можно.
SkyPro занимается образованием в IT. Построили успешный бизнес на идее "войти в айти", как яндекс практикумы, скилбоксы и другие. Команда занимается разработкой платформы для обучения, но также я точно знаю, что команда сама периодически участвуют в доработке своих курсов.
Команда разработки небольшая и автономная - сама решает, что и как надо делать - никаких отделов, согласований, регламентов. Очень круто, что можно вживую видеть как твой вклад влияет на развитие продукта.
По тех. стеку - angular и php.
По ожиданиям от тимлида - в вакансии написано разное, но главное - быть хорошим инженером, быть супер-agile и готовым участвовать в развитии продукта.
Рекомендую ребят. У них можно получить хороший опыт очень быстрой и качественной разработки.
В треде пишите любые вопросы - вам ответит чел из skypro
https://vacancies.skyeng.ru/dev-team-lead-skypro?utm_source=msosnov
#note
vacancies.skyeng.ru
Доступные вакансии в Skyeng — найди свое призвание!
Здесь вы можете найти все доступные на данный момент вакансии в Skyeng!
👍7
Дайджест за 2025-06-30 - 2025-07-04
Релиз Prettier 3.6
Вышел Prettier 3.6, в котором за экспериментальным флагом можно запустить более быстрый CLI. Этот cli, судя по всему, разрабатывали полтора года, т.к. текущий пост ссылается на предыдущий про ускорение CLI от ноября 2023-го года
На сколько стало быстрее и за счет чего - пока не описано. Еще из обновлений - можно подключить плагин OXC, который подключает быстрый oxc парсер для JS и TS
Ecma International approves ECMAScript 2025: What’s new?
25 июня зафиксировали стандарт ECMAScript 2025.
Что зафиксировали: импорт-атрибуты (нужны для JSON-модулей), хелперы для итераторов, новые методы Set, немного улучшили RegExp, добавили Promise.try и поддержки 16-битных чисел с плавающей точкой
What's coming to JavaScript
После релиза нового EcmaScript в блоге Deno описали пропозалы, которые обсуждаются сейчас в TC39.
Announcing LogTape 1.0.0
Вышел релиз 1.0.0 библиотеки для логирования LogTape. Выглядит интересно. В фокусе проекта: перформанс, стабильность, интеграция с существующими решениями.
В первую очередь фокусируются на перформансе и возможности писать в консоль, не блокируя приложение. У меня был такой кейс, когда мы уронили прод из-за обильного использования console.log - до этого кейса я не задумался над тем, как вывод в консоль может влиять на перформанс приложения
Рекомендую вакансию: SkyPro ищет тимлида
Я не размещаю вакансии, рекламу или промо всяких разных материалов т.к. это сразу снизит качество контента - я банально не могу быть уверен в контенте, который мне приносят, а отвечать за него - мне.
Но сегодня я размещаю ссылку на вакансию тимлида к моим хорошим знакомым, с которыми меня связывают как профессиональные так и личные отношения. Поэтому в данном случае в контенте я уверен на все 100, что и технически у ребят хорошо, и сами они - крутые ребята :)
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
Релиз Prettier 3.6
Вышел Prettier 3.6, в котором за экспериментальным флагом можно запустить более быстрый CLI. Этот cli, судя по всему, разрабатывали полтора года, т.к. текущий пост ссылается на предыдущий про ускорение CLI от ноября 2023-го года
На сколько стало быстрее и за счет чего - пока не описано. Еще из обновлений - можно подключить плагин OXC, который подключает быстрый oxc парсер для JS и TS
Ecma International approves ECMAScript 2025: What’s new?
25 июня зафиксировали стандарт ECMAScript 2025.
Что зафиксировали: импорт-атрибуты (нужны для JSON-модулей), хелперы для итераторов, новые методы Set, немного улучшили RegExp, добавили Promise.try и поддержки 16-битных чисел с плавающей точкой
What's coming to JavaScript
После релиза нового EcmaScript в блоге Deno описали пропозалы, которые обсуждаются сейчас в TC39.
Announcing LogTape 1.0.0
Вышел релиз 1.0.0 библиотеки для логирования LogTape. Выглядит интересно. В фокусе проекта: перформанс, стабильность, интеграция с существующими решениями.
В первую очередь фокусируются на перформансе и возможности писать в консоль, не блокируя приложение. У меня был такой кейс, когда мы уронили прод из-за обильного использования console.log - до этого кейса я не задумался над тем, как вывод в консоль может влиять на перформанс приложения
Рекомендую вакансию: SkyPro ищет тимлида
Я не размещаю вакансии, рекламу или промо всяких разных материалов т.к. это сразу снизит качество контента - я банально не могу быть уверен в контенте, который мне приносят, а отвечать за него - мне.
Но сегодня я размещаю ссылку на вакансию тимлида к моим хорошим знакомым, с которыми меня связывают как профессиональные так и личные отношения. Поэтому в данном случае в контенте я уверен на все 100, что и технически у ребят хорошо, и сами они - крутые ребята :)
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
❤4🔥3
Релиз Deno 2.4
Вышел Deno 2.4. Очень много работы над developer experience, а также часть фичей вышли из экспериментальных в стабильные
Восстановили
Добавили возможность импортировать не код.
Ранее картинки и другие файлы необходимо было считывать в рантайме
Теперь же можно использовать обычные импорты с атрибутами
Кроме того, можно импортировать и wasm-файлы
Поддержку OpenTelementry сделали стабильной. До этого релиза OpenTelemetry была экспериментальной фичей, включаемой флагом. Теперь дополнительный флаг не нужен - достаточно установить переменную окружения
Добавили флаг
Добавили явный флаг
Добавили
Доработали систему разрешений. В
В Deno 2.3 ввели возможность использовать локальные нпм-пакеты через поле
Кроме этого:
- Улучшили совместимость с nodejs
- Добавили во встроенный линтер поддержку XML и SVG
- Улучшили поддержку tsconfig
- Улучшили свой LSP
https://deno.com/blog/v2.4
#development #javascript #deno #releaseNotes
Вышел Deno 2.4. Очень много работы над developer experience, а также часть фичей вышли из экспериментальных в стабильные
Восстановили
deno bundle
. Это команда, которая собирала приложение в 1 бандл. Работала как для серверных приложений, так и для браузерных. В какой-то момент ее задепрекейтили, теперь снова вернули с esbuild
под капотом. В будущем обещают программное API для создания бандлов.Добавили возможность импортировать не код.
Ранее картинки и другие файлы необходимо было считывать в рантайме
const image = Deno.readFileSync(import.meta.resolve("./image.png"));
const text = await Deno.readTextFile(import.meta.resolve("./log.txt"));
Теперь же можно использовать обычные импорты с атрибутами
import message from "./hello.txt" with { type: "text" };
import bytes from "./hello.txt" with { type: "bytes" };
import imageBytes from "./image.png" with { type: "bytes" };
console.log("Message:", message);
// Message: Hello, Deno!
console.log("Bytes:", bytes);
// Bytes: Uint8Array(12) [
// 72, 101, 108, 108, 111,
// 44, 32, 68, 101, 110,
// 111, 33
// ]
Deno.serve((_req) => {
return new Response(imageBytes, {
status: 200,
headers: {
"Content-Type": "image/png",
"Content-Length": imageBytes.byteLength.toString(),
},
});
});
// Shows image.png at localhost:8000
Кроме того, можно импортировать и wasm-файлы
Поддержку OpenTelementry сделали стабильной. До этого релиза OpenTelemetry была экспериментальной фичей, включаемой флагом. Теперь дополнительный флаг не нужен - достаточно установить переменную окружения
OTEL_DENO=1
Добавили флаг
--preload
для указания кода, который должен запуститься до запуска основного скрипта. Может быть полезно для задания каких-то глобальных настроек или создания глобальных сущностей.Добавили явный флаг
--coverage
для сборки покрытия кода. Вывод coverage в консоли представлен в виде markdown-таблицы, которую легко вставить в любой markdown-документ. Также и benchmark таблицы теперь тоже в markdown формате. Забота о разработчиках, которой нам не хватало :) Добавили
DENO_COMPAT=1
- переменная окружения, которая устанавливает все флаги, сделанные для поддержки работы с package.json
Доработали систему разрешений. В
--allow-net
можно указывать вайлдкарты доменов и пространства сетей CIDR - --allow-net=*.foo.localhost
, --allow-net=192.168.0.128/25
. Также добавили флаг --allow-import
и --deny-import
для разрешения и запретов импортов из определенных источников --deny-import=cdn.jsdelivr.net
В Deno 2.3 ввели возможность использовать локальные нпм-пакеты через поле
patch
. Получили фидбек от сообщества, что patch
может запутать т.к. в npm
это используется по-другому. Поэтому локальные пакеты теперь надо указывать в секции links
Кроме этого:
- Улучшили совместимость с nodejs
- Добавили во встроенный линтер поддержку XML и SVG
- Улучшили поддержку tsconfig
- Улучшили свой LSP
https://deno.com/blog/v2.4
#development #javascript #deno #releaseNotes
Deno
Deno 2.4: deno bundle is back | Deno
Deno bundle is back, alongside the addition of bytes and text imports, stabilized built-in OpenTelemetry, a new --preload flag, simplified dependency management with deno update, and more.
🔥9❤2
Repomix: Pack your codebase into AI-friendly formats
Repomix - библиотека, которая запакует ваш репозиторий в формат, удобный для AI. Собранный документ затем можно кидать в любую LLM как проект, с которым можно работать.
Какой-то магии здесь нет - библиотека буквально формирует огромный файл, где структурировано расписано - какие файлы есть в проекте и какой у них контент. Как нибудь попробую поиграться с этим на пет-проекте.
https://repomix.com
#development #javascript #library #ai
Repomix - библиотека, которая запакует ваш репозиторий в формат, удобный для AI. Собранный документ затем можно кидать в любую LLM как проект, с которым можно работать.
Какой-то магии здесь нет - библиотека буквально формирует огромный файл, где структурировано расписано - какие файлы есть в проекте и какой у них контент. Как нибудь попробую поиграться с этим на пет-проекте.
https://repomix.com
#development #javascript #library #ai
Repomix
Pack your codebase into AI-friendly formats
👍11
Modern Node.js Patterns for 2025
Список современных бест-практисов nodejs в частном блоге. Часть бест-практисов уже "старые", часть - достаточно интересные. В любом случае полезно ознакомиться, возможно найдете что-то для себя
Из банальных советов: используйте ESM, fetch, async await, воркеры для сложных вычислений, кастомные классы ошибок. Менее банальные стоит расписать подробнее.
В основном бест-практисы связаны с использованием внутренних инструментов nodejs, вместо использования внешних библиотек, либо с использованием общих web-стандартов, вместо использования специфичного для nodejs решения.
В nodejs завезли test-runner, теперь можно запускать автотесты без внешних библиотек
В nodejs с самого начала была хорошая поддержка потоков (Streams). Теперь же потоки есть и в Web-стандартах, поэтому пора переходить на работу с ними, делая свой код кросс-платформенным.
Завезли новые удобные флаги для разработки -
Также в nodejs теперь есть возможность ограничивать возможность приложений как в deno. Правда, пока за экспериментальными флагами
В nodejs теперь есть возможность мониторить перформанс, что, опять же, убирает необходимость во внешних библиотеках
Если вам нужно доставлять nodejs-приложение единым файлом, то nodejs теперь умеет делать это сама (опять же - убирается зависимость от внешних тулов)
Также следует использовать новые возможности
https://kashw1n.com/blog/nodejs-2025/
#development #javascript #nodejs
Список современных бест-практисов nodejs в частном блоге. Часть бест-практисов уже "старые", часть - достаточно интересные. В любом случае полезно ознакомиться, возможно найдете что-то для себя
Из банальных советов: используйте ESM, fetch, async await, воркеры для сложных вычислений, кастомные классы ошибок. Менее банальные стоит расписать подробнее.
В основном бест-практисы связаны с использованием внутренних инструментов nodejs, вместо использования внешних библиотек, либо с использованием общих web-стандартов, вместо использования специфичного для nodejs решения.
В nodejs завезли test-runner, теперь можно запускать автотесты без внешних библиотек
В nodejs с самого начала была хорошая поддержка потоков (Streams). Теперь же потоки есть и в Web-стандартах, поэтому пора переходить на работу с ними, делая свой код кросс-платформенным.
Завезли новые удобные флаги для разработки -
--watch
, --env-file
, которые убирают необходимость во внешних библиотеках типа dotenv
и nodemon
Также в nodejs теперь есть возможность ограничивать возможность приложений как в deno. Правда, пока за экспериментальными флагами
# Run with restricted file system access
node --experimental-permission --allow-fs-read=./data --allow-fs-write=./logs app.js
# Network restrictions
node --experimental-permission --allow-net=api.example.com app.js
В nodejs теперь есть возможность мониторить перформанс, что, опять же, убирает необходимость во внешних библиотеках
import { PerformanceObserver, performance } from 'node:perf_hooks';
// Set up automatic performance monitoring
const obs = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.duration > 100) { // Log slow operations
console.log(`Slow operation detected: ${entry.name} took ${entry.duration}ms`);
}
}
});
obs.observe({ entryTypes: ['function', 'http', 'dns'] });
// Instrument your own operations
async function processLargeDataset(data) {
performance.mark('processing-start');
const result = await heavyProcessing(data);
performance.mark('processing-end');
performance.measure('data-processing', 'processing-start', 'processing-end');
return result;
}
Если вам нужно доставлять nodejs-приложение единым файлом, то nodejs теперь умеет делать это сама (опять же - убирается зависимость от внешних тулов)
# Create a self-contained executable
node --experimental-sea-config sea-config.json
Также следует использовать новые возможности
node:diagnostics_channel
. Можно создать канал диагностики, куда можно публиковать события, которые можно затем передавать в специализированный тулингimport diagnostics_channel from 'node:diagnostics_channel';
// Create custom diagnostic channels
const dbChannel = diagnostics_channel.channel('app:database');
const httpChannel = diagnostics_channel.channel('app:http');
// Subscribe to diagnostic events
dbChannel.subscribe((message) => {
console.log('Database operation:', {
operation: message.operation,
duration: message.duration,
query: message.query
});
});
// Publish diagnostic information
async function queryDatabase(sql, params) {
const start = performance.now();
try {
const result = await db.query(sql, params);
dbChannel.publish({
operation: 'query',
sql,
params,
duration: performance.now() - start,
success: true
});
return result;
} catch (error) {
dbChannel.publish({
operation: 'query',
sql,
params,
duration: performance.now() - start,
success: false,
error: error.message
});
throw error;
}
}
https://kashw1n.com/blog/nodejs-2025/
#development #javascript #nodejs
👍21🔥6❤4
Speculative Optimizations for WebAssembly using Deopts and Inlining
Статья в блоге V8 про ускорение WASM в недавнем релизе V8. В целом WASM ранее не нуждался в каких-то спекулятивных оптимизациях т.к. сгенерированный wasm-код уже был эффективный. Но вот мы дошли до создания WASM Garbage Collector, чтобы позволить языкам типа Java, Kotlin, Dart компилироваться в WASM. И вот в WasmGC уже можно заниматься спекулятивными оптимизациями.
Статья, как и многие другие в блоге v8 - одновременно хардкорная и достаточно хорошо разжеванная для обычных людей. Цитировать что-то из нее не буду - если вам интересна тема - рекомендую окунуться в чтение.
https://v8.dev/blog/wasm-speculative-optimizations
#development #javascript #v8 #wasm #performance
Статья в блоге V8 про ускорение WASM в недавнем релизе V8. В целом WASM ранее не нуждался в каких-то спекулятивных оптимизациях т.к. сгенерированный wasm-код уже был эффективный. Но вот мы дошли до создания WASM Garbage Collector, чтобы позволить языкам типа Java, Kotlin, Dart компилироваться в WASM. И вот в WasmGC уже можно заниматься спекулятивными оптимизациями.
Статья, как и многие другие в блоге v8 - одновременно хардкорная и достаточно хорошо разжеванная для обычных людей. Цитировать что-то из нее не буду - если вам интересна тема - рекомендую окунуться в чтение.
https://v8.dev/blog/wasm-speculative-optimizations
#development #javascript #v8 #wasm #performance
v8.dev
Speculative Optimizations for WebAssembly using Deopts and Inlining · V8
This post explains two new optimizations in V8 for WebAssembly: speculative call_indirect inlining and deoptimization support for WebAssembly
👍10
Дайджест за 2025-07-07 - 2025-07-10
Релиз Deno 2.4
Вышел Deno 2.4. Очень много работы над developer experience, а также часть фичей вышли из экспериментальных в стабильные
Восстановили deno bundle. Это команда, которая собирала приложение в 1 бандл. Работала как для серверных приложений, так и для браузерных. В какой-то момент ее задепрекейтили, теперь снова вернули с esbuild под капотом. В будущем обещают программное API для создания бандлов.
Repomix: Pack your codebase into AI-friendly formats
Repomix - библиотека, которая запакует ваш репозиторий в формат, удобный для AI. Собранный документ затем можно кидать в любую LLM как проект, с которым можно работать.
Какой-то магии здесь нет - библиотека буквально формирует огромный файл, где структурировано расписано - какие файлы есть в проекте и какой у них контент. Как нибудь попробую поиграться с этим на пет-проекте.
Modern Node.js Patterns for 2025
Список современных бест-практисов nodejs в частном блоге. Часть бест-практисов уже "старые", часть - достаточно интересные. В любом случае полезно ознакомиться, возможно найдете что-то для себя
Из банальных советов: используйте ESM, fetch, async await, воркеры для сложных вычислений, кастомные классы ошибок. Менее банальные стоит расписать подробнее.
Speculative Optimizations for WebAssembly using Deopts and Inlining
Статья в блоге V8 про ускорение WASM в недавнем релизе V8. В целом WASM ранее не нуждался в каких-то спекулятивных оптимизациях т.к. сгенерированный wasm-код уже был эффективный. Но вот мы дошли до создания WASM Garbage Collector, чтобы позволить языкам типа Java, Kotlin, Dart компилироваться в WASM. И вот в WasmGC уже можно заниматься спекулятивными оптимизациями.
Статья, как и многие другие в блоге v8 - одновременно хардкорная и достаточно хорошо разжеванная для обычных людей. Цитировать что-то из нее не буду - если вам интересна тема - рекомендую окунуться в чтение.
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
Релиз Deno 2.4
Вышел Deno 2.4. Очень много работы над developer experience, а также часть фичей вышли из экспериментальных в стабильные
Восстановили deno bundle. Это команда, которая собирала приложение в 1 бандл. Работала как для серверных приложений, так и для браузерных. В какой-то момент ее задепрекейтили, теперь снова вернули с esbuild под капотом. В будущем обещают программное API для создания бандлов.
Repomix: Pack your codebase into AI-friendly formats
Repomix - библиотека, которая запакует ваш репозиторий в формат, удобный для AI. Собранный документ затем можно кидать в любую LLM как проект, с которым можно работать.
Какой-то магии здесь нет - библиотека буквально формирует огромный файл, где структурировано расписано - какие файлы есть в проекте и какой у них контент. Как нибудь попробую поиграться с этим на пет-проекте.
Modern Node.js Patterns for 2025
Список современных бест-практисов nodejs в частном блоге. Часть бест-практисов уже "старые", часть - достаточно интересные. В любом случае полезно ознакомиться, возможно найдете что-то для себя
Из банальных советов: используйте ESM, fetch, async await, воркеры для сложных вычислений, кастомные классы ошибок. Менее банальные стоит расписать подробнее.
Speculative Optimizations for WebAssembly using Deopts and Inlining
Статья в блоге V8 про ускорение WASM в недавнем релизе V8. В целом WASM ранее не нуждался в каких-то спекулятивных оптимизациях т.к. сгенерированный wasm-код уже был эффективный. Но вот мы дошли до создания WASM Garbage Collector, чтобы позволить языкам типа Java, Kotlin, Dart компилироваться в WASM. И вот в WasmGC уже можно заниматься спекулятивными оптимизациями.
Статья, как и многие другие в блоге v8 - одновременно хардкорная и достаточно хорошо разжеванная для обычных людей. Цитировать что-то из нее не буду - если вам интересна тема - рекомендую окунуться в чтение.
——————————————
Спасибо что читаете, ставите реакции и отмечаетесь в комментариях. Если вы хотите помочь каналу - расскажите о нем своим коллегам или друзьям. Также оставляйте фидбек по формату, материалу и чему-угодно еще 🙂
👍11
Introducing the first alpha of Turso: The next evolution of SQLite
Не только JS-тулинг переписывают на Rust. Очередь дошла и до sqlite. Turso - новая СУБД на RUST, которая совместима с sqlite, но также имеет дополнительные фичи.
Собственно ради дополнительных фичей все и переписали. Технически, можно было бы доработать sqlite, но, как сообщают авторы Turso, сообщество sqlite достаточно консервативное и не принимает доработки от сторонних авторов.
Поэтому они решили сделать свое решение, которое было бы полностью совместимо с sqlite, но еще и обладает дополнительными фичами.
Что это за фичи:
Асинхронное API в дополнение к синхронному. sqlite - синхронный, что может приводить к регулярным проблемам при нагрузке и параллельной работе с базой.
Встроенный векторный поиск, что крайне полезно для ML и AI проектов
Пока проект в стадии альфа-тестирования. Что обещают в будущем:
- Индексы
- Многопоточность
- Тригеры
- Views
- Saveopoints
В общем ждем. Может быть в будущем будем читать как кто-то построил интересное веб-решение на основе Turso.
https://turso.tech/blog/turso-the-next-evolution-of-sqlite
#development #sqlite #rust
Не только JS-тулинг переписывают на Rust. Очередь дошла и до sqlite. Turso - новая СУБД на RUST, которая совместима с sqlite, но также имеет дополнительные фичи.
Собственно ради дополнительных фичей все и переписали. Технически, можно было бы доработать sqlite, но, как сообщают авторы Turso, сообщество sqlite достаточно консервативное и не принимает доработки от сторонних авторов.
Поэтому они решили сделать свое решение, которое было бы полностью совместимо с sqlite, но еще и обладает дополнительными фичами.
Что это за фичи:
Асинхронное API в дополнение к синхронному. sqlite - синхронный, что может приводить к регулярным проблемам при нагрузке и параллельной работе с базой.
Встроенный векторный поиск, что крайне полезно для ML и AI проектов
Пока проект в стадии альфа-тестирования. Что обещают в будущем:
- Индексы
- Многопоточность
- Тригеры
- Views
- Saveopoints
В общем ждем. Может быть в будущем будем читать как кто-то построил интересное веб-решение на основе Turso.
https://turso.tech/blog/turso-the-next-evolution-of-sqlite
#development #sqlite #rust
turso.tech
Introducing the first alpha of Turso: The next evolution of SQLite
We’re launching the first alpha of Turso. A Rust-based, cloud-native rewrite of SQLite with modern concurrency, async APIs, vector search, and unmatched reliability powered by advanced testing and open-source collaboration.
👍7👎2❤1🔥1
zshy - The no-bundler build tool for TypeScript libraries
Zshy - билд тул для typescript библиотек. Это инструментарий, который был создал для Zod, но теперь его адаптировали для широкого использования и выложили в опенсорс.
Под капотом используется
https://github.com/colinhacks/zshy
#development #javascript #typescript #library #github
Zshy - билд тул для typescript библиотек. Это инструментарий, который был создал для Zod, но теперь его адаптировали для широкого использования и выложили в опенсорс.
Под капотом используется
tsc
, сам zshy не пытается вам навязать правильный стиль написания кода, а просто собирает проект.https://github.com/colinhacks/zshy
#development #javascript #typescript #library #github
GitHub
GitHub - colinhacks/zshy: 🐒 Bundler-free build tool for TypeScript libraries. Powered by tsc.
🐒 Bundler-free build tool for TypeScript libraries. Powered by tsc. - colinhacks/zshy
👍2👎1
jsonrepair
jsonrepair - библиотека для починки сломанного json. Библиотека умеет чинить типичные проблемы - копирование JS-объектов в JSON, пропущенные запятые или незакрытые скобки, учитываются особенности вставки JSON из разных источников.
https://github.com/josdejong/jsonrepair
#development #JSON #library
jsonrepair - библиотека для починки сломанного json. Библиотека умеет чинить типичные проблемы - копирование JS-объектов в JSON, пропущенные запятые или незакрытые скобки, учитываются особенности вставки JSON из разных источников.
https://github.com/josdejong/jsonrepair
#development #JSON #library
GitHub
GitHub - josdejong/jsonrepair: Repair invalid JSON documents
Repair invalid JSON documents. Contribute to josdejong/jsonrepair development by creating an account on GitHub.
👍15❤1
Поговорим про клавиатурки
Я пишу этот пост с раздельной эргономичной ортолинейной низкопрофильной механической сплит клавиатуры. Если вы нормальный человек, у вас должен появиться вопрос "а что это значит?". Если вы тоже в этой теме, то возможно вам интересно, как я дошел до такой жизни.
Давайте разберем, что значит каждый атрибут:
- Механическая - используются механические переключатели
- Сплит - клавиатура разделена на 2 независимых части
- Эргономичная - обычные клавиатуры неудобны для человеческих кистей. Поэтому все клавиатуры, которые как-то подстраиваются под человеческий организм называют эргономичными
- Программируемая - на клавиатуре около 60 клавиш и им можно назначать различные действия через прошивку или ПО. Так как 60 клавиш - мало для реальной работы, то используется концепция слоев - каждый слой содержит свой мапинг клавиш, а слои переключаются по определенным тригерам
- Ортолинейная - если вы посмотрите на свою клаву, вы увидите, что клавиши выстроены не в ровные колонки, а со смещением. Это сделано из-за особенностей строения старых печатных машинок - рычаги под клавишами не должны были задевать друг друга. Рычажков давно нету, а раскладка осталась. Но наши пальцы - они прямые, без сдвигов, поэтому сдвиги клавиш избыточны. Вот в ортолинейных клавиатурах все кнопки выстроены в ровные колонки. В сочетании со сплит это позвляет печатать двигая пальцы вперед-назад, не двигая их влево-вправо. Рука, в этом случае, печатает неподвижно.
- Низкопрофильные - клавиши с коротким ходом (низкие)
Когда-то я использовал обычные клавиатуры и все было хорошо. Я умел печатать в слепую (спасибо за это тысячам наигранных часов в World of Warcraft). Но мне стало неудобно использовать обычную клавиатуру, когда я стал писать много веб кода.
Я пишу код быстро. Ял знаю основные хоткеи, которые позволяют мне навигироваться по файлам и сущностям без использования мышки. Когда я парно программирую с людьми, которые так не умеют - я стараюсь их переучить, т.к. использование мышки настолько замедляет работу, что мне становится больно наблюдать за этим. Скролить Tree View мышкой для поиска файла (вместо jump to file или, на худой конец find in directory) или искать метод в файле через скрол (вместо jump to symbol) - это примерно как купить феррари и ездить со скоростью 20км\ч - в целом легально, но это какая-то мука.
Мои знакомые говорят, что прямая работа с кодом - не более 20% времени работы программиста, а печать кода - и того меньше. Поэтому нет смысла оптимизировать эту часть работы. Но это не матчится с моим опытом. Там, где я быстро проверяю десятки маленьких гипотез (например "можно ли решить задачу хуком в роутере?"), получая новые знания, люди с мышкой проверяют за то же время всего парочку.
Но даже знание хоткеев не спасает - иногда нужно использовать клавиши, которые требуют полной перестановки кистей на клавиатуре:
Какое-то время я, для упрощения работы с этими клавишами, использовал разные костыли на уровне ОС (благо в линуксе с этим все очень просто). Но в какой-то момент мне показалось, что это какие-то костыли и нужно "нормальное" решение. В этот момент я задумался о приобритении программируемой клавиатуры, которая разделена на 2 части. Как правило такие клавиатуры уже содержат в себе раскладку, которая не требует движения кистей вообще.
Я пробовал разные варианты клавиатур, но последние несколько лет работаю с lilly 58pro. С этой клавиатуры и пишу пост. Навык печати на обычных клавиатурах еще не потерял, но переход с классической клавиатуры на сплит занимает где-то часик-два (обычно проблемы с клавишами на краю клавиатуры - win, cmd, f12, т.к. они могут по разному располагаться на клавиатурах). Я использую низкопрофильные свичи kailh choc, линейные и тактильные. Тактильные для обычных клавиш, а линейные для модификаторов и того, что надо зажимать.
Отдельный неожиданный прикол - каждый гость спрашивает, почему у меня "сломанная" клавиатура.
Давайте пофлексим - скидывайте в чат свои клавиатуры, а я скину свою.
#note #keyboards
Я пишу этот пост с раздельной эргономичной ортолинейной низкопрофильной механической сплит клавиатуры. Если вы нормальный человек, у вас должен появиться вопрос "а что это значит?". Если вы тоже в этой теме, то возможно вам интересно, как я дошел до такой жизни.
Давайте разберем, что значит каждый атрибут:
- Механическая - используются механические переключатели
- Сплит - клавиатура разделена на 2 независимых части
- Эргономичная - обычные клавиатуры неудобны для человеческих кистей. Поэтому все клавиатуры, которые как-то подстраиваются под человеческий организм называют эргономичными
- Программируемая - на клавиатуре около 60 клавиш и им можно назначать различные действия через прошивку или ПО. Так как 60 клавиш - мало для реальной работы, то используется концепция слоев - каждый слой содержит свой мапинг клавиш, а слои переключаются по определенным тригерам
- Ортолинейная - если вы посмотрите на свою клаву, вы увидите, что клавиши выстроены не в ровные колонки, а со смещением. Это сделано из-за особенностей строения старых печатных машинок - рычаги под клавишами не должны были задевать друг друга. Рычажков давно нету, а раскладка осталась. Но наши пальцы - они прямые, без сдвигов, поэтому сдвиги клавиш избыточны. Вот в ортолинейных клавиатурах все кнопки выстроены в ровные колонки. В сочетании со сплит это позвляет печатать двигая пальцы вперед-назад, не двигая их влево-вправо. Рука, в этом случае, печатает неподвижно.
- Низкопрофильные - клавиши с коротким ходом (низкие)
Когда-то я использовал обычные клавиатуры и все было хорошо. Я умел печатать в слепую (спасибо за это тысячам наигранных часов в World of Warcraft). Но мне стало неудобно использовать обычную клавиатуру, когда я стал писать много веб кода.
Я пишу код быстро. Ял знаю основные хоткеи, которые позволяют мне навигироваться по файлам и сущностям без использования мышки. Когда я парно программирую с людьми, которые так не умеют - я стараюсь их переучить, т.к. использование мышки настолько замедляет работу, что мне становится больно наблюдать за этим. Скролить Tree View мышкой для поиска файла (вместо jump to file или, на худой конец find in directory) или искать метод в файле через скрол (вместо jump to symbol) - это примерно как купить феррари и ездить со скоростью 20км\ч - в целом легально, но это какая-то мука.
Мои знакомые говорят, что прямая работа с кодом - не более 20% времени работы программиста, а печать кода - и того меньше. Поэтому нет смысла оптимизировать эту часть работы. Но это не матчится с моим опытом. Там, где я быстро проверяю десятки маленьких гипотез (например "можно ли решить задачу хуком в роутере?"), получая новые знания, люди с мышкой проверяют за то же время всего парочку.
Но даже знание хоткеев не спасает - иногда нужно использовать клавиши, которые требуют полной перестановки кистей на клавиатуре:
<>
, стрелочки, pgup и тд. Какое-то время я, для упрощения работы с этими клавишами, использовал разные костыли на уровне ОС (благо в линуксе с этим все очень просто). Но в какой-то момент мне показалось, что это какие-то костыли и нужно "нормальное" решение. В этот момент я задумался о приобритении программируемой клавиатуры, которая разделена на 2 части. Как правило такие клавиатуры уже содержат в себе раскладку, которая не требует движения кистей вообще.
Я пробовал разные варианты клавиатур, но последние несколько лет работаю с lilly 58pro. С этой клавиатуры и пишу пост. Навык печати на обычных клавиатурах еще не потерял, но переход с классической клавиатуры на сплит занимает где-то часик-два (обычно проблемы с клавишами на краю клавиатуры - win, cmd, f12, т.к. они могут по разному располагаться на клавиатурах). Я использую низкопрофильные свичи kailh choc, линейные и тактильные. Тактильные для обычных клавиш, а линейные для модификаторов и того, что надо зажимать.
Отдельный неожиданный прикол - каждый гость спрашивает, почему у меня "сломанная" клавиатура.
Давайте пофлексим - скидывайте в чат свои клавиатуры, а я скину свою.
#note #keyboards
🔥13❤3😁1💩1