Как написать свой фреймворк на php. Практики и технологии. Почему выбирают фреймворки

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

Для этого нужно учесть достаточно большое количество характеристик, от «как быстро всё будет работать» до «а необходима ли нам эта фича?». И так каждый раз. Именно в моменты мозгового штурма команда сравнивает удобство фреймворка, скорость, набор фич, которые реализованы в нем или в совместимых с ним модулях.

Но какой же всё-таки лучше, быстрее и производительнее?

Разработчики постоянно проводят сравнение фреймворков, чтобы прояснить для себя этот вопрос. Например, в статье Lukasz Kujawa приведено сравнение PHP фреймворков. Одно «но» - статья за 2013 год. А ведь время идёт… Поэтому мы решили провести своё, актуальное сравнение фреймворков.

Для оценки производительности был использован PHP Framework Benchmark . Он предлагает для сравнения множество фреймворков (не только указанных выше), но автор не спешит добавлять в репозиторий новые версии проектов, что, конечно же, печально, хотя и не смертельно. При желании добавить новую версию не сложно. 


Одной из основных целей данной статьи также является попытка практическим путем определить улучшения в производительности и эффективности новых версий PHP. Поэтому тестирование было проведено на РНР 5.6/7.0/7.1

Что будем сравнивать?

Для сравнения были выбраны следующие фреймворки:
  • slim-3.0
  • ci-3.0
  • lumen-5.1
  • yii-2.0
  • silex-1.3
  • fuel-1.8
  • phpixie-3.2
  • zf-2.5
  • zf-3.0
  • symfony-2.7
  • symfony-3.0
  • laravel-5.3
  • laravel-5.4
  • bluz (версия 7.0.0 - для РНР5.6 и версия 7.4 для РНР7.0 и выше)
  • ze-1.0
  • phalcon-3.0
Тестирование условно разделено на 4 вида:
  • производительность (throughput),
  • занимаемая память (memory),
  • время выполнения (exec time),
  • количество подключаемых файлов (included files).

Методика тестирования и тестовый стенд

Машина, на которой производилось тестирование, обладает следующими характеристиками:

Operation system: Linux Mint 17 Cinnamon 64-bit
Cinnamin Version 2.2.16
Linux Kernel: 3.13.0-24-generic
Processor: Intel Core i3-4160 CPU 3.60 Ghz X 2
Memory: 8 GB

Server version: Apache/2.4.7 (ubuntu)
Server build: Jul 15 2016
php 7.1 / php7.0 / php5.6

Вводим команду git clone https://github.com/kenjis/php-framework-benchmark - и фрейм уже на нашей машине. Поскольку мы использовали Mint, необходимо выполнить настройку: 


# Added
net.netfilter.nf_conntrack_max = 100000
net.nf_conntrack_max = 100000
net.ipv4.tcp_max_tw_buckets = 180000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10

Sudo sysctl -p

Немного о структуре самого php-framework-benchmark:

/benchmarks - содержит bash-скрипты, отвечающие за сбор информации о количестве запросов в секунду (при помощи утилиты ab), количестве информации, сколько времени было потрачено и сколько файлов вызывалось из файла «точки старта».

/lib - директория, в которой находятся файлы, отвечающие за обработку полученной информации после вывода страницы “Hello world”, вывод таблиц с результатами и построение диаграмм.

/output - директория, в которую добавляются логи после выполнения тестирования. Здесь находится по два файла для каждого протестированного файла: .ab.log - лог после работы утилиты ab, и.output - содержит информацию, которая была выведена на экран (обычно это hello world и данные по памяти, времени выполнения, использовавшимся файлам).

Остальные папки - это заготовки фреймов, в которые уже добавлен один контроллер, который вернет строку “hello world” при обращении по URI, составленному по правилам обращения к данному фреймворку.

Для запуска теста сначала нужно настроить фреймворки. Рассмотрим два подхода.

Команда bash setup.sh настроит те фремворки, которые описаны в файле list.sh. Вы можете его редактировать: добавлять и удалять папки для тестирования. То есть конфигурировать так, как вам необходимо.

Командой bash setup.sh fatfree-3.5/ slim-3.0/ lumen-5.1/ silex-1.3/ вы можете установить какие-то отдельные фреймворки, задав их параметрами к команде. В некоторых случаях это удобно, но мы использовали первый подход.

После произведенной настройки фреймворков, мы запустили тестирование при помощи bash benchmark.sh .

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

Для отображения графиков мы воспользовались ссылкой http://localhost/php-framework-benchmark/ .

Как вы понимаете, необходимо было произвести настройку Apache и заставить его смотреть в папку с фреймом. Всё это описано в readme, поэтому вопросов не возникает.

Результаты тестирования фреймворков

Каждый раздел имеет структуру, состоящую из двух форм представления результатов.

Первая форма - это наглядный тип представления. Каждая характеристика содержит 4 диаграммы. Каждая диаграмма отображает сравнение фреймворков между собой, плюс накопительная диаграмма. Она была построена при использовании определенной версии РНР. Таким образом можно проследить эволюцию улучшений в PHP и фреймворках.

Вторая форма - это результат тестирования в виде таблицы (хватить наглядности, давайте говорить серьезно - дайте мне больше чисел!).

Производительность (throughput)

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

