Выпуск №15

Архитектура Upwork, новая лицензионная политика JetBrains (PhpStorm), Drupal 8 Launch Party 19 ноября, DiDOM — быстрый парсер HTML, PHPFastCGI vs PHP-FPM, оптимизация хвостовой рекурсии.

Всем привет!

Вы слушаете «Пятиминутку PHP», долгожданный выпуск номер 15 еженедельного подкаста о новостях из мира PHP, интересных постах в блогах и современных подходах к разработке.

За месяцы прошедшие с последнего выпуска в мире PHP произошло много всего. Попробую кратко рассказать об основных событиях, заранее извините за баяны.

Начнём со скандалов.

В конце июля в сеть утекли исходники самой популярной фриланс биржи в Росии: fl.ru — исходники на PHP, и, как и ожидалось, там ад и израиль. У меня была ссылка на github репозиторий, но сейчас он уже удалён, так что кому интересно — ищите сами.

К слову о фриланс биржах. Самая популярная биржа на западе — Upwork (которая раньше называлась Odesk) — тоже активно использует PHP. Посмотрите запись доклада об архитектуре Upwork с недавней конференции PHP Frameworks Day. Если кратко: раньше у них была бизнес логика на Perl и рендринг на PHP (первый Zend Framework), а теперь бизнес логика размазана по различным сервисам на Java, а рендринг страниц на Symfony 2.

Возвращаемся к скандалам. Компания JetBrains, которая в том числе выпускает PhpStrom, объявила об изменении лицензионной и ценовой политики: теперь вы не покупаете программу, а берёте её на прокат — это вызвало большие бурления в интернете. Если же не продлить подписку в конце года, то редактор сам откатится на какую-то предыдущую версию. Зато дают скидку для старых клиентов: второй год подписки бесплатно. Новые цены и правила вступили в силу 2 ноября.

И вот что я думаю по этому поводу: с точки зрения покупателя всё стало запутанно, прямо как тарифы у сотовых операторов или цены на облачные вычисления в Amazon.
А с точки зрения компании JetBrains всё просто — они хотят более стабильный и более плотный поток денег, это нормально, это бизнес. Но учитывая скидки, которые они сделали уже существующим клиентам, мне кажется, сработали себе в убыток. У них вся надежда на новых клиентов?

Рассмотрим конкретно мой пример: каждый год я делал upgrade за $49, последний раз в январе 2015.
Теперь январе 2016 года я обновлю свою подписку и заплачу уже $53 (по новым ценам) — это на $4 дороже.
В январе 2017 года я обновлю свою подписку БЕСПЛАТНО.
В январе 2018 года и далее я буду платить по $53.
Итак, теперь я плачу на $4 в год больше, но один год у меня будет бесплатным и этот беслпатный год окупится для компании JetBrains лишь за 12 лет. 12 лет Карл!

Говорят, WebStorm подорожал. Не знаю какие цены были раньше, посмотрел сейчас — они больше чем на PhpStorm. Ещё говорят, что в PhpStorm есть всё тоже самое, что и в WebStorm, если поставить пару дополнительных плагинов вручную. Так что господа джаваскриптеры, переходите на PhpStorm. И вообще, забейте на этот ваш NodeJs, пишите на PHP!

UPDATE: я плохо смотрел цены, на самом деле WebStorm дешевле чем PhpStorm.

В заключение этой темы приложу ссылку на 14-й выпуск подкаста CTOCast — в гостях Михаил Винк из JetBrains уходит от ответов на каверзные вопросы.

Третий скандал по списку, но не по значению — это новый Кинопоиск! Единственное, что здесь можно отметить в рамках подкаста Пятиминутки, так это то, что старый-добрый ламповый кинопоиск был написан на PHP 😉

