← All posts tagged PHP

Balancer
PHP Вот, что значит, много лет писать большую систему. Сейчас решил переиначить древний часть древнего околопроцедурного кода на объектный, с цепочками вызовов. Программирую сверху вниз, написал каркас, обработку данных и в конце — запись результата цепочкой объектных вызовов. Запускаю, чтобы посмотреть как обработка пройдёт, ожидая получение ошибки отсутствующих методов на последнем вызове. Опаньки, код проходит и работает. Оказывается, я когда-то давно этот код/объекты написал и с именно таким набором методов :D
Balancer
lxc производительность docker Забавно, но в Ubuntu сейчас, по сравнению с 14.04 скорость LXC упала, а скорость Docker выросла. Раньше LXC-контейнер отдавал статику и PHP-скрипты с такой же скоростью, как и хост, а Docker — раз в 5 медленнее. Сейчас, не знаю, что повлияло больше, ядро системы или соответствующие версии софта, но для простого `echo 2*2` на php7 скорость отдачи у меня:

— На хосте: 20-22 krps
— В LXC-контенере: 8-10 krps
— В Docker-контейнере: 9-15 krps

При чём у LXC более быстрый вариант php-fpm, с сокетом, а в Doker — с сетевым интерфейсом.
Balancer
Python PHP языки быстродействие hhvm Небольшое обновление теста объектного Фибоначчи: github.com

* Добавил JavaScript. Результат отличный — 2.64 сек. Почти как у Dart'а, лучше, чем у D. Похоже, сегодня это самый быстрый скриптовый язык.

Обновил:

* PHP до 7.1.0. Стал чуть-чуть быстрее, 50.6 против 58.0 у t.0.13

* HHVM практически не изменился. 24.5 против 25.0

* Python до 3.5.2 и 2.7.12. Удивительно, но он стал ещё медленнее — 170 и 153 сек. против прежних 145/129.
Balancer
люди PHP общение форумы Вот интересно.
— Основная моя деятельность в работе/собственных проектах/etc — программирование на PHP.
— Я общаюсь на огромном числе разных форумов и социальных сетей по самым разным тематикам. И по программированию в том числе.
— Но я никогда почти не общаюсь на форумах PHP-шников.

Вот, реально, последний раз вылезал летом 2015-го. С одним сообщением на всех форумах (хотел обсудить какой-то вопрос). Перед этим — ещё где-то за год до того...

И, вот, вчера, год спустя, опять на 4 популярных форума тему мне интересную поднял. Результат обескураживает. В каждом сообщении сквозит какое-то самомнение, завышенное ЧСВ и при этом половина сообщений вообще не по теме, как будто авторы вообще не читают текст, а пишут из какого-то своего мира китайской комнаты, реагирующей на ключевые слова.

Пользы — полный ноль. Настроения от общения — никакого. Танцпольный срач на ЛОРе и то на порядок приятнее :) И так — на всех форумах, блин.

Это я какой-то не такой или остальные PHP-шники какие-то не такие? :D
Balancer
PHP CMS markdown Grav Попалось очень интересное решение, которое процентов на 80 пересекается с моими идеями и разработками:

getgrav.org

— CMS базируется на плоских файлах в Markdown формате (для ускорения опционально возможно кеширование «поверх»).
— Хотя наличествуют и традиционные способы установки, рулит реализация всего на Composer.
— Большое количество плагинов и тем (Twig).
— Запускается в базовом варианте сразу, без всякого конфигурирования.
— Есть свой пакетный менеджер для расширений/тем.
— Расширения/темы можно ставить через админку (хотя первый раз она ставится отдельным пакетом).
— Мультисайты, многоязыковость, ЧПУ, роутинг, редиректы
— Система пользователей и прав (хотя не разбирался, есть ли возможность коллективной работы).
— Контент может браться из Git, SVN, Dropbox и других. В т.ч., например, текст страниц может быть прямо на GitHub.

Моя идея «поправил файл дома, он через SparkleShare автоматом ушёл на GitHub, GitHub дёрнул сайт и вот страница уже на сайте», т.е. «правлю Markdown-файл дома в файловой системе — обновляется удалённый сайт» тут, кажется, уже работает.

Забавно, что формат метаданных в Markdown практически совпадает с моим :) Т.е. большинство моих тестовых страничек в этой CMS будут работать как есть.