Мы получили следующие результаты (запросы в секунду):

php 5.6 php 7.0 php 7.1
phalcon-3.1.2 5058.00 5130.00 7535.00
ci-3.0 2943.55 4116.31 4998.05
slim-3.0 2074.59 3143.94 3681.00
yii-2.0 1256.31 2276.37 2664.61
silex-1.3 1401.92 2263.90 2576.22
lumen-5.1 1316.46 2384.24 2741.81
ze-1.0 1181.14 1989.99 1741.81
phpixie-3.2 898.63 1677.15 1896.23
fuel-1.8 1044.77 1646.67 1770.13
bluz-7.3.1 - * 1774.00 1890.00
zf-2.5 198.66 623.71 739.12
zf-3.0 447.88 1012.57 1197.26
symfony-2.7 360.03 873.40 989.57
symfony-3.0 372.19 853.51 1022.28
laravel-5.3 258.62 346.25 625.99
laravel-5.4 219.82 413.49 600.42

Для наглядности построили графики для каждой версии PHP:

PHP5.6:

PHP7.0:

PHP7.1:



Занимаемая память (peak memory)

Эта характеристика (в мегабайтах) отвечает за количество занимаемой фреймворком памяти при выполнении поставленной перед ним задачи. Чем меньше данное число, тем лучше для нас и для сервера:
php 5.6 php 7.0 php 7.1
phalcon-3.1.2 0.27 0.38 0.37
ci-3.0 0.42 0.38 0.38
slim-3.0 0.61 0.55 0.55
yii-2.0 1.31 0.91 0.91
silex-1.3 0.74 0.65 0.65
lumen-5.1 0.80 0.63 0.63
ze-1.0 0.79 0.56 0.56
phpixie-3.2 1.22 0.82 0.82
fuel-1.8 0.7 0.6 0.6
bluz-7.3.1 - * 0.69 0.69
zf-2.5 3.06 1.34 1.34
zf-3.0 2.12 1.09 1.08
symfony-2.7 3.11 1.41 1.42
symfony-3.0 2.86 1.30 1.32
laravel-5.3 2.91 2.04 2.04
laravel-5.4 3.04 1.45 1.49

* - bluz-7.3.1 не поддерживает php 5.6

PHP 5.6:

PHP 7.0:

PHP 7.1:

Сводная накопительная диаграмма (по фреймворкам):

Время выполнения

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

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

Время приведено в миллисекундах (ms):

php 5.6 php 7.0 php 7.1
phalcon-3.1.2 1.300 1.470 1.080
ci-3.0 0.996 0.818 1.007
slim-3.0 1.530 1.228 0.662
yii-2.0 1.478 1.410 1.639
silex-1.3 4.657 1.625 2.681
lumen-5.1 2.121 1.829 1.228
ze-1.0 2.629 2.069 1.528
phpixie-3.2 9.329 4.757 1.911
fuel-1.8 3.283 2.684 1.425
bluz-7.3.1 - * 1.619 1.921
zf-2.5 22.042 5.011 3.998
zf-3.0 12.680 2.506 2.989
symfony-2.7 6.529 3.902 2.384
symfony-3.0 9.335 3.987 2.820
laravel-5.3 19.885 4.840 2.622
laravel-5.4 19.561 4.758 3.940

PHP 5.6:

PHP 7.0:

PHP 7.1:

Сводная накопительная диаграмма (по фреймворкам):

Подключаемые файлы

Характеристика, отвечающая за количество подключаемых файлов, которые описаны в файле «точки входа» фреймворка. Понятно, что система тратит какое-то время на поиск и подключение. Следовательно, чем меньше файлов, тем быстрее будет осуществляться первый запуск приложения, так как обычно в последующие разы фреймворк работает с кэшем, что ускоряет работу:
phalcon-3.1.2 5
ci-3.0 26
slim-3.0 53
yii-2.0 46
silex-1.3 63
lumen-5.1 37
ze-1.0 68
phpixie-3.2 163
fuel-1.8 53
bluz-7.3.1 95
zf-2.5 222
zf-3.0 188
symfony-2.7 110
symfony-3.0 192
laravel-5.3 38
laravel-5.4 176


Разница в количестве подключаемых файлов между Laravel 5.3 и Laravel 5.4 может показаться странной и дать повод к обсуждениям, спорам и т.п. Спешим разъяснить ситуацию. Как вы знаете, с помощью команды

Php artisan optimize --force

