PHP подкаст #14

Скачать mp3 (55Мб)

Краткая серия статей (перевод от Mail.ru Group) об оптимизациях в PHP7 от Джульена Паули. Blackfire взят в качестве профилировщика. Первое, о чем стоит упомянуть — это оптимизированные массивы. Избегая ассоциативных массивов в угоду обычным — где индексом является число -, а также сортируя ключи массива по возрастанию можно достичь существенного (до 10 раз) повышения производительности. Другая приятная особенность — экономия памяти, которую многие уже заметили. Дело в том, что в 7 версии переиспользуются контейнеры переменных. Единожды выделенная память для переменной может быть повторно использована. Также улучшена работа с encapsed-строками (строки в двойных кавычках/Heredoc): вместо последовательного довыделения буфера происходит его единовременная аллокация. Также существенно улучшена работа со статическими массивами. Теперь интерпретатор различает изменяемые и неизменяемые/immutable массивы (часть OPCache расширения), поэтому сейчас можно не переживать по поводу разных map-массивов. Также существенно улучшена работа со ссылками. В ранних версиях преобразование переменной в ссылку приводило к полному копированию содержимого переменной, поэтому оптимизации как в C/C++ не получалось. В новой версии дополнительных аллокаций памяти не случается в случае преобразования не ссылочной переменной в ссылку. Для погружения в детали лучше прочесть статью от Никиты Попова.

В преддверии выхода Laravel 5.4 Тейлор Отвел поделился бенчмарком от blackfire. Hello world приложение с одним дефолтным маршрутом: 8мс, 1.8Мб RAM, 622 rps (mean).

У Laravel (5.3) Collections появился метод partition, который позволяет быстро разбить массив по некоторому признаку. Работа с коллекциями через collect в Laravel организована удобно: код становится значительно более читаемым, если вы используете map/reduce/другие методы, вместо array_map/array_reduce.

Примечательная статья об использовании Transient паттерна. Вся история вокруг Money типа, который захотелось сделать immutable. Незадача в том, что менеджерский абстрактный класс часто создает “ненужные” временные объекты типа Money. Это повышает требования к RAM. Автором был предложен паттерн Transient, который налагает на разработчика заботу о разделении режима mutable/immutable в сущностном классе. Хотите добавить несколько долларов к существующему объекту типа Money? Не проблема: вместо создания промежуточных объектов, мы можем мутировать текущий, но в определенном mutable-контексте, задаваемом единственным вспомогательным методом (вынесен в trait) withMutable(callable $fn). Функция $fn вызывается в mutable-контексте, задаваемом флагом mutable. Из недостатков — нужно переместить логику из абстрактного класса, который менеджерит манипуляцию immutable сущностями в сами сущности и писать по два обработчика: на случай mutable == true и mutable == false. Мутабельность становится контролируемой и в итоге все равно возвращает immutable объекты при снижении промежуточного инстанцирования. Читать далее PHP подкаст #14

PHP подкаст #1

Это первый и пилотный подкаст. Я пытаюсь привыкнуть к формату и слушающему меня микрофону. Тем не менее я затронул несколько интересных тем, освещенных на последнем Laracon US https://streamacon.com/video/laracon-us.

СКАЧАТЬ mp3 (60Мб)

Анонс Laravel 5.3 от Тейлора Отвела

Возможно, быстрее получится, если глянуть сюда: https://laravel-news.com/2016/06/look-whats-coming-laravel-5-3/

TDD от Адама Вотана

Про тетсирование докладов всегда мало, поэтому не пропустите. На примере твиттер-клона прямо во время доклада Адам провел демонстрацию того, как работает TDD. Начал с небольшого wishful-теста — мне понравился этот термин: вы пишете тест так как бы хотели чтобы все работало — и доводите проект до состояния, когда тесты завершаются успешно. Все станадартно. Для тех, кто все еще боится писать тесты смотреть обязательно

Второй доклад от Адама о рефакторинге в функциональном стиле

Если вы уже используете array_map, array_filter, array_reduce, array_walk и по какой-то причине не используете класс Collection, то Адам покажет как улучшить Ваш код и сделать его более читабельным. Доклад возможно будет любопытен тем, кто использует ArrayCollection: найдете идеи для PR.

Генеральная идея — это избавление от for/foreach-циклов, условий, временных переменных, используя функции высшего порядка, т.е. функции, которые в качестве аргументов принимают другие функции.

Два доклада от Эвана Ю про Vue.js Читать далее PHP подкаст #1