X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Таймер на PHP
ZhukV
ZhukV
Topic Starter сообщение 11.12.2010, 22:20; Ответить: ZhukV
Сообщение #1


Доброго времени суток всем.
Давайте попытаемся сдалать таймер на PHP
Наверное много кто задавался вопросами:
1. Сколько времени забирает мой скрипт.
2. Сколько генерируется страница (можна заметить на многих сайтах).

И так, поехали.

Давайте наш таймер создадим на ООП, тоесть в иде класса, и дадим название класса Timer:

[PHP]class Timer{}[/PHP]

И давайте сразу создадим конструктор класса, чтоб мы смогли как то называть данные таймера (это в большинстве нужно для оброботчиков) и также нужно создать переменную, где мы смогли хранится результаты таймеров.
Вот код, который получится:

[PHP]$timeTimer = array();

class Timer{
private $id;

function __construct($id = ''){
if(!$id){ trigger_error ('Wrong parametr input [TIMER]', E_USER_WARNING); }
if($timeTimer[$id]){ trigger_error ('Can not init timer', E_USER_WARNING); }
$this -> id = $id;
}
}[/PHP]

И давайте создадим сразу функции для запуска таймера, остоновки и вытаскивание текущего значения:

[PHP]classTimer{
private $id;

/* Функция запуска таймера */
function start(){
global $timeTimer;//чтоб можна было ссылатся на глобальну переменную
$mtime = microtime();//узнаем текущие время в секундах и милисекундах
$mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
$timeTimer[$this -> id]['start'] = $mtime;//занесем результат в глобальную переменную
}

function stop(){
global $timeTimer;
$mtime = microtime();
$mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
$timeTimer[$this -> id]['stop'] = $mtime;
$timeTimer[$this -> id]['result'] = $mtime - $timeTimer[$this -> id]['start'];
}

function get($rand = 5){
global $timeTimer;
if($timeTimer[$this -> id]['result']) return $timeTimer[$this -> id]['result'];
$mtime = microtime();
$mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];
return round($mtime - $timeTimer[$this -> id]['start'], $rand);

}

function __construct($id = ''){
if(!$id){ trigger_error ('Wrong parametr input [TIMER]', E_USER_WARNING); }
if($timeTimer[$id]){ trigger_error ('Can not init timer', E_USER_WARNING); }
$this -> id = $id;
}
}[/PHP]

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

[PHP]$timer = new Timer('test');//создаем таймер с именим "test"
$timer -> start();//запускаем таймер
$timer -> stop();//останавливаем таймер[/PHP]

В результате данного кода, мы получим очень маленькое значение!!!
Давайте попытаемся как-то загрузить систему. Можна воспользоватся циклом:

[PHP]$timer = new Timer('test');
$timer -> start();
for($i = 0; $i < 500000; $i++){//запустим цыкл на пол милиона раз
if(is_int($i / 100000)){//если текущие значение 100000 или 200000 или 300000 .... выведем текуший результат, но таймер не останавливаем!
echo $timer -> get() . '<br />';
}
}
$timer -> stop();
print_r($timeTimer);//Выведим наши таймера[/PHP]

Используя данный клас можна создавать множество таймеров, которые не будут нагружать систему.
Вот такой себе не большой скрипт таймеров. Даный класс можна также еще и спростить немного, и настроить под себя.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 11.12.2010, 22:26; Ответить: Letmetouchyou
Сообщение #2


бред.

особенно

[PHP] $mtime = explode(' ', $mtime);
$mtime = $mtime[1] + $mtime[0];[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
Topic Starter сообщение 11.12.2010, 22:40; Ответить: ZhukV
Сообщение #3


в чем бред?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 11.12.2010, 22:40; Ответить: alexdrob
Сообщение #4


В классе юзать глобальные переменные это нормально?)

полный бред.

Посмотрите пример тут
http://php.net/manual/en/function.microtime.php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
Topic Starter сообщение 11.12.2010, 23:02; Ответить: ZhukV
Сообщение #5


[PHP]class Timer{
private $timer = array();

function start($timer = ''){
if(!$timer){ return !trigger_error('Не указан идентификатор таймера'); }
$this -> timer[$timer]['start'] = microtime(true);
}

function stop($timer = ''){
if(!$timer){ return !trigger_error('Не указан идентификатор таймера'); }
$this -> timer[$timer]['stop'] = microtime(true);
return $this -> timer[$timer]['stop'] - $this -> timer[$timer]['start'];
}

function get($timer = '', $rand = 5){
if(!$timer){ return !trigger_error('Не указан идентификатор таймера'); }
if($this -> timer[$timer]['stop']) return round($this -> timer['timer'], $rand);
$mtime = microtime(true);
return round($mtime - $this -> timer[$timer]['start'], $rand);

}
}[/PHP]

Пример использования:
[PHP]$timer = new Timer();
$timer -> start('test') . '<br />';
for($i = 0; $i < 500000; $i++){
if(is_int($i / 100000)){
echo $timer -> get('test') . '<br />';
}
}
echo $timer -> stop('test');[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 11.12.2010, 23:18; Ответить: Mulder_hb
Сообщение #6


Любой таймер должен иметь одну специфическую особенность: его код не должен влиять на показания самого таймера. Сколько лишнего времени прибавит к показанию данный класс? Я думаю, результат будет сильно искаженным.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
Topic Starter сообщение 11.12.2010, 23:21; Ответить: ZhukV
Сообщение #7


Сколько лишнего времени прибавит к показанию данный класс?

Как же тогда создать?
На функциях и глоб переменных?
Смотрел только что на DLE, Drupal, Joomla, так там таймеры на классах, вот пример из DLE:
[PHP]class microTimer {
function start() {
global $starttime;
$mtime = microtime();
$mtime = explode( ' ', $mtime );
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
}
function stop() {
global $starttime;
$mtime = microtime();
$mtime = explode( ' ', $mtime );
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = round( ($endtime - $starttime), 5 );
return $totaltime;
}
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
MetSerp
MetSerp
сообщение 11.12.2010, 23:29; Ответить: MetSerp
Сообщение #8


Как же тогда создать?

а с какой целью делегировать функции таймера на сервер?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 11.12.2010, 23:41; Ответить: Letmetouchyou
Сообщение #9


[PHP]<?php

class timer{

static $timers = Array(), $stop = Array();

static function start($name){

if($name)
self::$timers[$name] = microtime(true);
}

static function getTime($name, $cut = 5){

if($name)
return round(microtime(true) - self::$timers[$name], $cut).' sec.';


}

static function stop($name){


self::$timers[$name] = microtime(true) - self::$timers[$name];
self::$stop[$name] = true;
}

static function getAll(){

foreach(self::$timers as $name=>$timer){

if(self::$stop[$name])
$all[$name] = $timer;
else
$all[$name] = microtime(true) - $timer;
}

return $all;

}

}

timer::start('first');

usleep(2000000);

$end = timer::getTime('first');

var_dump($end); # 2

usleep(4000000);

$end = timer::getTime('first');

var_dump($end); # 2 + 4

timer::stop('first');

timer::start('second');

usleep(1000000);

$end = timer::getTime('second');

var_dump($end); # 1


var_dump(timer::getAll());

?>[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 11.12.2010, 23:44; Ответить: Letmetouchyou
Сообщение #10


(alexdrob @ 12.12.2010, 00:40) *
В классе юзать глобальные переменные это нормально?)


Посмотрите пример тут
http://php.net/manual/en/function.microtime.php


ну так а зачем использвать лишный explode?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3430 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1246 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44951 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1894 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3410 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 26.4.2024, 8:39
Дизайн