Скачать mp3 / Весь mp3-архив

PHP подкаст #1

Это первый и пилотный подкаст. Я пытаюсь привыкнуть к формату и слушающему меня микрофону. Тем не менее я затронул несколько интересных тем, освещенных на последнем Laracon US.

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

Возможно, быстрее получится, если глянуть сюда.

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

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

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

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

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

Два доклада от Эвана Ю про Vue.js

Мы все привыкли к jQuery и для большинства разработчиков web-сервисов это основной инструмент. Уверенно в нашу жизнь входят Angular, ReactJS и… среди прочих Vue.js. Последний обрел популярность после анонса Тейлора в твиттере. Vue.js — это простой в использовании MVVM-фреймворк. Эван начал создавать этот фреймворк еще в Google. С его помощью можно быстро создавать удобные интерфейсы реактивного типа — это когда визуальное прдеставление является немедленным представлением данных. Меняешь данные и меняется представление и наоборот. Также Эван затронул routing-компонент и Vuex для удобной отладки: можно записывать историю действий пользователя и восстановить идентичное состояние, возникшее, например, на момент ошибки. Для удобства разработан специальный плагин для Google Chrome.

Крис Фидао про настройку безопасного Linux-сервера

Крис затронул самые базовые и важные вопросы безопасности Linux-сервера. Это больше для DevOps’ов, чем для разработчиков. Для большинства слушателей почти все упомянутое в докладе будет знакомо. Отмечу отдельно доступ к ssh при помощи ssh-ключа. При этом пароль все же понадобится, для выполнения команд через sudo. Крис также говорил о базовых правилах настройки iptables, security-апдейтах. Также напомнил про важность ротации паролей и прочего аутентификационного счастья при смене состава команды разработчиков. Особенно запомнился раздавленный на сцене паук :).

Джек МкДейд с докладом о том, как не выгореть на работе

Доклад приятный с красивыми слайдами. Из тех, что забывается примерно через час. Еще в докладе мелькнул горячо любимый Стивен Кинг. За это дополнительный карма-плюсик.

Бен Рамси с докладом о HTTP2 и сопутсвующих стандартах

Пожалуй, на этой теме я немного приторможу. Необходимость HTTP2 продиктована сразу несколькими причинами. Среди главных — возросший объем HTTP-трафика. Теперь средняя страница тянет за собой примерно 100 объектов объемом ~2.1Мб. С момента выпуска стандарта HTTP/1.1 Интернет сильно изменился: возросли потребности в качестве контента. Мы хотим все больше медийного контента и удобных интерфейсов. Старый стандарт такого развития не предполагал и оказался на текущий день неэффективным посредником для доставки полезных данных.

Чтобы привлечь внимание к теме, скажу, что внедрение HTTP/2 позволит доставлять контент до клиента в среднем вдвое быстрее. Уже сейчас вы используете HTTP/2, если посещаете YouTube, Google, Instagram и другие высоко-нагруженные сервисы. На момент создания этого подкаста порядка 9% веб-серверов уже способны отдать контент по HTTP/2.

Начнем с проблем, которые приходится решать нагруженным web-сервисам уже сегодня для ускорения доставки данных и как их решает HTTP/2.

Во-первых, это проблема повышенной нагрузки в результате серии параллельных запросов. Мы запросили страничку и оказалось, что она зависит от CSS, JS, изображений. Всё это браузеру нужно максимально быстро заполучить, что поражадает серию параллельных TCP-запросов к нашим серверам. При этом каждый запрос дублирует в своем теле заголовки (в том числе Cookie, скажем, размером в 5Кб). Кроме того, каждое такое обращение через SSL-соединение требует дополнительного времени на так называемые переговоры. Эту проблему HTTP/2 решает мультиплексированием: объединением всего отдаваемого контента в один поток, а также избегая дублирования заголовков.

Для передачи заголовков применяется хитрый алгоритм сжатия HPACK. Например, только изменившиеся заголовки будут преданы при необходимости, Cookie могут быть переопределены частично. Благо, разработчику в большинстве случаев об этом задумываться не прийдется. Кстати, в соответсвии с алгоритмом HPACK заголовки индексируются и могут быть переданы всего одним байтом. Заметьте, мы говорим о байтах! HTTP/2 бинарный в отличии от своего предшественника.

