
Порівнювати технології, які є однаково популярними, досить складно. Такі порівняння за замовчуванням схильні до неточностей, особливо якщо ви надаєте перевагу одному з них. Саме тому в оновленій версії цієї статті ми хотіли б взяти неупереджений підхід до питання Symfony2 PHP фреймворку проти Yii2 і дозволити нашим читачам самостійно вирішити, що обрати для своїх проектів.
Symfony2 PHP веб-фреймворк проти Yii2
Symfony2 та Yii2 — це обидва повноцінні PHP фреймворки. Вони обидва є продуктами з відкритим кодом, код яких доступний на Github. Документація для Symfony2 та Yii2 доступна кількома мовами, включаючи російську. Проте в Yii2 застосунки створюються відповідно до MVC, тоді як у Symfony2 використовується лише модель та контролер частини шаблону. Як Yii2, так і Symfony2 використовують простори імен, що дозволяє розробникам ізолювати компоненти, віджети та моделі один від одного. Це була довгоочікувана функція для користувачів Yii1, оскільки, коли структура продукту організована таким чином, значно легше писати код.
Що потрібно зробити, щоб почати працювати з кожним з цих фреймворків?
Встановлення
Існує два способи встановлення фреймворку Yii2. Ви можете або використовувати Composer, або зробити це вручну. Розробники рекомендують робити це з Composer, що зручно, оскільки пізніше ви можете легко встановлювати розширення та оновлювати фреймворк, вводячи команди в Composer.
використовувати Composer, так само як і з Yii2.
Після встановлення Yii2 ви отримаєте веб-застосунок, створений з базового шаблону, але ви також можете встановити розширений шаблон. Ви навіть можете створити свій власний шаблон Yii2, якщо хочете. Symfony2 також має демонстраційний застосунок, але вам потрібно виконати спеціальну команду для його встановлення. Водночас існує кілька дистрибутивів Symfony2, які підходять для створення застосунків з певними функціями, наприклад:
- Стандартне видання встановлюється за замовчуванням.
- Видання Hello World використовується для створення бенчмарків.
- Symfony CMF Standard Edition використовується для створення CMS.
- Symfony REST Edition має всі необхідні REST функції.
Процес розробки
Фреймворки для розробки PHP були створені для того, щоб усунути повторення завдань. Yii2 завойовує більше сердець, ніж Symfony2, коли йдеться про темп розробки, оскільки він значно скорочує час розробки. В результаті, ви витрачаєте менше часу на повторювані завдання і більше часу на налаштування ваших веб-застосунків.
Yii2 має спеціальний модуль для генерації коду під назвою Gii. Це візуальний інструмент, що працює в браузері і дозволяє легко створювати такі елементи:
- класи Active Record;
- форми;
- контролери та представлення для CRUD;
- нові класи для контролерів;
- скелети для модулів та файли для розширень Yii2.
Але якщо ви віддаєте перевагу командному рядку, зверніть увагу на Symfony2. Скелети для пакетів, форм і контролерів CRUD у Symfony2 генеруються за допомогою SensioGeneratorBundle. Що стосується маршрутизації, то тут Symfony2 отримує більше балів — він має гнучкі налаштування для імпортованих маршрутів, а також умови для налаштування маршрутів.
Слід зазначити, що Yii2 постачається з Bootstrap і також має готові до використання віджети та стилі. У цьому відношенні Symfony2 менш підходить для фронтенд-розробників — вам потрібно додавати все самостійно. Symfony2 також не має вбудованих віджетів.
Symfony2 проти Yii2: продуктивність
Дані, отримані за допомогою php-framework-benchmark (Symfony 2.7.7 та Yii 2.0.6):
- кількість запитів на секунду становить 101.99 для Symfony2 та 379.77 для Yii2;
- максимальне використання пам'яті становить 3.21 для Symfony2 та 1.37 для Yii2.
Отже, Yii2 демонструє кращу продуктивність, ніж Symfony2. Творці Yii2 заявляють, що досягнення високої продуктивності є їхньою основною метою. Добра робота! Проте, згідно з даними BuiltWith, обидва фреймворки Yii2 та Symfony2 використовуються в великих проектах:
- BlaBlaCar, сервіс для спільних поїздок, використовує Symfony2.
- NY Daily News працює на Yii2.
- Французький сайт відео за запитом NatGeo Play від National Geographic надає перевагу Symfony2.
- Starwood Hotels and Resorts Worldwide використовують Yii2 на своєму веб-сайті.
Ми також використовували Symfony2 для ряду проектів — від сервісу для моніторингу якості доріг до веб-сайту для фотографів — і можемо запевнити вас, що нам подобається використовувати Symfony2 у великих проектах. До речі, раніше ми ділилися деякими порадами щодо покращення продуктивності вашого проекту Symfony2 з Doctrine2 ORM.
Розширюваність
Обидва фреймворки мають високу розширюваність. Кількість розширень для Yii2 (наразі 2017) можна порівняти з кількістю пакетів для Symfony2 (2736). Обидва фреймворки використовують менеджер залежностей Composer для встановлення розширень.
Найбільш популярні пакети для Symfony2:
- FOSUserBundle призначений для управління користувачами (збереження даних користувачів у БД та отримання їх з неї).
- FOSRestBundle надає інструменти для створення REST-додатків.
- KnpMenuBundle дозволяє створювати об'єктно-орієнтовані меню.
- StofDoctrineExtensionsBundle використовується для інтеграції DoctrineExtensions у ваш проект.
- LiipImagineBundle дозволяє маніпулювати зображеннями за допомогою бібліотеки Imagine.
Що використовує Yii2 для виконання цих функцій?
- Для управління користувачами — розширення yii2-user-management.
- Для REST — розширення yii2-rest.
- Для створення меню — віджет Menu (yii\widgets\Menu).
- Для роботи з базами даних — ActiveRecord ORM.
Як Yii2, так і Symfony2 дозволяють розробникам використовувати сторонні бібліотеки у своїх проектах. Це робиться шляхом їх встановлення через Composer, а потім налаштування та підключення до автозавантажувача.
Тестування
Symfony2 інтегрований з бібліотекою PHPUnit. Тести повинні бути розміщені в підкаталозі пакету, який вони тестують. Дотримуючись цього принципу, ви можете запустити всі тести проекту за допомогою цієї команди:
$ phpunit -c app/
Yii2 інтегрований з Codeception. Вам потрібно встановити його глобально та зробити деякі налаштування. Потім ви можете запускати тести з /var/www/yii2/basic/tests/. Для виконання приймального тестування в Yii2 або Symfony2 вам потрібно використовувати Codeception. Тут ви можете дізнатися, як використовувати Codeception з Symfony2. Ви також можете спробувати використати PHPUnit з Selenium для приймального тестування.
Варто зазначити, що для спрощення тестування в Yii2 слід використовувати ін'єкцію залежностей. На практиці це означає, що не специфічні об'єкти програми повинні бути розміщені в доменному шарі, тоді як код, відповідальний за надання послуг, має бути поміщений в компоненти програми (які подібні до глобальних змінних). Але справа в тому, що клас служби повинен наслідувати yii-клас, і тому послуги з одного проекту не можуть бути використані в іншому. Symfony2 позбавлений цього обмеження.
Висновки та спостереження
“Symfony2 проти Yii2 — який з них кращий?” — питання без відповіді. Але, згідно з нашими спостереженнями, Yii2 люблять за простоту та швидкість, а також за надійну архітектуру MVC. Легкість у навчанні API також часто згадується серед його переваг. Що стосується недоліків, маршрутизація в Yii2 не є дуже потужною. Велика кількість віджетів також може вплинути на криву навчання.
Переваги Symfony2 включають гнучке маршрутизування, вбудовану систему кешування, а також використання Twig (але є спосіб використовувати Twig шаблонізатор в Yii2). Велика кількість сутностей часто вважається недоліком Symfony2. А синтаксис анотацій також має своїх противників.
Легкість установки, простори імен, хороші можливості для тестування та кілька розширень є характерними для обох фреймворків. Але в кінцевому підсумку найкращий спосіб вибрати між Symfony2 та Yii2 — це встановити обидва, спробувати написати застосунок і подивитися, що вам підійде.
Цю статтю оновлено 11 грудня 2015 року.