В Laravel 5.3 можно сгенерировать файл compiled.php, и тем самым уменьшить количество подключаемых файлов, собрав их в один. Но есть одно «но»: команды для генерации этого файла в Laravel 5.4 больше нет. Разработчик решил удалить эту фичу, так как посчитал (https://github.com/laravel/framework/pull/17003), что для настройки производительности лучше использовать opcache.

Стоит ли обновляться?

Сводные данные по версиям более чем наглядно показывают, какой произойдет прирост производительности и эффективности использования ресурсов при переходе (или изначальном выборе) на новую версию PHP.

При переходе с PHP 5.6 на PHP 7.0 средний прирост производительности составил почти +90%, при этом минимальный прирост производительности составил +33% для Laravel 5.3, а максимум - >200% для Zend Framework 2.5.

Переход с версии 7.0 на 7.1 уже не так шокирует, но всё же в среднем даёт почти 20% прирост производительности.

Сведя все полученные данные по производительности различных версий PHP, получим вот такие «матрасы»:


Забавный факт : Laravel 5.3 показал наименьший прирост производительности при миграции с PHP 5.6 на PHP 7.0, но при этом наибольший прирост при миграции с версии 7.0 на версию 7.1, и как итог - производительность Laravel 5.3 и 5.4 на PHP 7.1 практически одинакова.

Потребление памяти тоже оптимизировали, так что переход с PHP 5.6 на PHP 7.0 позволит вашему приложению потреблять на 30% меньшем памяти.

Обновление с версии 7.0 до версии 7.1 практически не даёт прироста, а в последних Symfony и Laravel так и вовсе уходим в «минус», потому что они начинают чуть больше «кушать».


Осталось ещё посмотреть на время выполнения, и да, тут тоже всё отлично:

  • переезд с PHP 5.6 на PHP 7.0 подарит вам ускорение в среднем на 44%.
  • переезд с PHP 7.0 на PHP 7.1 подарит вам ускорение ещё на 14%.

Примечание. Тестирование при помощи ab - с чем мы столкнулись


«А что со slim и phpixie» - этот вопрос подтолкнул на расследование поведения утилиты ab при взаимодействии с этими фреймворками.

Выполним тест отдельно для Slim-3.0:

Ab -c 10 -t 3 http://localhost/php-framework-benchmark/slim-3.0/index.php/hello/index

Concurrency Level: 10
Time taken for tests: 5.005 seconds
Complete requests: 2
Failed requests: 0
Total transferred: 1800 bytes
HTML transferred: 330 bytes
Requests per second: 0.40 [#/sec] (mean)
Time per request: 25024.485 (mean)
Time per request: 2502.448 (mean, across all concurrent requests)
Transfer rate: 0.35 received

Что-то не так - количество запросов в секунду всего 0.4 (!)

Ab -c 10 -t 3 http://localhost/php-framework-benchmark/laravel-5.4/public/index.php/hello/index

Concurrency Level: 10
Time taken for tests: 3.004 seconds
Complete requests: 1961
Failed requests: 0
Total transferred: 1995682 bytes
HTML transferred: 66708 bytes
Requests per second: 652.86 [#/sec] (mean)
Time per request: 15.317 (mean)
Time per request: 1.532 (mean, across all concurrent requests)
Transfer rate: 648.83 received

Дело было в Keep Alive соединении, подробнее можно узнать тут.

“When you make requests with «Connection: keep-alive» the subsequent request to the server will use the same TCP connection. This is called HTTP persistent connection. This helps in reduction CPU load on server side and improves latency/response time.

If a request is made with «Connection: close» this indicates that once the request has been made the server needs to close the connection. And so for each request a new TCP connection will be established.

By default HTTP 1.1 client/server uses keep-alive where as HTTP 1.0 client/server don’t support keep-alive by default.”


Таким образом, тест для Slim должен выглядеть так:

Ab -H "Connection: close" -c 10 -t 3 http://localhost/php-framework-benchmark/slim-3.0/index.php/hello/index

Concurrency Level: 10
Time taken for tests: 3.000 seconds
Complete requests: 10709
Failed requests: 0
Total transferred: 2131091 bytes
HTML transferred: 353397 bytes
Requests per second: 3569.53 [#/sec] (mean)
Time per request: 2.801 (mean)
Time per request: 0.280 (mean, across all concurrent requests)
Transfer rate: 693.69 received

Заключение

Как и стоило ожидать безоговорочным лидером по производительности (но не скорости разработки) является Phalcon. Второе место, - а на самом деле первое среди PHP-фреймворков (а не C, на котором написан исходный код Phalcon) - занимает CodeIgniter 3!

Конечно же, не стоит забывать, что каждому инструменту своё предназначение. Если вы выбираете небольшой и легкий фреймворк и собираетесь написать на нём что-то отличное от простейших приложений или REST API, то, скорее всего, вы столкнётесь с проблемами при расширении функционала. И наоборот - избыточность полнофункциональных, больших фреймворков повлечёт за собой финансовые издержки на содержание хостинга даже для элементарных приложений под большой нагрузкой.

Это тестирование проводилось для того, чтобы убедить/рассказать/укрепить позицию языка РНР версий 7.0 и 7.1 в вашем сознании и в будущих проектах, донести информацию о том, что производительность действительно возросла.

Рефакторинг внутренних структур данных и добавление дополнительного этапа перед компиляцией кода в виде абстрактного синтаксического дерева - Abstract Syntax Tree (AST), - привели к превосходной производительности и более эффективному распределению памяти. Результаты сами по себе выглядят многообещающе: тесты, выполненные на реальных приложениях, показывают, что PHP 7 в среднем вдвое быстрее PHP 5.6, а также использует на 50% меньше памяти во время обработки запросов, что делает PHP 7 сильным соперником для компилятора HHVM JIT от Facebook.

Тесты полностью подтверждают и вдвое ускорившуюся обработку запроса в РНР7, и уменьшенное количество используемой памяти.

Однако, работая фрилансером, часто встречаю сайты на самописных системах. Программисты пишут их не от хорошей жизни. В зависимости от степени простоты(сложности) проекта чрезмерно или наоборот недостаточно, применение готовой системы, и на ее переделки уходит больше времени, чем на создание сайта с нуля. К примеру, для сайта одностраничника не нужно тяжелой системы типа Joomla или фреймворка типа Yii , а у CMS типа Texpattern может не хватить функционала. Плюс задачи, которые ставит заказчик, могут быть весьма специфичными, и достаточно тяжело реализуемыми на готовой системе.

Для примера можно взять работы с моделями в . Речь идет об ActiveRecord. У Yii на официальном сайте есть отличный мануал по созданию блога . Если придерживаться его, и делать все, как написано, то через пару часов изучения, можно получить полноценный блог. С категориями, метками, пользователями и административной панелью.

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

Как сказал один наш комик - "тут начинается вестерн". То, что в SQL бы заняло 3 строчки кода, в Active Record займет пару ночей чтения мануалов, и экспериментов. Потому что, на первый взгляд тривиальная задача, вдруг вызывает необъяснимый баг Yii, о котором слышали полтора человека и оба китайцы. Пример не надуманный, те кто программировал на Yii используя Actve Record поддержат.

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

В мире CMS тоже далеко ходить не надо. При работе над модулем Яндекс карт для Joomla нужно было подключить в админке сайта javascript файл. Недельное изучение системы ничего не дало. Такого функционала в модулях попросту нет. Надо сказать, что я выкрутился используя функционал расширенных полей подключил нужный файл. Но то, сколько времени у меня на это ушло, несоизмеримо с тем, если бы система была построена по моим законам, и я знал, что и где в ней подключается.

Об этом расскажу в этой статье. Как написать php фреймворк с нуля. Опишем основные техники проектирования MVC фреймворков на чистом php без использования сторонних библиотек.

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

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

Однако и плюсы тоже есть, система будет полностью под вашим контролем. Никаких ограничений API и требований системы. Только чистый vanilaPHP и ничего лишнего.

Оставим лирику, приступим наконец к коду.

Точка входа

Любой сайт, CMS или фреймворк начинается с точки входа. Обычно это index.php в корне сайта. Но мы не будем так делать. Чтобы программист, который работает с нашим фреймворком сразу разобрался, что все данные идут через точку входа, назовем файл main.php. Тогда будет очевидно - все запросы перенаправляются через.htaccess

AddDefaultCharset utf-8 RewriteEngine on php_value upload_max_filesize 50M php_value post_max_size 50M php_value display_errors 1 DirectoryIndex main.php?controller=index ErrorDocument 404 /main.php?controller=error RewriteRule ^index.html$ main.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ main.php?route=$1

Первые 8 строк - это вспомогательные настройки, которые пригодятся для фреймворка в будущем. Мы установили кодировку utf-8 по умолчанию, сайт будет работать на ней. Включили модуль apache Rewrite, для того чтобы перенаправить все не статичные запросы на main.php. Это и делают 3 последние строчки. Вся строка запроса, которая идет после домена, будет передана в переменную $_GET["route"]. Т.е. запрос http://sitename.ru/kolesa/perellli/?id=5 превратится в http://sitename.ru/main.php?route=kolesa/perellli/ &id=5

Дальнейшие манипуляции с разбором URL производятся с помощью PHP. Это распространенный прием, вы легко можете воспользоваться им в других системах. Так работает и Yii. Но наш фреймворк в отличие от Yii без.htaccess работать не сможет.

Файл main.php не должен делать много, он лишь определит константы путей, подключит фреймворк и запустит приложение

start();

Структура

Теперь продумаем структуру нашего фреймворка. Удобно, чтобы его файлы лежали в отдельной папке. Сделаем такую структуру

Application -- controllers -- models -- views -- config.php - ideal -- classes -- framework.php -- config.php .htaccess main.php

в папке ideal будет лежать наш идеальный =) движок, а в папке application файлы пользователя.

в файле framework.php определим автозагрузчики классов, для того чтобы не писать руками каждый раз include "classname.php"; Я уже писал про эту технику

в этом файле будут еще и другие системные действия. Но пока хватит и этого.

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

Теперь опишем класс App, он находится в папке classes движка.Его метод start и будет запускать наше приложение.

parse(); $controller = app::gi(Router::gi()->controller."Controller"); $controller->__call("action".Router::gi()->action); } }

Класс наследует абстрактный класс Singleton . Удобство в том, что экземпляр любого класса, который наследует от Singleton, можно получить из любого места программы через его метод gi() К примеру, экземпляр нашего приложения можно получить App::gi(). Этот метод вернет единственный экземпляр класс App. Один экземпляр может создать проблему, когда нужно использовать несколько баз данных. Поэтому к классу db его лучше не применять.

В коде появляются класс Router. Он будет парсить переменную $_GET["route"] и и возвращать контроллер и action - т.е. метода этого контроллера. Так как пока мы пишем лишь каркас, то этот класс ничего делать не будет. Лишь заполнит свои соответствующие поля.

controller = $_REQUEST["controller"]; if(isset($_REQUEST["action"])) $this->action = $_REQUEST["action"]; } }