Небольшие нестыковки с моей системой по структуре имён файлов, расположению картинок и т.п. У меня логичнее :)

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

Balancer
PHP оптимизация Поиск подстроки в юникодной строке в PHP без учёта регистра через preg_match() с модификаторами "/ui" в 7.5 раз быстрее, чем через mb_stripos(). В одном скрипте тут профилировал, 19.5 тыс. проверок. Так время работы — 0.31 сек. против 2.3 сек :)
Balancer
сервер проблемы io Авиабаза Пару дней назад чудовищно возросла нагрузка на io сервера. Вот просто, практически единомоментно. Интересно, что если останавливать PHP в контейнере Авиабазы, то все оставшиеся сервисы начинают летать. В т.ч. PHP в других контейнерах. Если работает PHP Авиабазы, то тормозят диск чаще не его процессы, а nginx, раздающий мелкую статику...

Если число параллельных процессов PHP в контейнере Авиабазы резко ограничивать и урезать время работы каждого — всё начинает более-менее работать. Так сейчас и выкручиваюсь. Если увеличивать число процессов и/или возвращать время работы, всё начинает резко тормозить.

Сегодня вообще прикол обнаружил. Попутно логгирую тяжёлые PHP-скрипты через xhprof, чтобы видеть, что тормозит. Обычно тормозят (sic!) MySQL-запросы (третья сущность в области тормозов). Но, вдруг, вижу, как PHP-скрипт в течении 129 секунд ожидал выполнения функции session_start(). Ну да, понятно, она файл сессии пишет на диск и когда диск тормозит, всё может тоже виснуть. Вот только файлы сессии пишутся в ... tmpfs. Т.е. оно 129 секунд ждало очереди на запись в RAM-диск o_O.

В общем, в системе какие-то кранты с io и не похоже, что это проблема с HDD (smartctl/mdadm/dmesg — всё идеально). Пока планирую тупо снимать нагрузку, перенося часть тяжёлых операций на другие сервера. Но это — косметика поверх трупных пятен зомби, какая-то.
Balancer
PHP php7 То, что в PHP7 зарезервировали Null, не позволяя использовать в именах классов — ещё пережить можно. Но вот за намерения зарезервировать в будущем Object — надо руки отрывать. Это, по-моему, самый сильный удар по моей обратной совместимости за всю историю PHP :) Хорошо ещё, что я ленивый, и на namespaces перехожу очень медленно, так что классы bors_object в B2\Object успел поменять только в не массовом коде. Пришлось делать рефакторинг на использование B2\Nil и B2\Obj.
Balancer
Python Ruby PHP GOlang php7 Давно не обновлял цифры производительности в «Объектном Фибоначчи»: github.com

PHP7 обошёл и Ruby, и Python. Но по-прежнему здорово проигрывает HHVM. Есть и другие, хоть и менее заметные перестановки. Думаю, надо выкроить пол-часика, изучить поверхностно Rust и слепить тест для него. На днях попробую пощупать.
Balancer
PHP производительность php7 Перевёл на пробу один тестовый контейнер на PHP7. На php-5.5.9 медианное время отклика типовой среднего веса динамической страницы было 75мс, минимальное — 65мс. На php-7.0.4 стало 59мс и 28мс, соответственно. Это в один поток.

В 5 потоков — с 173/73 мс до 65/37мс.

В общем, разница очень заметная :) Надо будет всё оттестировать и переводить боевые сервера...
Balancer
PHP производительность GOlang Revel Gin-gonic Фигня какая-то. Делаю тут для изучения несложную задачку (взять html, подсунуть параметр из GET-запроса) на Golang. В результате, запросов в секунду:

* PHP (голый) — до 12000
* Golang/Revel — до 8700
* Golang/Gin-gonic — до 4800

Удивительно, во-первых, что Revel быстрее Gin'а, обычно считается наоборот. Но это ладно.

Вот каким макаром PHP получается быстрее — не понимаю. Т.е. цифра вообще какая-то нереальная в моём привычном мировоззрении... При чём не 7.0 какой-нибудь или hhvm, а обычный 5.4.45, fpm.

