PHP: метрика времени выполнения функции

Категории: Разработка

Как нам узнать, сколько времени работает функция? Pinba, xhprof, xdebug?
Да, но их нужно ставить на сервер и последние два модуля вносят немалый оверхед. Поэтому использовать их в продакшне нежелательно.
Пинба классная, но нам нужно “вчера” и пока админ раскатывает модуль php нужно как-то извернуться.

Вспомним, что в php все неиспользуемые переменные будут удалены при выходе из функции. Ага!

class Timer {  
 private $time = 0;  
 function __construct() {  
 $this->time = microtime(true);  
 }

function __destruct() {  
 $executionTime = microtime(true) - $this->time;  
 // делаем все, что нам надо: логгируем или еще чего  
 }  
}

Интегрируем в проект.

function foo() {  
 $timer = new Timer();  
 // что-то делаем  
 sleep(5);  
 // на выходе будет вызван Time::__destructor().  
 // Так как все объекты уничтожаются  
}

foo();

Р? (Декодируем html-entities при помощи jQuery)

Категории: HowTo

javascript; gutter: true; first-line: 1; highlight: [] var decoded = $("<div/>").html(encodedStr).text();

JS: аналог str_repeat

Категории: Разработка HowTo

javascript; gutter: true; first-line: 1; highlight: [] function str_repeat($string, $multiplier) { return new Array($multiplier+1).join($string) }

Named: обновляем список корневых dns

Категории: HowTo

Для Fedora/Red Hat

bash; gutter: true; first-line: 1; highlight: [] dig +bufsize=1200 +norec NS . @a.root-servers.net > /var/named/named.ca

AngularJS: Динамический диапазон для select

Категории: HowTo

С сервера приходит максимальное и минимальное значение в выпадающем списке. Нам нужно построить по этим значениям сам список.

Делаем фильтр

angular.module('app').filter('range', function() {  
 return function(input, min, max) {  
 min = parseInt(min, 10);  
 max = parseInt(max, 10);  
 for (var i = min; i < max; i++)  
 input.push(i);  
 return input;  
 };  
});

И делаем динамический селект.

<select ng-model="value" ng-options="item for item in [] | range:min:max"></select>

JSFiddle