Давно меня интересовал вопрос: насколько увеличивается производительность при переписывании нативного кода в php-расширение.
И вот я решил провести сравнение.
В качестве платформы для написания расширения была выбрана библиотека PHP-CPP.
Пару слов о самой библиотеке PHP-CPP.
Довольно неплохая библиотека. Работать с ней приятно и удобно. Честно говоря, никогда еще не было так легко писать расширения для php.
Из минусов могу отметить недостаток документации. Чтобы разобраться с некоторыми вещами, недостаточно даже примеров, которыми автор снабжает код — приходится смотреть исходники.
Будут сравниваться 4 способа сериализации:
Стандартная сериализация serialize JSON msgpack igbinary Кратко об установке Что еще важно отметить Тесты 1. Массив ассоциативный: вложенные массивы и строки 2. Массив числовой: большие массивы целых чисел 3. Массив числовой: большие массивы длинных целых чисел (int64) 4. Массив числовой: большие массивы чисел с плавающей точкой (float) 5. Массив строковый: большие массивы длинных строк Кратко об установке JSON раньше шел в стандартной поставке PHP.
Сделали с дочей мультик из пластилина.
Делается так:
convert -delay 20 -loop 0 *.jpg mygif.gif Вот результат:
Еще полезное:
Сделать из кадров ролик:
convert -delay 20 -loop 0 *.jpg mympg.mpg MOV из gif:
convert mygif.gif mymov.mov Видео на YouTube:
Смотреть на YouTube
По результатам выборки из логов сервера за 1 сутки.
Googlebot — 43 229 запросов YandexDirect — 21 260 Mediapartners-Google — 14 386 Mail.RU_Bot — 13 715 YandexBot — 13 079 AhrefsBot — 11 997 openstat ru/Bot — 2 709 Выводы:
Гугл предсказуемо обошёл всех и вся. Честь и хвала ему.
Удивил Mail.RU, который обошёл Яндекс.
Что касается Яндекса, то очевидно, что приоритет Яндекса — их рекламная сеть. И уже потом поисковые технологии.
Еще раз к вопросу откуда в логах берутся строки вида:
1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-" При медленном соединении удалось отловить эффект появления таких записей в браузере и увидеть все вживую.
Вот тут видно, как Chrome отправил два запроса, держит соединение открытым, а потом закрывает:
А секундой позже уже загружает то, что его просили.
Успел сделать снимки экрана.
Повторить эксперимент можно либо подключившись к медленному каналу, либо намеренно ограничив скорость соединения на стороне веб-сервера.
Оказывается, узнать, что сайт использует SSL и страница открыта по протоколу https — не настолько тривиальная задача, чтобы решить её с наскока.
Однако, решение оказалось достаточно простое.
Проблема заключается в том, что для определения протокола могут быть использованы переменные:
$_SERVER['HTTPS'] $_SERVER['HTTP_SCHEME'] $_SERVER['HTTP_X_FORWARDED_PROTO'] И косвенно:
$_SERVER['SERVER_PORT'] Но все эти переменные, кроме номера порта, почти наверняка будут отсутствовать.
Определять http-схему, основываясь только на номере порта — приемлемое, но не очень гибкое решение.
Из фотографий или картинок одинакового размера можно сделать мозаику. Получается интересный эффект.
Для этого я написал два bash-скрипта.
Первый уменьшает размеры фотографий, второй делает из миниатюр мозаику.
Скрипт для уменьшения фотографий #!/bin/bash SW=150 SH=150 FROMDIR="fromdir" TODIR="todir" for name in $(ls $FROMDIR); do convert -resize ${SW}x${SH} -strip $FROMDIR/$name $TODIR/$name done Здесь:
SW — ограничение ширины миниатюры; SH — ограничение высоты миниатюры; FROMDIR — каталог, в котором находятся фотографии; TODIR — каталог, в который будут сложены миниатюры.