81 Востаннє редагувалося nobuna (18.12.2014 22:29:56)

Re: PHP фреймворки

Нате вам мій: http://algorithm.pe.hu/
:) не треба дякувати

Подякували: quez1

82

Re: PHP фреймворки

nobuna написав:

Нате вам мій: http://algorithm.pe.hu/
:) не треба дякувати

Вразливості є? А якщо знайду?

Прихований текст

Зробіть щось із дизайном.

Подякували: nobuna1

83

Re: PHP фреймворки

quez написав:

А якщо знайду?

То напишіть на nobuna@meta.ua

84

Re: PHP фреймворки

Ніхто не в курсі, чи використовують якісь php-фреймворки композицію (замість наслідування)?

85

Re: PHP фреймворки

Я б сказав що більшість з них використовує і паттерн композиції, і наслідування.

86 Востаннє редагувалося ktretyak (01.01.2015 09:02:31)

Re: PHP фреймворки

Читаючи доку по PHP traits, бачу, що traits здається призначені щоб їх використовували саме як елементи композиції.

Оновлено:
Прикольно! Це те що мені не вистачало, коли "просту" сторінку потрібно зробити з доступом по авторизації, причому не змінюючи ланцюжка наслідувань. Просто в її контролер додаєте, наприклад, use \Trait\AuthFile; і все.

87 Востаннє редагувалося ktretyak (03.01.2015 07:08:22)

Re: PHP фреймворки

На даний момент форкнув KohanaFramework 3.3.2, додав namespace, PSR-4, Pimple DI, скоротив дещо код... серед іншого залишилась підтримка сесій, автентифікації, баз даних, роутерів (з можливістю зворотньо відтворювати URL)... але не буде тугуватого ORM, поки що не бачу потреби в unitests, minion (різні задачі з командного рядка).

Хоча код мого фреймворка ще дуже сирий, але коли набридає кодити, то міряюсь, так би мовити, з іншими мікро-фреймворками тестами, за допомогою ApacheBench.

Наприклад, такими.
Друкуємо динамічно 100 сторінок, задіявши весь ланцюжок MVC, але просто hello, world!

Кохана 3.3.2 з коробки

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-ko-3.3.2-default.png

... 2,35 секунд (42,5 сторінок за секунду).

Кохана 3.3.2 із задізейбленою ініціалізацією конфігураційного класа і логів

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-ko-3.3.2.png

... 2,018 секунд (49,5 сторінок за секунду).

Silex-1.2.2

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-silex-1.2.2.png

... 3,285 секунд (30,5 сторінок за секунду).

CodeIgniter 2.2.0

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-ci-2.2.0-default.png

... 1,535 секунд (65 сторінок за секунду!). Красавчик, правда ж?

Мій фреймворк

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-my-fw.png

... 1,507 секунд (66 сторінок за секунду). Фактично на рівні похибки з CodeIgniter'ом. Прикольно.

Але на моє здивування сама остання версія CodeIgniter (він же такий популярний!) має ще дуже багато не ООП коду. Так на вскидку, то не менше третини він написаний на "функціях"...

Подякували: Chemist-i1

88

Re: PHP фреймворки

Порівняйте тесте ще з yii

89

Re: PHP фреймворки

Думаю він буде повільніший за всіх тут протестованих, бо він не мікрофреймворк, а повноцінний фреймворк.

Спробував його ради інтереса поставити, але в мене запитало пароль чомусь...
https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-fail-yii.png

90 Востаннє редагувалося ktretyak (03.01.2015 08:19:41)

Re: PHP фреймворки

При встановленні дотримувався рекомендацій, викладених на сайті yii2 - встановлював через composer. Але і сьогодні проблема залишилась.

Тепер вибрав інший варіант встановлення - просто скачавши готовий архів з базовою основою yii v2.0.1.
Поставив, все успішно запрацювало, після чого зайшов у /views/layouts/main.php і видалив там весь код, щоб він видавав лише hello, world!.

Як і очікувалось, результат найгірший за всі попередні показані тут фреймворки

yii 2.0.1

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-yii-2.0.1.png

Тобто видає 100 сторінок з hello, word! за 4 секунди (24 сторінки за секунду)

Обидва: Yii та Silex використовують автозавантажувач composer, який, на скільки я знаю, сканує всі директорії з класами та створює мапінг між класом та шляхом до нього.

