Обновить
209.4

JavaScript *

Прототипно-ориентированный язык программирования

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

Как уменьшить боль от this в классах javascript

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров2K

На службе была поставлена задача подготовить и передать клиенту js-библиотеку, которая состояла из несколько классов. Каких-то особых трудностей не ожидалось, поскольку библиотека использовалась в нашей конторе уже не один год и была тщательно оттестирована.

Я «причесал» код, перенёс захардкоженные значения и магические числа, которые неизбежно накапливаются в программе при выполнении «очень срочных и важных заданий», в аргументы методов и переменные классов, отредактировал и дополнил документирующие комментарии и уже собирался отправлять пакет клиенту.

Но одна вещь останавливала меня — часть методов ключевого класса для обращения к другим свойствам и функциям своего класса использовала this. Кайл Симпсон удачно назвал такие методы this-aware functions. И неправильный вызов этих функций мог создать проблемы для разработчиков клиента.

Читать далее

AbortController в JavaScript

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.1K

Привет, Хабр!

Сегодня мы рассмотрим интересный инструмент в JS. AbortController в JS — инструмент, который позволяет отменять асинхронные операции в любой момент. Разберёмся, как он работает, где пригодится и какие подводные камни скрывает.

AbortController — это инструмент для принудительной остановки асинхронных операций в JavaScript.

Читать далее

Разворачиваем микрофронты на Next.js

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров9.2K

Привет, Хабр! Меня зовут Дэниз, в этой статье я расскажу о микрофронтах — что это такое, какие у них плюсы и минусы, и как их можно реализовать. Пройдемся от того, зачем моей компании они понадобились, разберем реализацию, плюсы-минусы, и сделаем выводы.

Читать далее

Пишем простое расширение для браузера

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров14K

Всем привет! В этом туториале я хотел бы описать создание расширения для браузера на основе Chromium (Google Chrome, Brave, Яндекс Браузер и др.).

Расширения для браузеров создаются с использованием веб-технологий: HTML, CSS и JavaScript/TypeScript и все. Можно конечно еще использовать либы React, JQuery или фрейворки Vue например, но можно обойтись Vanilla JS.

Читать далее

N-API: аддоны для Node.js

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров2.3K

Привет, Хабр!

В этой статье рассмотрим то, как создаются нативные аддоны для Node.js на C++ с использованием N-API.

До появленияN‑API написание аддонов шло напрямую через V8 API, что влекло за собой жёсткую привязку к конкретной версии движка. Каждый апдейт Node.js требовал пересборки и правки кучи низкоуровневого кода. N‑API решает эту проблему, предоставляя стабильный ABI. Это позволяет писать универсальные, долговечные и, главное, поддерживаемые модули, не боясь, что обновление Node.js подбросит вам сюрприз в виде «segmentation fault».

Читать далее

Нейросети в разработке: мощный инструмент или слепая вера?

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.9K

Привет, коллеги! Сегодня хочу поделиться осторожным оптимизмом по поводу нейросетей в программировании. Нейросети не только ускоряют процесс разработки, но и помогают находить ошибки, улучшать качество кода, писать хорошо оптимизированный код самостоятельно и изучать новые технологии. Да, они революционны, но слепое доверие к их «интеллекту» может стоить вам часов дебаггинга. Почему 80% восторженных статей пишутся по маркетинговым шаблонам, и как отделить реальные возможности от рекламной шелухи — давайте разбираться.

Читать далее

Webpack, Vite или Rspack: что это за зоопарк или чем собирать микрофронтенды в 2025?

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров12K

Привет! Разбираясь с микрофронтендами в монорепозитории для проекте с Vue3 пришёл к выводу, что так много уделяется внимания гибкости в построении архитектуры и бизнес-задачам, что все боятся заниматься улучшением "условий труда" связанных со сборкой приложения! Решил что эта задачка как раз мне подходит и представляю вашему вниманию небольшую статью которая возможно поможет вам сделать выбор или подтолкнет попробовать новые инструменты сборки фронтенда! Для справки - микрофронтенды у нас на Module Federation, Nx для управления монорепозиторием, общаемся мы через GraphQL, тестируем с Jest и конечно куда без TypeScript. Проект активно развивается, и с ростом его масштабов столкнулись с вопросом: какой сборщик лучше всего справится с нашими задачами? Webpack уже давно с нами, но его медлительность заставляет искать альтернативы. Vite обещает молниеносную разработку, а Rspack — производительность без сложной миграции. Давайте разберёмся, что подойдёт именно нам — и, возможно, вам.

