среда, 18 ноября 2009 г.

Определение скорости работы php-скрипта

$start1=gettimeofday();

for($i = 0; $i < 10000; $i++)
{
// do nothing
}

$end1 = gettimeofday();
$totaltime1 = (float)($end1['sec'] - $start1['sec']) + ((float)($end1['usec'] - $start1['usec'])/1000000);

echo "$totaltime1\n";

Читать далее

четверг, 5 ноября 2009 г.

Fatal error: Call to undefined function: cal_days_in_month() и как с этим бороться

Несколько недель назад у меня появилась задача сделать архив новостей для Drupal 6.x. Базой я выбрал модуль Archive. Продукт неплохой, но не совсем, то что мне нужно было. В результате, я сделал свой модуль, более простой и с AJAX (по требованию заказчика). Но сейчас не об этом.

При работе с Archive, у меня появилась такая проблема: на интернет-хосте пропала функция cal_days_in_month(), хотя на localhost'e было все ок.

Что бы функция заработала, нужно ее написать, правильно? :)

1. Открываем archive/archive.module
2. Вставляем функцию:

// the entire month into the block.
$prev_month = $month==1?12:$month-1;
$prev_year = $month==1?$year-1:$year;
+ //some old php versions don't have cal_days_in_month(), this code accounts for that
+ if(!function_exists('cal_days_in_month')){
+ function cal_days_in_month($calendar,$month, $year)
+ {
+ // $calendar just gets ignored, assume gregorian
+ // calculate number of days in a month
+ return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31);
+ } 
+ }
$num_days_prev = cal_days_in_month(CAL_GREGORIAN, $month-1, $year);
$next_month = $month==12?1:$month+1;
$next_year = $month==12?$year+1:$year;

Плюсиками я обозначил код, который мы вставляем. enjoy ;)



Читать далее

Полезные ссылки для Zend Framework

Я все никак не начну изучение этого "динозавра", но собрал уже много материала :) Решил поделилиться ресурсами:
1. http://anton.shevchuk.name/
2. http://web-blog.org.ua/
3. http://zendframework.ru/
4. http://zend-framework.ru/
5. http://blog.fedecarg.com/
6. http://www.zftutorials.com/



Читать далее

воскресенье, 1 ноября 2009 г.

31 совет по микро-оптимизации PHP

Наткнулся тут на статью в блоге alexatnet.com:PHP micro-optimization tips

Я решил перевести эти советы, а так же добавить свое мнение.

Не стоит тупо следовать чьим-то советам!!!

Например не все здесь применимо к ООП. Мы можем сделать все на функциях, т.к. они быстрее. Можем, правда? Мы сэкономим 2 миллисекунды при исполнении, при миллионе вызовов в секунду – экономим 2 секунды – много ли? Но насколько мы увеличим время разработки, при отказе от ООП??? Целесообразно ли???