А тому тут є два варіанти: або додаткові ресурси ще затрачаються на таке сканування, або ж навпаки ще менше використовується ресурсів, бо береться кеш такого сканування.

Швидше за все використовується таки кеш (судячи з того, що при тестуванні пункт processing показує цифру 31)

91

Re: PHP фреймворки

Спробуйте ще:
http://phpixie.com та http://www.slimframework.com/

Але взагалі, я не дуже розумію сенс цих синтетичних тестів. Hello World на свіжому движку з composer - показник нічого. Є два показники, на які потрібно орієнтуватися при виборі фреймворку - а) зручність розробки; б) відповідніть його архітектури до того проекту, який ви будете на ньому розробляти.

Тим більше, що на практиці, швидкість Hello World - це не показник швидкості фреймворку. За моїм досвідом, час, затрачений на запити до баз данних, обробки бізнес-логіки вашого сайту та всього такого іншого досить суттєво перевищує той, який витрачається на простий hello world. Це дуже дивує деяких людей, але на практиці навіть досить повільна Symfony на реальних проектах не настільки програє тому ж CodeIgniter, як можна було б сказати з hello world тестів. Окремо по швидкості стоїть Phalcon, але й там не так все райдужно. наприклад, відсутніть у його ОРМ можливості eager loading може зробити його роботу над пов'язаними об'єктами повільнішою, аніж у того ж Symfony з його монструозною Doctrine.

А якщо хочеться справжньої швидкості -
http://www.techempower.com/benchmarks/#section=data-r9 ці тести дуже добре демонструюсть, що PHP у цьому випадку - далеко не найкращий вибір.

Подякували: ktretyak1

92

Re: PHP фреймворки

TwiStar, погоджуюсь з вами, що hello, world це далеко не все що нам потрібно від фреймворка, але не погоджуюсь, що це ні про що не говорить.

Згаданий тест говорить про раціональність ініціалізації фреймворку при запуску самого елементарного завдання. Це саме той тест, де найлегше дотриматись однакових умов для всіх учасників теста.

Більш детальне порівняння, думаю, що теж буде, але пізніше... можливо якщо зберуться знаючі кожен свій фреймворк, то й проведемо щось більш показове.

93 Востаннє редагувалося ktretyak (05.01.2015 20:02:48)

Re: PHP фреймворки

Жесть!

phpixie

https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/tests-phpixie.png

Тобто видає 100 сторінок за 0,876 секунд (114 сторінок за секунду). Як таке можливо!!?

Навіть ApacheBench каже:

WARNING: The median and mean for the waiting time are not within a normal deviation
        These results are probably not that reliable.

P.S. Щось slimframework не заходів просто заводитись... не було часу розбиратись чому. Мені значно цікавіше покопатись в phpixie як там все зроблено, тим більше він теж виявляється є форком KohanaFramework. =)

94

Re: PHP фреймворки

In July 2012 patches covered most of the Kohana core so the decision was made to rewrite the system from the ground up resulting in the 1.0 release.

Так що форком він лише був.

95

Re: PHP фреймворки

Дякую, TwiStar. Чого ж ви раніше тут не відписувались за нього?
PHPixie дійсно дуже раціональний і добре написаний OOP MVC мікрофреймворк. Для простих проектів підійде дуже добре. Новачкам рекомендую для вивчення.

Вже зараз у нього є підтримка самих часто вживаних модулів.

При бажанні, його можна вивчити за пару днів, особливо якщо використовувати XDebug + IDE.

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

Наприклад, якщо певний клас має 5 дочірніх класів, то при потребі перевизначити другий клас в ланцюжку, не вийде це зробити, бо в коді жорстко прописані "системні класи". В такому разі прийдеться переписувати цілу гілку класів...

Але з іншої сторони цей фреймворк на стільки легкий, що я в ньому ще не побачив ланцюжка з 5 наслідувань...

96

Re: PHP фреймворки

Не зовсім зрозумів яке відношення наслідування має до масштабованості.

А взагалі - я не фанат мікрофреймворків як таких, надаю перевагу більш потужному функціоналу. Про PHPixie я знаю, але для мене це просто проект "по-приколу". Хочете швидкості - використовуйте Phalcon.

97

Re: PHP фреймворки