Читать далее

Он вам не SSR. Nuxt — больше, чем Server-Side Render фреймворк

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров7.5K

Привет, Хабр! Я - Frontend Developer в МТС Диджитал. Все чаще и чаще я натыкаюсь на сообщения и комментарии пользователей в различных социальных сетях про Server-Side Rendering.

Обычно эти жалобы о том, кто-то недоволен зависимостью Next.js от Node.js-сервера. Кто-то сталкивается с ограничениями динамического роутинга при статической генерации. Исходя из этого некоторые люди писали в комментариях что-то вроде: "Вы же не ожидали, что SSR-фреймворк решит все проблемы разом?"

Большинство моих коллег с других компаний в принципе не понимают зачем я беру Nuxt почти во все свои проекты и задают вопросы. На первый взгляд это вполне логично. Какой смысл брать SSR фреймворк, если ты выключаешь в нем SSR. На примере Nuxt, SSR можно выключить одним булевым флагом в конфиге:

Читать далее

Инструменты для анализа производительности сайта

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3K

В этой статье речь пойдет об инструментах, с помощью которых можно проанализировать качество спроектированного front-end разработчиком сайта. В качестве наглядного материала используется проект, реализованный на базе Next.js 14-й версии с app router.

Читать далее

Управление bluetooth из js или как я реверсинжинирил умный чайник

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров5.5K

В статье описаны способы получения информации о подключении устройств по bluetooth. Проведен анализ обмена данными между чайником и официальным приложением, создано собственное веб приложение для управления умным чайником из браузера.

Читать далее

Что новенького в Angular 19

Уровень сложностиПростой
Время на прочтение40 мин
Количество просмотров11K

Всем привет, с вами Максим Иванов, и сегодня мы поговорим о некоторых улучшениях, которые появились в последней версии Angular 19, вышедшей в ноябре 2024. Публикация довольно запоздалая с этой точки зрения, но мы сегодня постараемся рассмотреть некоторые нововведения более детально. Как и всегда ребята из Google дарят нам что-то новое, что сделает наши приложения еще более быстрыми и эффективными. И в этом нам помогут модерновые реактивные примитивы, инкрементальная гидратация и многое другое.

Читать далее

IoC: DI vs Ambient Context

Время на прочтение1 мин
Количество просмотров872

На днях с коллегой @nin-jin возник небольшой спор в комментариях к статье "ООП: худшее, что случалось с программированием". Мы обсуждали, что является истинным IoC: "контекст окружения" (Ambient Context) или же "внедрение зависимостей" (Dependency Injection).

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

Другие наши коллеги могут посчитать этот опрос бессмысленным, типа популярные практики не могут быть хорошими априори. Я же считаю, что более популярные практики прошли более тщательную проверку жизнеспособности, чем их менее популярные аналоги. Популярность практики прямо пропорциональна вероятности того, что твою текущую проблему уже кто-то когда-то решил с её помощью. А зачастую решены и те проблемы, о которых ты пока даже и не подозреваешь.

Прошу воспринимать этот опрос в легком и неформальном ключе. Мне просто интересно, какой из этих двух методов более распространен среди хабровчан.

к опросу

Использование Proxy и Reflect для создания реактивных объектов в JavaScript

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров3K

Привет, на связи снова Дмитрий, React-разработчик, и сегодня захотелось написать про Proxy и Reflect.

Что такое Proxy в JavaScript?

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

Читать далее

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

Заметки по grammY

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.3K

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

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

Читать далее

tabs-broadcast — библиотека для синхронизации вкладок

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров2.3K

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

Какие задачи помогает решить tabs‑broadcast? В современных веб-приложениях пользователь нередко открывает одну и ту же страницу в нескольких вкладках. Без координации эти вкладки работают изолированно: могут дублировать дорогостоящие операции (например, загрузку одних и тех же данных), создавать конфликты состояний (например, разные вкладки по-разному отображают авторизацию или настройки) и увеличивать нагрузку на сервер (несколько соединений от одного пользователя). Библиотека tabs-broadcast предоставляет механизм единого центра управления для таких случаев. Она позволяет одной «главной» вкладке выполнять критичные задачи (синхронизация с сервером, получение обновлений, запись в хранилище и т.п.), а другим вкладкам — получать результаты и уведомления от неё. Для разработчиков это означает более простой код для синхронизации вкладок и избавление от ручного использования низкоуровневых API.