Это самый яркий пример. Остальное по тексту – мои комментарии выделены

  1. Вызов метода объекта быстрее вызова “__call” , но в момент написания кода мы не всегда знаем какой метод и какого объекта будет вызван
  2. Вызов статического метода быстрее чем вызов метода объекта, а как же ООП, инкапсуляция, коллекции, итераторы и т.д. ? Без них можно разрабатывать, но гораздо дороже!
  3. Вызов функции быстрее вызова статического метода, конечно, но только в том случае, если вы не знакомы с ООП. Тогда ваша разработка стоит для конечного заказчика гораздо дороже, а поддерживать код становится гораздо сложнее
  4. Доступ к локальной переменной быстрее доступа к глобальной переменной – действительно так, да и не нужно выводить из локального контекста переменную, если в этом нет необходимости
  5. Доступ к глобальной переменной быстрее доступа к свойству объекта, но глобальные переменные – зло!!!
  6. Прямой доступ к свойству объекта быстрее чем вызов магических “__get” и “__set” , естественно, но во время написания кода мы иногда не знаем какие свойства будет хранить объект.
  7. Доступ к инициализированной переменной быстрее доступа к неинициализированной. Да, это так! И рекомендую инициализировать все переменные – это хорошая практика предупреждения возникновения неожиданных ошибок.
  8. Абсолютные пути в “include” и “require” быстрее относительных
  9. Объединение нескольких скриптов в один быстрее, чем несколько include. Да! Но разобраться потом в одном огромном файле…. И еще: если каким-то скриптам нужны почти все классы библиотеки – это будет плюсом. Другим скриптам нужен только один вспомогательный класс – в этом случае скрипт будет дольше стартовать, чем исполняться, к тому же мы получим беспричинный расход памяти.
  10. “switch” быстрее, чем “if … else if …” в большинстве случаев.Но я предпочитаю заменять switch на реализацию паттерна “стратегия”
  11. Не используйте регулярные выражения для простых операций со строками
  12. Избегайте @ (оператор подавления сообщений об ошибках)
  13. Избегайте выбросов Notice и Warning в ваших скриптах
  14. Избегайте неиспользуемых переменых и неиспользуемых параметров методов
  15. Добавление параметра в метод увеличивает время вызова,однако без параметров никуда.
  16. Добавление к параметру метода type hint увеличивает время вызова, но уменьшает время разработки, благодаря повышению читабельности кода, а так же уменьшает возможность возникновения трудно-обнаруживаемых ошибок.
  17. Вызывайте unset для переменных, содержащих большое количество данных или циклические ссылки
  18. $_SERVER['REQUEST_TIME'] включает время старта скрипта
  19. Кэшируйте вывод скрипта или результаты жадных на ресурсы функций
  20. “echo” быстрее, чем “print”
  21. “echo” поддерживает несколько аргументов, используйте это вместо конкактенации
  22. “ob_start()” и “ob_end_clean()” могут быть лучше чем конкактенация
  23. Строки в одинарных кавычках (’…’) обрабатываются быстрее строк в двойных кавычках (”…”), т.к. в первом случае не производится интепретация переменных внутри кавычек.
  24. pre-increment (++$i) быстрее, чем post-increment ($i++)
  25. “isset” быстрее, чем “array_key_exists”
  26. Массивы быстрее классов с несколькими полями. Так что если вы используете классы только для хранения данных (такое я наблюдал в drupal) – замените их массивами.
  27. “foreach” лучше, чем “for” в большинстве случаев
  28. Открывайте ресурсы (файлы, БД, сокеты) непосредственно перед их использованием, освобождайте (закрывайте) их сразу, как только они становятся не нужны
  29. Не доставайте из таблиц БД поля, которые вы не будете использовать
  30. Используйте prepared database statements ( я затруднился перевести эту фразу, хотя и понимаю смысл)
  31. Объединяйте несколько запросов в один, если СУБД поддерживает такой подход

Думайте, как применять эти советы в вашем конкретном случае! Не бросайтесь тупо оптимизировать все ради еще одной свободной наносекунды!!!



Читать далее

z-index jquery fix

Сегодня впервые увидел проблемы нормального использования z-index для ie =)

Это ужас. Уже и так и сяк, а оно никак. В общем, вот фикс на jquery:

$(function() {
 var zIndexNumber = 1000;
 $('div').each(function() {
  $(this).css('zIndex', zIndexNumber);
  zIndexNumber -= 1;
 });
});

Последнюю версию jQuery можно скачать по ссылке: http://docs.jquery.com/


Читать далее

Первая запись

Привет, мои дорогие читатели (которых пока что нет :)
Все-таки понял, что LJ это сервис для своих записей, а blogspot решил попробовать для своего программерского блога. Буду здесь постить различные финдефлюшки-полезняшки, которые радуют разработчиков ;)

Тематика: php, mysql, jquery, drupal


Читать далее