TwiStar написав:

Не зовсім зрозумів яке відношення наслідування має до масштабованості.

А взагалі - я не фанат мікрофреймворків як таких, надаю перевагу більш потужному функціоналу. Про PHPixie я знаю, але для мене це просто проект "по-приколу". Хочете швидкості - використовуйте Phalcon.

Я теж не уявляю як ви уявляєте збільшення масштабу проекта без необхідності перевизначення раніше написаних ланцюжків наслідувань...

Мікрофреймворками я цікавлюсь, в першу чергу, через потребу досконало знати кращі практики, де поєднуються швидкість з MVC ООП + гнучкість налаштувань.

98

Re: PHP фреймворки

Хочете швидкості - використовуйте Phalcon.

А якщо хочете і швидкості і модульності, стабільноста арі і швидких виправлень багів у фреймворку. Що ви порадите?

99 Востаннє редагувалося TwiStar (08.01.2015 15:15:31)

Re: PHP фреймворки

Я теж не уявляю як ви уявляєте збільшення масштабу проекта без необхідності перевизначення раніше написаних ланцюжків наслідувань...

Тут потрібно пояснити, що ви маєте на увазі, говорячи про масштаб проекту? Більше навантаження чи розширення функціоналу? Перший випадок не має жодного відношення до наслідування. У другому випадку потрібно дотримуватися принципів SOLID та взагалі використовувати композицію над наслідуванням там, де це можливо. Ланцюжок з п'яти наслідувань рідко коли має право на існування, і той випадок де потрібно замінити один з предків - явно не той.

через потребу досконало знати кращі практики, де поєднуються швидкість з MVC ООП + гнучкість налаштувань.

Тут потрібно сказати, що кращі практики ООП дуже заважають швидкості. Наприклад, ОРМ - дуже зручна, практична та добра річ, але її використання - це кошмар з точки зору швидкості. Чим складніша архітектура - тим більше ресурсів використовується при її ініціалізації. Але у той же час не варто думати, що можна розв'язувати складні задачі, не ускладнюючи структури коду. Це підтвердить будь-хто, кому довелося підтримувати сайти, де архітектурою та добрими практиками нехтували.

Я в 10 з 10 випадків виберу швидкість розробки, легкість заміни компонентів та зручність у виправленні помилок міллісекундам при відображенні сторінки. Це не змагання зі швидкості. Якщо система перестає працювати достатньо швидко, її можна оптимізувати - і це буде досить просто, бо це є однією із основних властивостей гарної архітектури - компоненти в нії не залежать один від одного, і можна замінити один компонент іншим, без необхідності переписувати значні частини системи. Але при тому, така архітектура сама по собі буде набагато повільніша за "простий" код. А простиня, де весь код зашитий в index.php взагалі обійде будь-який фреймворк на всіх тестах як стоячого.

А якщо хочете і швидкості і модульності, стабільноста арі і швидких виправлень багів у фреймворку. Що ви порадите?

Всі хочуть. Срібної кулі немає. Мені подобається Laravel, але його не можна назвати еталоном швидкості та стабільності api.  Silex (молодший брат Symfony) досить швидкий, зі стабільним api, модульний донеможна, але як і у старшого брата Pull Request-и там можуть приймати місяцями, якщо баг не є критичним.
Взагалі, багато фреймворків почали рухатись у напрямку створення незалежних компонентів, які можна використовувати окремо від фреймворку - і тут є величезний простір для експериментів. Тобто, можна взяти Slim, підключити йому Eloquent від Laravel як ORM, Twig для відображення, модуль аутентифікації від Aura, і так далі - і все це буде спокійно собі працювати. А можна взагалі зібрати свій фреймворк лише з готових компонентів - усілякі роутери, орм, DI контейнери, шаблонізатори давно написані та чекають свого часу (мені досить подобаються компоненти тут - https://github.com/orno).

P. S.

Щось slimframework не заходів просто заводитись... не було часу розбиратись чому.

Ставив фреймворк через composer - і ось код Hello World.

Прихований текст
<?php

require "vendor/autoload.php";

$app = new Slim\Slim;

$app->get('/', function () {
    echo "Hello World";
});

$app->run();

100 Востаннє редагувалося Sensetivity (10.01.2015 19:47:35)

Re: PHP фреймворки

del