Объявлена дата выпуска финальной версии Drupal 8: 19 ноября 2015 года. Официальная вечеринка по этому поводу пройдёт в тот же день прямо на конференции PHP World 2015 в Вашингтоне. Напомню, что Drupal 8 разрабатывался несколько лет и он основан на компонентах Symfony 2. По сути CMS была написана практически заново. Решительный шаг, достойный уважения, но есть и обратная сторона медали. Во-первых, за время разработки новой революционной версии CMS медленно теряла долю рынка, а конкуренты, например, WordPress, не стояли на месте и развивали свои продукты эволюционно. Во-вторых, Drupal комьюнити теперь окажется расколотым. Для многих будет не так-то просто отказаться от многолетних наработок и инвестиций в экосистему классических версий Drupal 6 и Drupal 7. Это мне чем-то напоминает историю с Python 2 и Python 3.

Но есть и полезный выхлоп для всех нас: при тестировании Drupal 8 под PHP 7, в последнем был найден баг в сборщике мусора.

Кстати, между делом, меня тут просили упомянуть про русскоязычное Drupal сообщество. Присоединяйтесь по адресу dru.io

Сообщества — это вообще хорошо, всегда поддерживаю! Пишите, если у вас есть интересный проект или сообщество, расскажу в подкасте.

Из находок на GitHub: DiDOM — свежая, простая и быстрая библиотека для парсинга HTML. Для поиска элементов в документе можно использовать CSS селекторы и XPath выражения. В документации есть сравнение с другими парсерами по производительности и по потреблению памяти: Symfony DomCrawler, Zend Dom, Simple HTML DOM и Nokogiri — по скорости DiDOM обыгрывает всех, а по памяти он на втором месте после Nokogiri. Требует PHP 5.4.

Раз уж заговорили про парсинг страниц, порекомендую одну свежую статью на эту тему. Что мне понравилось в статье, так это обработка ссылок в функциональном стиле: filter, map, filter, each. https://murze.be/2015/11/building-a-crawler-in-php/

Ещё одна статья достойная внимания: как разогнать Symfony приложение от 280 до 1770 рапросов в секунду, заменив PHP-FPM на PHPFastCGI. Фишка в том, что в отличии от PHP-FPM, который держит запущенным лишь процесс интерпретатора, PHPFastCGI демонизирует всё ваше приложение. Непосредственно для Symfony уже написан специальный бандл. Но можно и по старинке без фреймворков с помощью небольшой обёртки вокруг вашего PHP кода.
http://phpfastcgi.github.io/general/2015/11/04/introducing-phpfastcgi.html
https://github.com/PHPFastCGI/FastCGIDaemon

Под конец, продолжая тему оптимизации, расскажу вам идею, которая пришла мне в голову на днях. PHP — это рекурсивный акроним: PHP Hypertext Preprocessor. Нужно его поменять и сделать так: Preprocessor of Hypertext PHP — теперь рекурсия стала хвостовой и можно оптимизировать!

  • > Говорят, WebStorm подорожал. Не знаю какие цены были раньше, посмотрел сейчас — они больше чем на PhpStorm

    Куда конкретно смотрели, можно поинтересоваться? Если заглянуть сюда https://www.jetbrains.com/store/ видно, что PHPStorm стоит 89$ в год, а WebStorm — $59.

    • Да, это мой провал, посыпаю голову пеплом! Смотрел, но как так удалось высмотреть цены наоборот не знаю.
      Сделаю опровержение в следующем выпуске, спасибо за баг-репорт!

      • Не за что 😉 Еще кое-что:

        > теперь вы не покупаете программу, а берёте её на прокат
        > Если же не продлить подписку в конце года, то редактор сам откатится на какую-то предыдущую версию.

        При оплате 12 месяцев, вам предоставляют пожизненную лицензию на версию ПО, которая была доступна в начале первого месяца оплаты. Если вы и не продлите лицензию, вы все равно сможете ей пользоваться. Это очень похоже на модель, которая была ранее. Только там мы вроде как «покупали» новую версию. А сейчас можем ее брать «напрокат» с последующим «выкупом». Немного запутано, конечно.