Каркас фреймворка готов. Теперь создадим один жизненно важный контроллер application/controllers/UserController.php

Пользователи нужны в любой системе.

Он пока ничего не делает. Лишь создает модель User и выводит свое представление на экран. Модель User наследует класс classes/Model.php

data[$name])?$this->data[$name]:null; } function __set($name,$value){ $this->data[$name] = $value; } }

и код модели application/models/User.php

Как видите он тоже ничего особого не делает.

Hello name?>!!!

Таким образом структура нашего фреймворка примет такой вид

Application -- controllers --- UserController.php -- models --- User.php -- views --- user ---- index.php -- config.php - ideal -- classes -- framework.php -- config.php .htaccess main.php

Запустив в адресной строке

http://sitename/index.html?controller=user&action=index в браузере мы увидим заветное

Hello Valeriy!!!

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

Как мы все знаем, PHP является наиболее популярным и удобным языком программирования сценариев. Он делает процесс разработки гораздо проще и помогает сократить затраты и время. Именно поэтому PHP всегда в центре внимания языков программирования.

С появлением PHP создания, сложные веб-проекты (в PHP) с нуля стали бессмысленным решением. Чтобы как-то структурировать процесс разработки, были созданы фреймворки PHP.

Фреймворки активизируют процесс программирования. Они помогают писать и структурировать код, выполнять схему MVC и масштабировать проекты. Таким образом, нельзя отрицать тот факт, что фреймворки PHP являются единственным способом успешного программирования.

