КЕЙС FISHINGSIB С CAKEPHP НА SYMFONY

Перевод устаревшего проекта на современные технологии

Сайт о рыбалке в России с активным комьюнити. Он создавался в 2000-ых как форум для рыбаков-любителей и постепенно стал вторым по посещаемости тематическим порталом в стране: ежедневно на него заходят более 10 000 уникальных пользователей. Самые популярные разделы — заметки о рыбалке, фотографии и видео от пользователей. Кроме того, на сайте есть доска объявлений, новостная лента, карта рыбных мест и другие разделы.

2017 - 2020

ПРОБЛЕМА

FishingSib был небольшим частным проектом: его разрабатывали энтузиасты для общения, без коммерческих целей. В 2012–2013 годах сайт стал популярнее, разработчики перенесли его на CakePHP. На тот момент это был один из нескольких развивающихся PHP-фреймворков.

Постепенно сайт вырос до крупного регионального, а затем федерального портала о рыбалке, и стал интересен рекламодателям. У клиента появились бизнес-цели и планы по развитию, но уже устаревший CakePHP не позволял их реализовать. Найти специалистов для поддержки проекта было сложно: фреймворк перестал быть популярным среди разработчиков. Развитие проекта остановилось из-за технических ограничений.

К 2017 году стало понятно: чтобы сайт продолжал расти, его нужно переносить на современный стек.

ЗАДАЧА

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

У клиента было несколько требований к новому сайту:

  • Постепенное обновление. На быстрый перезапуск пришлось бы выделять значительные ресурсы в короткий срок, а сам сайт — консервировать на время разработки новой версии.
  • Адаптивный дизайн. Пользователям должно быть удобно заходить на сайт с любого устройства.
  • Развитие старого сайта. Нужно было по запросу решать текущие задачи бизнеса, например добавлять функциональность.
  • Гибкость и изменяемость. Фреймворк и архитектура сайта должны позволять быстро создавать и внедрять новые возможности для пользователей.
  • Масштабируемость. Проект должен выдержать будущий рост.

РЕШЕНИЕ

В качестве новой платформы для FishingSib эксперты Resolventa выбрали фреймворк Symfony. Библиотеки из него можно использовать независимо друг от друга и встраивать в другие приложения на PHP. Это позволило настроить максимально тесную интеграцию старого и нового фреймворков на время переноса.

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

  • Обеспечили тестовое покрытие старого кода. Сайтом FishingSib пользуются тысячи людей ежедневно и при обновлении важно было ничего не сломать. В кодовой базе на CakePHP практически не было тестов, которые проверяют работоспособность сайта. Поэтому разработчики написали больше 150 приемочных авто-тестов до того, как начали работать над модернизацией портала. Весь новый код сразу писали с нужным уровнем тестового покрытия.
  • Создали веб-приложение на Symfony. На этом этапе две версии сайта «жили» рядом, но еще не могли взаимодействовать.
  • Добавили надстройку для предварительной подготовки запросов пользователей. Туда перенесли все промежуточные обработчики, которые используют обе версии сайта на разных страницах, так называемые Middlewares. Например, в них выполнялась проверка прав доступа, авторизация, переадресация по страницам. Там же выполнялся роутинг: распределение запросов пользователей между Symfony и CakePHP.
  • Настроили связь между старым и новым фреймворками. Без нее невозможно было наладить одновременную работу разделов сайта, которые написаны с разницей в почти десять лет. Разработчики писали функции так, чтобы в Symfony можно было вызвать блок старого кода на CakePHP, а в CakePHP — вызвать новый код на Symfony (см. иллюстрацию ниже).
  • Поочередно перенесли разделы сайта. На этом этапе также создавали новую функциональность, если появлялся запрос от клиента. То есть, любой новый раздел или возможность реализовывали на Symfony по мере необходимости, не дожидаясь полного переноса.
  • Провели уборку. Когда разработчики закончили обновление, старый сайт на CakePHP и Middleware-роутер удалили. Итоговая архитектура сайта стала стандартной для Symfony.

Архитектура проекта включала две версии сайта и Middleware-надстройку, а также сложные зависимости между разными элементами кода

150

автоматических тестов написали для покрытия сайта

РЕЗУЛЬТАТ

Кодовую базу FishingSib полностью заменили на современную к 2020 году. Перезапуск проекта ответил на главный запрос бизнеса: позволил легко добавлять возможности для пользователей сайта. Например, после обновления появились бизнес-аккаунты. Это платная услуга для компаний: коммерческая страница для размещения рекламы и общения с целевой аудиторией. Она стала частью бизнес-модели и основой для будущего роста сайта.

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

Важное нововведение — у FishingSib появился адаптивный дизайн, сайт удобнее просматривать на планшетах и смартфонах. Он выглядит более современно, а навигация по разделам стала понятнее.

До

После

Фреймворк Symfony остается популярным и востребованным, поэтому клиенту проще находить разработчиков. Теперь сайт FishingSib можно масштабировать по мере появления новых технологий и инструментов.

Кроме того, свежие версии инструментов помогают улучшать метрики сайта. Например, отказ от CakePHP позволил обновить версию PHP до 8 и ускорить загрузку сайта в 2,5 раза.

Постепенное обновление сайта оказалось выгоднее и удобнее для бизнеса, чем консервация и масштабный перезапуск в один заход. Эксперты Resolventa знают, какой подход лучше сработает для конкретного проекта, и помогают клиентам выбрать оптимальный способ улучшить их систему, приложение или сайт.

3 года

занял плавный переход на новый фреймворк без остановки сайта

ТЕХНОЛОГИИ

PHP, Symfony, MySQL, Vue.js, Docker, Gitlab CI, Codeception

ИНТЕГРАЦИИ

Dadata, XenForo, Mailgun, VK API, stopForumSpam, ReCaptcha, Google Maps API

Нужно решить похожую задачу?

Напишите нам, чтобы обсудить подробности или свяжитесь другим удобным способом.

Мы отвечаем быстро и по делу!

КОНТАКТЫ / 

Свяжитесь с нами любым удобным способом и получите консультацию у Дмитрия - нашего руководителя.

зайти в офис /

Россия, Новосибирск, ул. Семьи Шамшиных, 12

позвонить /

+7 913 921 7200

написать /

наши вакансии /

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

Ваше имя
Ваш e-mail *
Файл
Прикрепить файл...
Сообщение *

© 2024 Resolventa