Сравнение различных методов вызова функций в PHP
Вызов статических методов классов — прекрасная альтернатива обычным функциям - и класс создавать не нужно и принципы объектно-ориентированного программирования не нарушаются. Однако, в реализации статических методов в PHP есть несколько проблем - статические методы не всегда корректно наследуются, поэтому, чтобы нивелировать неудобства статических методов в PHP часто используют синглетоны - обертывают денимические методы статическими обертками.
Однако, создание синглетона операция довольно ресурсоёмкая — проверить создан ли экземпляр класса, создать экземпляр класса если он не создан, вызвать на нём нужный метод. Насколько это сказывается на бытродействии я и решил сегодня проверить.
Для оценки скорости доступа к методам синглетона я сделал небольшой скрипт. Скрипт генерирует тестовые последовательности вызовов функций в различных вариантах - и сравнивает время вызовов этих последовательностей.
Вот исходный код скрипта.
Результат работы скрипта представлен в таблице ниже:
generation_time | 11.7576429844 |
php_version | 5.3.2-1ubuntu4.9 |
Case | try 1 | try 2 | try 3 | try 4 | middle |
---|---|---|---|---|---|
Same plain function called 10000 times | 0.0166 | 0.0187 | 0.0183 | 0.0135 | 0.0168 |
Different plain functions called 10000 times | 0.0163 | 0.0221 | 0.018 | 0.0163 | 0.0182 |
Same static method 10000 times | 0.0193 | 0.0265 | 0.0206 | 0.0194 | 0.0214 |
Different static methods called 10000 times | 0.0221 | 0.0283 | 0.0229 | 0.0229 | 0.024 |
Static methods of different classes called 10000 times | 0.0236 | 0.0279 | 0.0251 | 0.0242 | 0.0252 |
Same dynamic method called 10000 times | 0.0166 | 0.0193 | 0.0169 | 0.0169 | 0.0174 |
Different class methods called 10000 times | 0.02 | 0.02 | 0.0202 | 0.02 | 0.02 |
Singleton method called 10000 times | 0.0403 | 0.0446 | 0.0409 | 0.041 | 0.0417 |
Different singletons called 10000 times | 0.0562 | 0.0631 | 0.0548 | 0.0572 | 0.0578 |
В тестовом скрипте, я сравнил обычные PHP функции, статические методы класса, обычные методы и методы синглетона.
Результаты тестирования показали, что вызов методов синглетона, примерно в два - четыре раза медленнее, чем вызов обычных методов, что, в принципе, меня порадовало — я ожидал, что будет хуже.
При этом выяснилось несколько дополнительных вещей: cтатические вызовы функций объявленных без модификатора "static" примерно в два раза медленнее, чем с ним, cтатические методы немного медленнее, чем динамические.
Так что, в принципе, синглетоны вполне можно использовать, особенно в случаях, когда быстродействие не сильно критично.
Еще один странный глюк в PHP
Два дня бился со странным глюком - в скрипте в определенном месте отваливается соединение с базой данных - выдает "MySQL server is gone away". При этом отваливается всегда в одном и том же месте после куска кода с большим объемом вычислений, но без единого вызова базы данных. И только на сервере - на локальном компьютере всё тип-топ. Путем небольших, почти шаманских манипуляций с кодом удалось проблему купировать, правда неизвестно, где она может всплыть в дальнейшем. Налицо проблема в самом интерпретаторе PHP.
Upd: Нашел источник проблемы
Такое себе позволял только PHP4. Похоже, PHP5 вступил в ту стадию зрелости за которой уже наступает старческий маразм...
I need money, not a job
Рынок труда в России — это что-то особенное. С одной стороны, выйдя на улицы, прямо скажем, не самого богатого города России - Саратова, постоянно видишь большое количество дорогих иномарок, само наличие которых говорит о том, что люди в этом городе реально хорошо зарабатывают.
С другой стороны, данные статистики говорят, что средняя зарплата по городу составляет десять тысяч рублей. У думающих людей это вызывает некий когнитивный диссонанс.
Понятно, что каждый из нас считает себя совершенно уникальным в своем роде и способным на многое. Вот голова и начинают искать способы конвертировать свою уникальность в деньги, желательно минуя промежуточный этап в виде скучного процесса под названием "работа".
Занятно, что на людей которые более или менее имеют потенциал роста эти настроения влияют сильнее всего, они чувствуют, что что-то из себя представляют, это приводит к тому, что скорее всего они не пойдут работать на дядю - они чувствуют что есть другие способы получения денег. И в результате большинство оказывается выброшенными из нормального производственного процесса. С пивком у телевизора время пролетает веселее. Лишь единицы могут найти в себе силы начать что-либо делать.
Есть старомодное мнение, что чтобы стать классным специалистом - нужно развиваться, а как можно развиваться ни чем не занимаясь? Да, чтобы развиваться надо работать. Многие вчерашние студенты думают, что, чтобы добиться успеха нужно сразу начинать свое дело. Но успешно раскрутить своё дело получается у 0.00001 процента. Остальные промучившись год, два, так и не заработав ничего идут работать на дядю.
К чему я это? Просто периодически народ жалуется, что не может найти людей, желающих работать. Сам ищу - пока успехи довольно скромны. Люди не хотят работать, люди хотят денег. Много, сразу, и чтобы не работать.
Надеюсь, все же, что ситуация не настолько плоха, скорее всего, просто толковые люди никогда не появляются на рынке труда - они как нейтрино — неуловимы и не заметны, делают своё дело и не высовываются, а работодатели, которым посчастливилось найти таких людей помалкивают - а то как конкуренты переманят.
Как поставить dav_svn если у вас cpanel
Опять возникла необходимость сделать репозиторий с доступом через http на сервере с cpanel. Ранее я уже об этом уже писал, но половина ссылок в том посте на сегодняшний день уже не работают, поэтому пришлось восстанавливать инструкцию заново, наступая на те же грабли повторно. На этот раз пост без ссылок - просто инструкция шаг за шагом:
Скачиваеме исходники Subversion и распаковываем:
> wget http://subversion.tigris.org/downloads/subversion-1.6.17.tar.gz
> tar -xzf subversion-1.6.17.tar.gz
Скачиваем SQLite распаковываем и копируем в папку с Subversion:
> wget http://www.sqlite.org/sqlite-amalgamation-3.6.13.tar.gz
> tar -xzf sqlite-autoconf-3070701.tar.gz
> cp -r sqlite-3.6.13 subversion-1.6.17/sqlite-amalgamation
Теперь компилируем и устанавливаем:
> ./configure --with-ssl --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apache/bin/apr-config --with-apr-util=/home/cpeasyapache/src/httpd-2.0.63/srclib/apr-util
> make
> make install
Создаем репозиторий:
> mkdir /home/username/data
> mkdir /home/username/data/svn
> cd /home/username/data/svn
> svnadmin create --fs-type fsfs repo
Настраиваем конфигурационные файлы апача:
> vi /usr/local/apache/conf/userdata/std/2/username/svn.hostname.com/custom.conf
Содержимое файла:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /home/svncleve/data/svn
SVNListParentPath on
SVNPathAuthz off
AuthType Basic
AuthName "Private SVN repositories"
AuthUserFile /home/username/svn.passw
Require valid-user
</Location>
Задаем пароль для пользователя SVN:
/usr/local/apache/bin/htpasswd /home/svncleve/svn.passw svnuser
Проверяем конфигурацию сервера, пересобираем конфиги и рестаруем сервер:
/scripts/verify_vhost_includes
/scripts/rebuildhttpdconf
/scripts/restartsrv_httpd
Делаем чистый чекаут на локальной машине:
> svn checkout http://hostname.com/svn/repo .
Если svn update работает хорошо а svn commit выдает 403 ошибку то проверьте .htaccess в document root - cpanel по умолчанию пишет в .htaccess правила, ограничивающие использование методов PUT и DELETE - а именно они как раз и используются в WEBDAW через который работает Subversion. Несколько раз уже на это напарывался.