Сфера информационных технологий стремительно и непрерывно развивается каждый день — одни программные продукты уходят в историю, другие прочно занимают своё место и наращивают число пользователей. С автором одной из успешных разработок — библиотеки с открытым кодом StatemanJS — Дмитрием Шатохиным, мы подробно обсудили, как прийти к созданию собственного продукта и повышать его востребованность в кругу профессионалов. Прежде чем создать авторский продукт, Дмитрий более 10 лет работал как frontend-разработчик и Software Architect в многочисленных российских и международных проектах. Кроме того, он является автором образовательных курсов и многочисленных статей и постоянно делится опытом с молодыми и опытными специалистами, включая инструменты и новинки работы в StatemanJS.
Как вы начали свой путь в профессии, с какими проектами удалось поработать? Как вы пришли к идее создания собственного продукта и почему выбрали именно библиотеки с открытым исходным кодом?
Я начал свой путь в сфере IT более 10 лет назад с фриланса в качестве Software Engineer на Магнитогорском металлургическом комбинате и Full Stack Developer в МГТУ им. Г. И. Носова. Затем, как Software Engineer в течение двух лет я работал с Mail.ru Group и Advance Engineering, а также как Senior Frontend Developer в G2R, где я создал frontend-часть маркетплейса. После был опыт в немецком медицинском стартапе SBNT и российском проекте actiTIME, где я разработал frontend-часть приложения, упрощающего корпоративные бизнес-процессы. В другой российской компании Graph я в качестве Senior Frontend Developer занимался frontend-разработкой различных проектов и систем, обеспечивая своевременную и эффективную поставку высококачественных программных решений, а 2022 году уже как Software Architect я присоединился к команде Support Partners, золотого партнёра Miscrosoft.
Эта компания играет одну из ключевых ролей в моей карьере. На старте нашего сотрудничества я руководил архитектурным редизайном и модульным расширением AIR, инновационной системы управления контентом, улучшающей управление и распространение цифровых медиа-активов. Наша команда не просто обновила проект, а трансформировала AIR в AIR 2.0 (AIR Archive), превратив приложение в модульную и расширяемую платформу, способную оптимизировать ресурсы компании и обеспечивать масштабируемость продукта. То, что продукт по-настоящему необходим и полезен, подтверждено его востребованностью у мировых корпораций, таких как Disney, BBC, MWG, USAGM, LA Lakers, которые интегрировали его в свои глобальные бизнес-процессы.
Также мы с командой Support Partners разработали и внедрили специализированное приложение BBC Uploader для управления метаданными, которое было интегрировано с профессиональными камерами Sony и Canon. Оно позволяет выгружать контент в режиме реального времени, что также было необходимой инновацией для индустрии медиа, где скорость передачи информации играет критическую роль.
Параллельно с профессиональным ростом я старался уделять время развитию IT-сообщества. Например, публиковал статьи и три года работал в качестве преподавателя на курсе Python Developer на образовательной платформе GeekBrains. Могу сказать, что навык трансляции информации и объяснения материала мне очень помог при создании StatemanJS, моей авторской библиотеки управления состоянием для приложений на JavaScript и Node.js. Процесс его разработки я часто сравниваю с обучением в аспирантуре, когда у тебя есть проблема, ты её решаешь, а потом упаковываешь решение в продукт и делишься им с начинающими специалистами и профессионалами.
Что такое StatemanJS? Кто может её использовать, и почему всё большее количество разработчиков её выбирают?
Как я уже сказал, StatemanJS — это быстрая, надежная и простая в использовании библиотека управления состоянием для приложений JavaScript и Node.js. Все, кто занимается разработкой приложений JavaScript, сталкиваются с рядом ограничений, например, отсутствием поддержки потоков, однопоточной моделью выполнения, ограниченной поддержкой больших чисел и высокоточной арифметикой и так далее. Эти ограничения могут сузить область применения JavaScript, в то время как он остается основным языком современной веб-разработки. Поэтому с усложнением веб-приложений на первое место вышла необходимость повышения их производительности, а также сохранение качества пользовательского опыта без повышения затрат, которые влечет за собой создание большого количества новых объектов при обновлениях состояния.
Управление состоянием — важнейший аспект создания современных приложений JavaScript, которое позволяет разработчикам управлять данными и сохранять надежность приложения, масштабируемость и удобство его обслуживания. Доступно множество библиотек управления состоянием, каждая из которых имеет свой собственный набор функций, компромиссов и ограничений, частью из которых в StatemanJS удалось начать управлять.
В чём, по вашему мнению, секрет успеха StatemanJS? Чем она отличается от MobX и Redux?
В качестве ключевых преимуществ библиотеки StatemanJS я могу назвать следующие:
- Производительность. Одним из основных преимуществ StatemanJS является его превосходная производительность по сравнению с аналогами. StatemanJS использует изменяемый подход к управлению состоянием, который обновляет состояние напрямую и позволяет избежать накладных расходов на создание новых копий состояния или отслеживание зависимостей. Благодаря этому качеству StatemanJS быстрее и эффективнее, чем библиотеки, использующие неизменяемые или реактивные подходы, такие как Redux или MobX. Например, если вы захотите измерить время выполнения функции обновления, как это сделал я, то окажется, что Redux действительно быстрее, чем MobX, но с увеличением количества файлов эта разница сильно уменьшается. При проведении тестирования удалось выявить, что StatemanJS более чем в 8000 раз быстрее Redux и почти в 16 раз быстрее MobX. При большем количестве элементов или более сложной логике обновления разница в производительности между Statemanjs и другими библиотеками становится еще более заметной.
- Простота. Помимо превосходной производительности, StatemanJS также проще для понимания и использования, чем другие библиотеки управления состоянием. У него понятный и строгий API, который позволяет разработчикам устанавливать и получать состояние, подписываться на изменения состояния и обновлять состояние контролируемым и надежным способом, а также сосредоточиться на основной логике своих приложений, а не тратить время на изучение сложных API или написание шаблонного кода. Этот подход облегчает разработчикам изучение и использование StatemanJS, особенно если они новички в управлении состоянием или имеют ограниченный опыт работы с другими библиотеками.
- Масштабируемость. StatemanJS обладает высокой масштабируемостью и подходит как для небольших, так и для крупных проектов. Он может обрабатывать широкий спектр типов состояний, от примитивов до сложных и многомерных объектов, и его легко использовать с любым UI фреймворком, включая React, Vue и Svelte. StatemanJS также имеет небольшой размер пакета, не имеет зависимостей и занимает чуть больше 3 КБ (3.1 КБ MINIFIED + GZIPPED).
- Надежность. StatemanJS предлагает высокий уровень безопасности и надежности по сравнению с другими библиотеками управления состоянием. Его строгий API и ссылки на состояние только для чтения предотвращают случайные или несанкционированные изменения состояния и снижают риск ошибок, в том числе и в коде, а изменяемый подход гарантирует быстрое и эффективное обновление состояний.
Какое будущее вы видите у этого продукта? Как вы планируете его развивать? Какой новый функционал могут ожидать его пользователи?
Существует несколько подходов к управлению состоянием в JavaScript: неизменяемый, реактивный и изменяемый (от англ. mutable). Каждый из них имеет свой набор преимуществ и ограничений:
- Неизменяемый подход предполагает создание новых копий состояния при каждом его обновлении, а не прямое изменение состояния. Это может обеспечить более высокий уровень безопасности и надежности, поскольку предотвращает случайные или несанкционированные изменения состояния. Однако неизменяемый подход может быть неэффективным в JavaScript из-за однопоточной модели выполнения и цикла событий.
- Реактивный подход предполагает определение зависимостей между обновлениями состояния и автоматическое повторное выполнение обновлений при изменении зависимостей. В других случаях реактивный подход может быть медленнее, и его может быть сложнее изучить и использовать, чем другие подходы.
- Изменяемый подход предполагает непосредственное обновление состояния, а не создание новых копий состояния или отслеживание зависимостей. Это может быть быстрее и эффективнее, чем неизменяемые или реактивные подходы, и его проще понять и реализовать, уделив внимание безопасности и надежности, поскольку этот подход позволяет разработчикам напрямую изменять состояние.
Именно изменяемый подход я использовал при создании StatemanJS. Простота и производительность сделали его популярным среди опытных и начинающих разработчиков. Сегодня количество скачиваний в неделю достигло 10000. Для меня, как разработчика, это стимул двигаться дальше и улучшать свой продукт.
Многочисленные тесты подтвердили, что Statemanjs значительно превосходит другие решения по производительности. Я планирую продолжать оптимизацию этой библиотеки, чтобы обеспечить ещё более быстрые и эффективные обновления состояния, особенно для крупных и сложных приложений.
Моя цель — сделать Statemanjs наиболее производительным, удобным и функциональным инструментом для управления состоянием, который станет неотъемлемой частью разработки современных JavaScript и NodeJS приложений.