Самый популярный фреймворк 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, и уменьшенное количество используемой памяти.

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

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

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

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

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

JavaScript. Быстрый старт

Изучите основы JavaScript на практическом примере по созданию веб-приложения

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 фреймворка определите свой уровень знаний, а также базовые требования вашего проекта. Скорее всего, один или несколько продуктов из списка идеально подойдут вам.




Top