Объединение в один поток может быть управляемым с помощью механизма приоритетов и зависимостей. Причем приоритезация происходит со стороны клиента. Скажем, вы скролите страницу вниз и для вас более важны изображения в видимой области и вы ожидаете, что клиент их будет запрашивать с повышенным приоритетом.

Объединение отдаваемого контента в один поток также позволяет использовать всю доступную емкость TCP-пакета. В web’е часто отдаваемый CSS, JS или какая-нибудь иконка может быть очень небольшой по размеру и занимать лишь часть TCP-пакета. Это можно сравнить с полупустым автобусом. Слишком много полупустых автобусов на дорогах создают пробки.

Во-вторых, существует проблема, о которой я на самом деле замолвил слово до этого, того: есть время простоя до первых запросов CSS, JS и другой статики. Браузер ждет момента получения страницы. Т.е. произошло обращение к серверу и до тех пор пока сервер не вернет разметку со ссылками на статику эта статика подгружаться не будет. HTTP/2 предлагает механизм server push, который позволяет в момент обращения, не дожидаясь генерации странички, начать отдавать статику. Т.е. теперь можно передавать клиенту любые данные, даже если они еще не были запрошены.

Что нужно для внедрения HTTP/2?

Приятно осознавать, что HTTP/2 обратно совместим с HTTP/1.1. Поэтому его включение на ваших проектах ничем не грозит конечному клиенту.

Нужен конечно же, сервер. Список серверов, реализующих HTTP/2 можно посмотреть по ссылке. Отмечу, что свежие nginx, Apache и IIS поддерживают в разной степени HTTP/2.

Также следует обратить внимание на то, что поисковый бот Яндекса сейчас очень чувствителен к Upgrade-заголовку.

Если хочется узнать об HTTP/2 больше, то обратите внимание на следующую ссылку, а также сами стандарты.

Санди Мец о дурно пахнущем коде

Я натыкался уже на Санди, когда искал что-то о рефакторинге и запомнил её лицо. Санди из Ruby-мира и вы, возможно, знакомы с её книгами об ОО-дизайне. В этом докладе она рассказала о популярных кейсах, когда рефакторинг может принести ощутимую пользу. Её доклад стоит на плечах великана Мартина Фаулера и его замечательной книги “Рефакторинг”.

Доклад вобщем-то неплохой. Если будете смотреть, то будет возможность сравнить код в Ruby с PHP-кодом. Не поймите меня неправильно: я скорее агитирую за разностороннее развитие. Кстати, сам Тейлор Отвел пришел из C#/.NET и Ruby. А еще у него красивая жена и двое детей. Вернемся к докладам.

Фабьен Потонсье и реклама-доклад про преимущества Blackfire для поиска bottleneck’ов

В начале доклада Фабьен пошутил, что он допускал много серьезных ошибок, одна из которых — допущение, что PHP — это язык программирования.

Упомянул, что скорость отдачи контента критична и привел любопытную цифру: 30 или 40% посетителей покидают страницу, если она рендерится более 3х секунд. Очевидное решение — профайлинг. Что у нас есть из инструментария: xhprof, xdebug с профилировщиком, Code Sniffer.

Зеэв Сураски рассказал про эволюцию PHP и конечно же PHP7

Многие проекты мигрировали на 7ую версию. Это безболезненно, если проект уже на на 5.5+ версии. Любопытно, что внедрением JIT-компиляции занимался Дмитрий Стогов. Именно это улучшение позволило значительно снизить потребляемую память и ускорить выполнение скриптов.

Опубликовано: 10.09.2016
Теги: Blackfire, DevOps, HTTP2, JavaScript, Laravel, MVVM, PHP7, TDD, Vue.js, wishful-тестирование, Адам Вотан, Бен Рамси, Джек МкДейд, Зеэв Сураски, Крис Фидао, Мартин Фаулер, рефакторинг, Санди Мец, Тейлор Отвел, Фабьен Потенсье, Эван Ю