Давайте рассмотрим подробнее каждый из них.

# 1 Laravel

В 2015 году SitePoint признали Lavarel лучшим фреймворком для разработки PHP. Эта структура является достаточно новой (построена в 2011 году), но это уже имеет внушительную экосистему, которая выросла за последние несколько лет.

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

Lavarel имеет свой собственный механизм шаблонов «Blade» и элегантный синтаксис, который делает его наиболее легким для выполнения общих задач: аутентификация, сессии, анализ очереди, ekexitybt маршрутизации. Lavarel имеет встроенную среду программирования Homestead, которая строится в основном на «Vagrant». Все возможные случаи для этой структуры тщательно анализируются в Laracasts видео-уроках.

# 2 Symfony

Этот фреймворк PHP состоит из нескольких компонентов. Он написан в рамках PHP5, который также использует MVC. Symfony предлагает быструю разработку и веб управление, которое помогает выполнять легко рутинные задачи веб-программирования. Одно из главных его преимуществ — несколько баз данных поддержки:

    базы данных MySQL;

    базы данных PostgreSQL;

    SQLite или любой другой ПДО-совместимых баз данных.

Symfony состоит из PHP-библиотек, которые могут быть повторно использованы и развернуты в различных задачах: создание форм, объектов и шаблонов конфигурации и аутентификации и т.д. Любой компонент может быть установлен с помощью «Композитора» — PHP менеджера пакетов.

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

# 3 Phalcon

Phalcon был создан четыре года назад и вскоре стал популярным среди разработчиков серверов. Эта структура считается очень быстрой, потому что она разработан в C и C++, что позволяет достичь высокой оптимизации производительности. Нет необходимости изучать C для работы с Phalcon. Все функциональные возможности находятся в PHP-классах, которые могут быть использованы для любых задач. Phalcon имеет много других замечательных функций: системы безопасности, многоцелевые автозагрузчики, управление ресурсами, перевода, кэширования и т.д. Документации Phalcon могут быть легко использованы, несмотря на то, что являются довольно обширными.

Так как Phalcon первоначально был создан в качестве дополнения к C, его архитектура была оптимизирована для низкого уровня. Это помогает сократить потребление ресурсов, что является типичным для основанных MVC приложений.

# 4 CodeIgniter

CodeIgniter имеет многолетний стаж использования в области PHP-фреймворков. Она может быть легко установлена и требует минимальной настройки пользователя. CodeIgniter является хорошим решением, если есть какие-либо возможные конфликты различных PHP-версий. Он отлично работает на всех платформах. Важно заметить, что CodeIgniter не полностью основана на MVC.

CodeIgniter имеет бесконечное пространство для разработки. Идея состояла в том, чтобы сделать простую структуру до 2 Мбайт, с возможностью добавления каких-либо плагинов, если есть необходимость в более сложной функциональности. Один из других его преимуществ является скорость. CodeIgniter справляется гораздо быстрее с базами данных задач по сравнению с другими системами.

Как вы можете видеть, этот PHP фреймворк прост и легок в освоении. Легко расширяемый, безопасный, использует простой подход — CodeIgniter идеально подходит для начинающих.

# 5 Yii Framework

Высокопроизводительная PHP-структура, которая использует MVC. Она предназначена для быстрой и эффективной разработки веб-приложений. Это самая быстрая PHP-структура, поскольку она использует нагрузку по требованию. Это объектно-ориентированная среда, и именно поэтому он использует “самонеповторяющийся” принцип. В соответствии с этим основа кода всегда остается ясной и логичной.

Эта структура позволяет быстро реализовать крупномасштабные пользовательские проекты, такие как интернет-порталы, CMS и другие сложные системы. Yii представляет собой набор инструментов эффективных и готовых решений. Некоторые из них:

  • ActiveRecord для реляционных и NoSQL баз данных;

  • Многоуровневая поддержка кэширования.