Почему это полезно? Во-первых, улучшение UX: пользователь всегда видит актуальное состояние во всех открытых окнах приложения. Во-вторых, оптимизация ресурсов: за счет того, что тяжелые операции выполняются только в одном экземпляре, снижается нагрузка на браузер (меньше потоков, соединений, таймеров) и на сервер (меньше дублирующих запросов). В-третьих, упрощается разработка функционала, требующего взаимодействия между вкладками (не нужно изобретать собственный велосипед на базе localStorage или postMessage). Библиотека предоставляет готовые инструменты для регистрации обработчиков событий и широковещательной рассылки сообщений, позволяя фокусироваться на логике приложения, а не на тонкостях межвкладочного взаимодействия.

Читать далее

Ramda.js — библиотека, которая избавит вас от reduce и map-каши

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.9K

Привет, Хабр!

Если вас когда-либо раздражало, что Array.prototype.map нельзя использовать для объектов или reduce постоянно требует передавать начальное значение, Ramda.js решает эти проблемы, делая код чище, декларативнее и удобнее.

Ramda — это библиотека для функционального программирования в JavaScript, которая по умолчанию не мутирует данные и поддерживает каррирование. В отличие от Lodash, где функциональность чаще заточена под удобство, Ramda больше ориентирована на чистоту кода и прогнозируемость работы функций.

Читать далее

Symfony + React: Основные проблемы и методы их решения

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров3.6K

Symfony и React – мощная связка для создания современных веб-приложений. Symfony, как PHP-фреймворк, обеспечивает надежный серверный бэкенд: работу с базой данных, бизнес-логику, REST API и безопасность. React же отвечает за динамичный интерфейс на стороне клиента, позволяя создавать богатые Single Page Application (SPA) с мгновенной реакцией на действия пользователя. Используя их вместе, разработчики получают гибкость разделения фронтенда и бэкенда, что упрощает поддержку и масштабирование. Например, бэкенд на Symfony можно переиспользовать для мобильного приложения или другого клиента, пока React обеспечивает отличное UX в браузере.

Однако сочетание двух разных технологий несет и ряд вызовов. Нужно грамотно спроектировать API для связи между фронтом и бэком, обеспечить безопасный обмен данными и учесть особенности работы SPA (например, отсутствие перезагрузки страниц, хранение состояний на клиенте и пр.). Возникают вопросы: как организовать взаимодействие React-приложения с Symfony API? Как защитить API и пользовательские данные от угроз, таких как несанкционированный доступ или атаки? В этой статье мы рассмотрим основные проблемы интеграции Symfony + React, связанные с API и безопасностью, а также предложим практические методы их решения. Статья ориентирована на разработчиков от начинающих до среднего уровня и включает примеры кода и наглядные иллюстрации ключевых моментов.

Читать далее

Popover = hint

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.2K

Chrome 133 развивает существующую функцию всплывающих подсказок, представляя новый режим: popover="hint". Этот режим, управляемый браузером, позволяет использовать новый контекст наложения, упрощающий создание всплывающих подсказок и подобных эфемерных плавающих элементов. Он снижает трудозатраты разработчиков, сохраняя гибкость дизайна.

Читать далее

Centrifugo v6 + FastAPI + Python: разрабатываем веб-опросник с обновлениями в реальном времени

Время на прочтение28 мин
Количество просмотров7.2K

В прошлой статье я показал, как создать мини-чат с комнатами на FastAPI и WebSockets. Но что, если есть более мощное и удобное решение для Real-time? В этот раз разберем Centrifugo – технологию, которая берет на себя всю работу с WebSockets и масштабированием!

В статье мы разберем теорию, а затем на практике разработаем веб-приложение-опросник, где результаты обновляются в реальном времени без перезагрузки страницы. А в финале – деплой на Amvera Cloud.

Готовы прокачать свои навыки? Тогда вперед!

Читать далее

Next.js 15 в Hikasami: Глубокая оптимизация рендеринга, загрузки данных и производительности

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.9K

В эпоху цифрового контента каждая миллисекунда загрузки страницы может существенно повлиять на пользовательский опыт. В Hikasami, платформе, предоставляющей потоковое аниме и азиатские медиа для пользователей СНГ, наша цель — обеспечить мгновенную загрузку страниц, минимизировать задержки, а также гарантировать актуальность данных. Для этого мы внедрили Next.js 15, который открыл перед нами возможности глубокой оптимизации:

Читать далее

Вклад авторов