Раскрываем карты, какие технологии используем в своих проектах.
От выбора правильного технологического стека во многом зависит жизненный цикл продукта, его производительность, надежность и масштабируемость. Раскрываем карты, какие технологии используем в своих проектах.
Технологический стек (Technology Stack) — это набор технологий, инструментов и платформ, используемых для разработки сайтов, веб-приложений и программных продуктов. Стек состоит из нескольких слоев, каждый из которых выполняет определенные функции и взаимодействует с другими компонентами.
Наиболее известные примеры компонентов технологического стека:
языки программирования Java, JavaScript и Python;
база данных MySQL;
фреймворки React и Angular;
серверное программное обеспечение Node.js и Nginx;
прочие инструменты и сервисы.
Выбор правильного технологического стека зависит от целей разработки, требований проекта, опыта команды разработчиков и оценки надежности конкретных инструментов.
Владельцам продуктов или собственникам бизнеса, которые обращаются за заказной разработкой, стоит узнать заранее, с какими технологиями и инструментами работает команда подрядчика.
Во-первых, чтобы оценить потенциальную производительность и возможность масштабирования вашего продукта в будущем.
Во-вторых, чтобы удостовериться в их совместимости с текущей инфраструктурой и технологиями продукта, если такой есть.
В-третьих, чтобы убедиться: ваша будущая команда разработки не застряла во времени, специалисты осваивают актуальные языки и инструменты, а не сидят годами на проверенном, но морально устаревшем стеке.
Последнее показывает, что команда достаточно гибкая, чтобы подбирать комплекс решений исходя из ваших потребностей и не подстраивать функциональность продукта под узкий стек.
Мы пишем эту статью в первой половине 2024 года. На данный момент в нашей компании несколько проектных команд, которые занимаются разработкой и поддержкой продуктов разных типов. Среди них есть высоконагруженные CRM и ERP системы, мобильные приложения, интернет-магазины, корпоративные сайты и прочее.
Каждый специалист работает со своим стеком и может быть вовлечен в разные проектные команды. Это вопрос не только мультизадачности конкретных специалистов, но и функциональной гибкости: так мы собираем кастомный набор инструментов для разработки каждого продукта.
Например, в одном из недавних проектов нам нужно было увеличить скорость загрузки табличных данных у пользователей. Из-за того, что данные консолидировались из разных источников, а их вывод для каждого конкретного пользователя учитывал множество условий, полная загрузка одной страницы занимала до 2-4 секунд. Это критичная задержка. Чтобы исправить ситуацию, мы решили оптимизировать данные с помощью Manticore Search. Это высокопроизводительная система полнотекстового поиска с открытым исходным кодом. Мы не работали с Manticore раньше. Но понимая, что никакие альтернативы не дадут нужного ускорения, разобрались и внедрили. В результате ускорили загрузку страниц до 300-800 миллисекунд, улучшили юзабилити продукта и расширили диапазон отработанного стека.
В редких случаях бывает обратная ситуация, когда нужен инструмент, с которым мы уже не работаем — есть более продвинутые и масштабируемые решения. Но по каким-то причинам заказчик отказывается от альтернатив. Например, есть действующий продукт с поддержкой инхаус-команды, который требует доработок на аутсорсе. В зависимости от ситуации, мы можем «расчехлить» нужный инструмент или порекомендовать специалистов, работающих в данном стеке.
Читайте также: «Разработка продукта: инхаус vs. аутсорс».
Итак, время выложить карты на стол и рассказать о компонентах стека технологий, на которых мы работаем.
Для разработки веб-приложений мы используем следующие языки программирования:
HTML5 — язык разметки, который используется для создания структуры веб-страниц. Он определяет содержимое страницы: текст, изображения, ссылки и т. д.
PHP 7.4 и PHP 8.2 — язык программирования, используемый для создания серверной части веб-приложений.
CSS3 — язык используется для описания внешнего вида веб-страниц. Он определяет стили элементов на странице: цвета, шрифты, отступы и т. д.
JavaScript — мощный язык, который используется для создания интерактивных элементов. Он позволяет создавать динамичные страницы с интерактивными элементами UI, которые меняются в ответ на действия пользователя.
Помимо этого, используем различные фреймворки и библиотеки, которые лучше отвечают требованиям проекта.
Фреймворк — это набор инструментов, библиотек и структурных компонентов, который облегчает и ускоряет процесс разработки продукта. Фреймворк дает готовые решения для общих задач, таких как управление базами данных, обработка HTTP-запросов, роутинг, аутентификация и многое другое. На базе фреймворка можно собрать кастомную CMS и доработать ее под задачи проекта (чаще всего мы так и делаем). Наши фавориты:
Yii2 — бэкенд-фреймворк для разработки веб-приложений на языке программирования PHP. Он предоставляет мощный набор инструментов и компонентов для ускорения разработки. Например, в Yii2 также встроена поддержка фреймворка Bootstrap для быстрой отрисовки интерфейсов.
Laravel и Symfony — PHP-фреймворки бэкенда с архитектурой MVC (Model-View-Controller). Используются, когда нужно разделить логику приложения для аутентификации пользователей и управления правами доступа в приложении.
React/Redux и ReactJS — фронтенд-фреймворки для создания пользовательского интерфейса веб-приложений. Они позволяют создавать компоненты, которые можно дублировать и использовать повторно. К их основным преимуществам можно отнести удобное управление состоянием, эффективное отображение данных и удобную отладку.
Vue.js — прогрессивный JavaScript-фреймворк, используется для создания интерактивных пользовательских интерфейсов и одностраничных приложений (SPA) на фронтенде. Легко интегрируется с другими проектами и библиотеками.
1С-Bitrix — популярный бэкенд-фреймворк для создания корпоративных веб-приложений и интернет-магазинов. Он обладает широкими возможностями для разработки и интеграции.
Читайте также: «Разработка веб-проекта: фреймворк или CMS?»
Как правило, в рамках одного продукта используются комбинации различных баз данных и СУБД. Это позволяет обеспечить оптимальную производительность, масштабируемость и надежность системы. В их основе чаще всего:
MySQL — реляционная база данных, которая используется для хранения структурированных данных и выполнения SQL-запросов. MySQL чаще всего используется там, где требуется хранение и обработка большого объема данных в табличной форме.
MongoDB — популярная документо-ориентированная база данных с открытым исходным кодом. Она предназначена для хранения и управления документами в формате JSON-подобных документов. Широко используется для разработки веб-приложений, аналитики данных, IoT и других сценариев.
В отдельных проектах мы также используем Realm, Redis, InterSystems Caché и PostgreSQL.
Среда разработки (IDE — Integrated Development Environment) — программное обеспечение, которое создает интегрированную среду для разработки. С помощью IDE специалисты могут создавать, отлаживать, тестировать и развертывать приложения в удобной и эффективной среде. Мы пишем веб-приложения в Visual Studio Code, PHPStorm, Webstorm, мобильные — в Android Studio и Xcode.
Системы контроля версий (Version Control Systems, VCS) — инструменты, которые позволяют отслеживать изменения в исходном коде и управлять версиями файлов в рамках проекта. С их помощью можно одновременно работать над кодом, отслеживать историю изменений, вносить правки, а также делать откат к предыдущей версии, когда это необходимо. Чаще всего используем одну из самых популярных и эффективных систем контроля версий — Git. В отдельных проектах и задачах работаем с Bitbucket, Gitlab, Github.
При создании продукта с нуля важно правильно настроить серверную и облачную инфраструктуру. Чаще всего мы обращаемся к технологиям Docker и Docker Compose для упаковки и развертывания приложений в контейнерах. Это позволяет обеспечить изолированное окружение для приложения, упростить его развертывание на разных серверах и обеспечить консистентность работы приложения в различных средах.
Когда работаем с уже существующими продуктами — масштабируем, дорабатываем функционал или осуществляем техподдержку — разворачиваемся и в других средах: Nginx, PHP-FPM, Apache и т. д.
В разделе «Проекты» мы рассказываем о реализованных и текущих проектах разработки. В конце каждого кейса есть блок «Стек», где мы раскрываем весь набор инструментов. Логично, что чем сложнее продукт, тем шире диапазон. Для примера, вот что представляет собой Личный кабинет клиента «Катрен», если разложить его на компоненты стека.
Мы уделяем особое внимание выбору правильных инструментов для каждого этапа разработки, чтобы обеспечить оптимальное сочетание функциональности, производительности и удобства использования продукта. Сочетание различных компонентов позволяет нам эффективно разрабатывать, тестировать, деплоить и поддерживать веб-приложения.
Наша команда способна быстро реагировать на изменения в требованиях рынка, адаптироваться к новым технологиям и предлагать оптимальные решения с учетом целевых бизнес-процессов.
Если вы уже знаете, каких результатов хотите добиться от будущего продукта, но сомневаетесь, какие инструменты для этого нужны, свяжитесь с нами.