Выбор механизмов здесь прост, поэтому структура будет удобна тем, кто ранее занимался разработкой внешнего интерфейса. Yii имеет Gii — генератор кода, который вносит свой вклад в объектно-ориентированную разработку, быстрого прототипирования, а также предлагает веб-интерфейс пользователя, где он может генерировать необходимый код.

# 6 Zend

Zend программируется в объектно-ориентированном стиле, который использует последние инновации PHP. Он разработан, чтобы быть менее зависимым от других компонентов, каждый из которых можно использовать по отдельности. Тем не менее, стандартный набор библиотек Zend дает нам очень мощный и масштабируемый инструмент разработки. Кроме того, он предлагает надежный и высокопроизводительный MVC и легкую в использовании абстракцию базы данных, которые вместе делают его лучшим PHP фреймворком для веб-приложений.

Zend используется для разработки веб-продуктов на PHP 5.3+. Эта структура использует наиболее полезные PHP 5.3 функции и надежные решения с различными вариантами конфигурации. Обычно Zend не рекомендуется для использования в небольших приложениях, но для крупномасштабных проектов это может быть лучшим решением. Разработчики Zend учли Agile методологию, которая позволяет создавать высококачественные приложения для корпоративных клиентов.

# 7 CakePHP

CakePHP была написана 10 лет назад в рамках программирования PHP для создания веб-проектов, и до сих пор имеет активное и растущее сообщество. Как и большинство других структур, он реализует MVC шаблон. CakePHP изначально был создан как клон популярного Ruby On Rails, и многие из идей Cake были заимствованы из RoR. Тот факт, что CakePHP поддерживает не только PHP5, но и PHP4 отличает его от других конкурентов на рынке.

Прошло десять лет, но CakePHP все еще находится в топе. С ним легко научиться работать. Такое интегрированное приложение, как CRUD незаменимо при взаимодействии с базой данных. В последних релизах CakePHP 3.x улучшено управление сессиями, а также расширены возможности создания большего числа отдельных библиотек.

Среди проектов, реализованных в CakePHP, есть сайты BMW и Hyundai. Вы можете выбрать эту структуру, если ваши веб-приложения нуждаются высоком уровне защиты, поскольку CakePHP имеет такие большие возможности, как:

    Ввод проверки;

    Система защиты использует введенный SQL;

    Предотвращает межсайтовый скриптинг;

    Защищает от запроса межсайтовой подделки, и многое другое.

Лучшие PHP фреймворки. Итог

Сегодня мы попытались рассмотреть наиболее популярные PHP-фреймворки. Но как насчет лучшего? Какой из них является наиболее популярным фреймворком PHP? Каждая структура имеет свои плюсы и минусы. Но вы не найдете лучший, потому что они они хороши, пусть даже есть некоторые различия между ними. На самом деле, все зависит только от потребностей клиента. Единственное, что может сделать вас уверенным в конечном продукте развития компании. Не стесняйтесь нанять команду PHP-экспертов. Мы разрабатываем продукты для стартапов, для бизнес-компаний и т.д. На протяжении многих лет мы программировали десятки программных продуктов и завершили много успешных проектов. Если вы заинтересованы в PHP продуктов свяжитесь с нами для получения более подробной информации. [email protected]

Выбор слишком велик, а выделить правильный фреймворк стало довольно проблематично. Как и у множества других разработчиков, ваш взгляд может пасть на популярные, проверенные и надежные фреймворки Bootstrap и Foundation. Однако новые, но не такие известные фреймворки могут намного больше подходить под ваши нужды. В таких условиях вам просто необходимо разобраться в самых популярных фреймворках на сегодня.

На что нужно смотреть при выборе front-end фреймворка

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

Ваш уровень – учитывайте уровень своих знаний при выборе front-end фреймворка. Если вы новичок, возможно, вам подойдет надежный фреймворк Bootstrap, в котором есть множество встроенных виджетов, и который потребует от вас минимальных навыков программирования. Если же вы более продвинутый разработчик, тогда вам подойдет более простой фреймворк, который даст вам больше пространства для кастомизации. Такие фреймворки компактнее и в них меньше кода, что будет только плюсом.

Адаптивный дизайн – любой разрабатываемый вами сайт должен хорошо отображаться на всех устройствах, так как все больше людей заходят в интернет через мобильные устройства. Сайт Similar Web выпустил отчет состояние мобильного интернета в США за 2015 год , в котором говорится, что 56 процентов потребителей трафика ведущих сайтов в США заходят в интернет с мобильных устройств. Ищите front-end фреймворки с поддержкой адаптивного дизайна, тогда у вас будет на одну проблему меньше.

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого роста с нуля в сайтостроении

CSS препроцессоры – если вы используете CSS препроцессоры, к примеру, Sass или LESS, проверьте, чтобы они были совместимы с фреймворком.

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

Прототипы – идеальный front-end фреймворк позволяет быстро создавать вайрфреймы и прототипы для ускорения процесса дизайна и разработки.

И самое главное: хороший front-end фреймворк упрощает, модернизирует и ускоряет процесс дизайна и разработки сайта и в то же время обеспечивает вас гибкостью и функциональностью для создания уникального продукта.

Без лишних слов представляю вам восьмой по популярности front-end фреймворк в 2016 году.

Bootstrap