Может, фишка в том, что PHP используется классически, html-код со вставкой, который один раз компилируется и потом берётся из кеша, а golang-фреймворки так не умеют и производят чтение/парсинг на каждом запросе? Или вопрос в оптимизации многоядерности, т.к. у php-fpm уйма инстансов, грузящих все ядра, а у Revel/Gin собственный менеджер и фиг знает, как он там распределяет загрузку?
Balancer
программисты facepalm Lua языки Вот вы тут всё на квалификацию PHP-программистов наезжаете. А я сейчас по Lua-форумам роюсь. Так народ искренне не понимает, как можно инкрементировать переменную, если в языке нет оператора «++» o_O При чём встретил это три раза :D
Balancer
программирование глобальные_переменные Уже лет 20, как знаю, что глобальные и статические переменные — зло. И даже сиглетоны — зло в модной обёртке (сколько в Java с ними утечек памяти отлавливал, бывало...). Но временами поддаюсь искушению. И вот сейчас снова на эти грабли наступил... Потребовалось в PHP перейти от цикла «оживаем-генерируем страничку-умираем» к задаче «скриптом сгенерировать 300000 статических страниц» и полезли мелкие косяки, исправить которые — менять ряд древнейших решений на самом низком уровне библиотек и фреймворка... :-/
Balancer
PHP BORS© Походу, перескачу через версию PHP-5.4. В кои-то веки не приходится тащить всякое Legacy с кривохостингами, а совсем старое умирает с прекращением поддержки PHP-5.3, за который я долго держался в разработке. Ну и раз всё равно уходим от PHP-5.3, то не на PHP-5.4, а сразу на PHP-5.5 с его генераторами и сопрограммами. Больно вкусные фишки, чтобы не перескочить через версию...
Balancer
PHP lumen Фреймворки BORS миграции Вчера попробовал прикрутить к своему фреймворку фреймворк Lumen (на базе Laravel 5). В основном — с целью попытки освоить миграции БД. Что удивительно, прикрутилось почти сразу, в несколько строк кода. Забавно, что функции config() и config_set() в обоих фреймворках оказались одного формата, так что мой, загруженный после, работает с ними без нареканий.

Минус у Lumen/Laravel 5 пока только в том, что миграции не работают «из коробки» с пакетами Composer. Повозился немного, разобрался с форматом команд у artisan, прикрутил генерацию заготовки под миграцию (package:make:migration). Загрузка миграции вручную, с указанием пути, работает. Надо придумать, как автоматизировать совсем. Удаление миграции из пакета работает «из коробки».

В общем, нужно теперь будет осваивать. И есть мысль переписать свою консольную утилитку bors на использование artisan. И, вообще, можно интегрироваться с Lumen. Похоже, это не составит труда. А в качестве бонуса — огромное коммьюнити с массой пакетов.
Balancer
nginx php-fpm docker контейнеры Уф. Решил задачу автоматического конфигурирования Docker-связки nginx/host + nginx/container + php-fpm/container. Т.е. чтобы одним скриптом запуска всё соединялось в работающую конфигурацию. Пока всё костыльно, без прав доступа и т.п. Но не придётся придумывать статические порты доступа для контейнеров или вручную прописывать проксирование на nginx-хосте.
Balancer
PHP бенчмарк hhvm Замерил скорость hhvm 3.5.1 на «объектом Фибоначчи». Получил утроение скорости по сравнению с php 5.5 и hhvm 2.x Это уже очень неплохо. Надо думать о тестах на серверах под нагрузкой.
Balancer
FORTH мемуары BORS© У меня был интересный этап в развитии нынешнего PHP-фреймворка. В ~1998-м, делая первые сайты, я задумался о шаблонной обработке и упрощении разметки (BBCode родился чуть позже и до России дошёл почти на год позже, Markdown даже в планах не было). Был придуман свой язык разметки, который парсился через QBasic, генерируя уже HTML-код, который и использовался в статических страницах.

Скоро меня запарили проблемы расширения новым функционалом решений на qbasic и я написал парсер на SP-Forth. Написал так, что исходный файл с разметкой без переделки был полноценной программой на Форте :) Вот в таком виде оно полноценно и развернулось.

Уже потом были переход на Perl вместе с выходом в онлайн, перевод платформы на PHP, более 10 лет развития движка… Но прикольно вспоминать, что корни некоторых решений уходят ещё в Forth-прошлое :) // для habrahabr.ru