ТОП был бы неполным без очень популярного front-end фреймворка Bootstrap . Авторами фреймворка являются создатели Twitter, которые выпустили его в 2011 году. Самый используемый open-source фреймворк в мире.

Как и в любой другой эффективный front-end фреймворк, в Bootstrap входят компоненты HTML, CSS и JS. Фреймворк придерживается стандартов адаптивного веб-дизайна, позволяя вам создавать адаптивные сайты любой сложности и размеров.

Постоянные обновления Bootstrap гарантируют, что вы получите самые новые и лучшие функции. К примеру, почти сразу в фреймворк были добавлены темы, отвечающие стандартам material design от Google. Темы были улучшены для поддержки Sass.

поддержка адаптивного веб-дизайна (можно отключить по желанию);

обширная документация.

редко используемые стили увеличивают вес стандартного фреймворка до 276 Кб;

слишком много HTML классов и DOM элементов, что загрязняет код и путает пользователя.

Подходит для новичков и тех, кто предпочитает надежные front-end фреймворки.

нет заблокированных стилей, что дает вам больше гибкости;

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

довольно большой вес файлов по умолчанию;

немного сложноват для новичков.

Подойдет разработчикам с приличным опытом, чья основная задача – быстрая разработка, привлекательные и адаптивные сайты.

Materialize

Фреймворк Pure создан командой разработчиков Yahoo. В комплекте идет легкий массив CSS модулей, которые подходят под любой проект. С Pure вы с легкость сможете создавать адаптивные кнопки, меню, сетки, таблицы и т.д. Фреймворк написан на чистом CSS и не поддерживает JS или JQuery плагины.

После минификации и сжатия через Gzip фреймворк Pure сжимается до 4.5Кб, что делает его одним из самых легких и проворных front-end фреймворков. Pure идеально подходит для мобильной разработки, из-за чего он приглянулся множеству разработчиков.

очень легкий, что обеспечивает быструю загрузку даже на мобильных устройствах;

гибкий массив CSS модулей можно использовать в абсолютно любом дизайне и проекте.

написан на CSS без поддержки JS или JQuery плагинов.

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

Skeleton

Skeleton – легковесный адаптивный шаблон всего лишь из 400 строк кода. Фреймворк включает минимально необходимый функционал для старта разработки. В отличие от описанных выше фреймворков, это не комплексное решение.

Skeleton – адаптивный фреймворк, в основе которого лежит 12-ти колоночная сетка. В комплекте только необходимые элементы: кнопки, списки, таблицы, формы и т.д.

очень легкий;

простота и удобство для написания маленьких проектов.

отсутствие широкого выбора компонентов, в отличие от больших фреймворков.

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

UIKit

UIKit – высокомодульный front-end фреймворк, выделяющийся среди большинства по множеству причин. Главная причина – наличие двух препроцессоров, LESS и Sass.

Благодаря своим гибким и адаптивным компонентам с понятными именами, UIKit стал одним из самых популярных front-end фреймворков.

Еще большую универсальной фреймворку придают 30 модульных компонентов. Среди компонентов: меню, HTML формы и таблицы, JS компоненты, например, выезжающие вкладки и модальные окна, общие элементы, такие как кнопки, знаки и перекрывающие слои, а также компоненты макета, такие как жидкие, адаптивные системы сеток.

высокая кастомизация;

уникальная модульная структура, позволяющая добавлять компоненты к стилям, не оказывая влияния на общие стили;

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

фреймворк еще новый, в сети по нему очень мало ресурсов.

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

Milligram

Milligram – еще один легковесный фреймворк, похожий на Skeleton. После сжатия через Gzip размер файла достигает 2Кб, что обеспечивает разработчикам простой и удобный старт.

Система сеток в Milligram отличается от большинства, так как она использует стандарт CSS Flexible Box Layout Module. Также в комплекте есть пара ключевых компонентов, которые помогут вам начать работу, среди которых шрифты, кнопки, формы, списки, таблицы, цитаты и т.д.

очень легкий, всего 2Кб после сжатия через Gzip;

использует систему сеток Flexbox.

фреймворк довольно новый, про него очень мало информации;

минимальное количество компонентов стилей по сравнению с более крупными фреймворками.

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

Susy

Некоторые скажут, что Susy – не совсем front-end фреймворк, так как он решает сложные задачи по макетированию. По факту, множество людей расценивают Susy, как систему сеток, но она может стать незаменимым инструментом для людей, работающих с макетами.

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

Susy позволяет создавать сетки любой сложности. Если вы пытались решить проблему с созданием сложной системы сеток, вам поможет Susy.

повышенная гибкость позволяет создавать сетки любой сложности;

автоматические вычисления.

не покрывает все вопросы дизайна сайта, что потребует еще одного фреймворка;

нет встроенных сеток.

Подходит разработчикам с уникальными задачами по созданию макетов.

Статистика по front-end фреймворкам

Ваше решение не должно основываться на популярности фреймворка. Фреймворк необходимо выбирать, исходя из потребностей в разработке. И все же интересно, как расположатся все эти фреймворки в рейтинге. Список ниже показывает, сколько звезд получил каждый проект на GitGub на момент написания статьи (от самых популярных до менее популярных).

Bootstrap: 101,433 звезд

Semantic-UI: 28,170 звезд

Foundation: 24,127 звезд

Materialize: 21,515 звезд

Material UI: 19,631 звезд

Pure: 14,967 звезд

Skeleton: 12,622 звезд

UIKit: 7,433 звезд

Milligram: 4,195 звезд

Susy: 3,506 звезд

Кроме того, в сравнении ТОП-5 front-end фреймворков на Google Trends видно, что Bootstrap все еще на голову опережает своих конкурентов по числу упоминаний.

Заключение

Как видно, разные front-end фреймворки имеют свои преимущества. Что подходит одному разработчика или проекту, не подходит другому. Поэтому крайне важно провести анализ множества вариантов, прежде чем выбрать что-то конкретное.

Перед выбором front-end фреймворка определите свой уровень знаний, а также базовые требования вашего проекта. Скорее всего, один или несколько продуктов из списка идеально подойдут вам.

В настоящее время нет необходимости создавать свой сайт с помощью сложных языков веб-разработки. Теперь можно обойтись без самостоятельного создания библиотек, компонентов, обеспечения разделения модели и низкоуровневой безопасности. Благодаря PHP-фреймворкам можно пропустить эти этапы.

Давайте рассмотрим 9 лучших фреймворков с помощью которых вы сможете создавать удивительные адаптивные сайты.

1. Symfony 2

Этот фреймворк определенно не для новичков. Со всеми его многочисленными функциями моделей, объектов, маршрутов, контроллеров он может показаться сложным. Но если у вас есть солидный объем знаний по PHP и HTML , можно создавать с его помощью невероятные веб-приложения.

Symfony — это открытый проект, размещенный на GitHub , и более 300 000 программистов работали и улучшали свой код с его помощью.

Symfony 2 состоит из набора многоразовых PHP-компонентов , которые легко устанавливаются на большинство платформ. И, как известно, он очень стабилен и гибок.

2. Phalcon

Это фреймворк, написанный на C , самая быстрая PHP-платформа. Он предлагает большое количество новейших функций, таких как маршрутизация, просмотр шаблонов, кеширование и ORM , контроллеры, язык запросов и т. д.

Phalcon всегда на шаг впереди конкурентов благодаря низким системным требованиям, которые позволяют использовать намного меньше ресурсов. А также за счет внедрения зависимостей, наборам помощников PHP , PSR-4 автозагрузчику и продвинутым функциям маршрутизации. Он подходит неопытных пользователей, так как на его изучение не уходит много времени. Вот какой фреймворк нужно выбрать в PHP .

3. Laravel

Laravel — самый популярный фреймворк 2016 года. Это также и самый простой для изучения фреймворк. Самой мощной его функцией является собственный механизм шаблонов, называемый «Blade », который не потребляет дополнительных ресурсов на вашем сайте.

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

4. Yii

Еще один простой в использовании фреймворк с открытым исходным кодом. Процесс разработки будет проходить гладко и эффективно благодаря использованию PHP5 . Фреймворк включает в себя все необходимые для профессиональных сайтов функции, а также CMS и CRM . Это две отправные точки, которые представляют собой основу любого надежного скрипта.

Когда речь заходит об обеспечении безопасности, Yii работает просто удивительно . Gii , доступный в рамках Yii , это мощный генератор кода. Благодаря ему вы можете легко создавать формы, модули, CRUD , модели и т. д.

5. CodeIgniter

Надежный полнофункциональный инструмент для создания веб-приложений. Он занимает всего 2 МБ места на диске, а руководство для пользователей подробно описывает компоненты, благодаря которым можно легко обойти сложный MVC .

CodeIgniter предоставляет инструмент подстановки с шаблонами и плагинами.

6. Cake

Наш рейтинг фреймворков PHP продолжает современная среда, которая также поддерживает 9 языков, хотя она была выпущена еще в 2005 году. CakePHP 3.3 позиционируется, как мощный фреймворк.

С его помощью даже начинающие программисты смогут создать визуально привлекательные сайты. Фреймворк шаблон MVC , который представляет собой модельную поддержку для более эффективного управления данным. А также функции ORM и множество компонентов, плагинов и помощников.

CakePHP больше всего подходит для коммерческих сайтов и не требует конфигурирования, так как не содержит сложных файлов YAML или XML .

7. ZendPHP

Данный фреймворк был выпущен 9 лет назад, и до сих пор не теряет актуальности. Это объектно-ориентированный фреймворк, поэтому лучше всего использовать его для наследования или интерфейсов. Его последняя версия оптимизирована под PHP7 , но также прекрасно поддерживается и PHP 5.5 .

Zend заменил стек MVC более простой альтернативой, построенной на шаблонах промежуточного программного обеспечения, таких как Apigility .

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

8. FuelPHP

Fuel рекомендован, как для начинающих, так и для профессионалов. Это популярный фреймворк PHP , который поддерживает HMVC . Он признан во всем мире за свою простоту, гибкость и современные функции.

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

9. Slim

Гибкий PHP-фреймворк , который можно отнести к категории микрофреймворков. Он поставляется с оптимизированным маршрутизатором, функцией рендеринга шаблонов с пользовательскими представлениями, безопасными куками, функциями мгновенных сообщений, кеширования HTTP , обработки ошибок.

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

Перевод статьи «9 Best PHP Framework s to Build Awesome Responsive Websites » дружной командой проекта .




Top