Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 22:34

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Скорость работы mb_* функций
СообщениеДобавлено: 18 ноя 2013, 17:07 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Привет!

Кто-то доказывал мне, что mb_detect_encoding, работает в разы быстрее своих конкурентов.
Сделал простой тест. Прогнал строку через функцию 1000000 раз. Посмотрел кто быстрее.
Проверял на машине с таким окружением: Windows 7 (x64) + Apache 2.4.x (x64) + php 5.5.6 (x64)

В качестве строки использовал:

Код:
    $string "ывлдоkfdsuLIU(*knj4k58u7MJHKkiyhsf9hfhlknhlkjldfivjo8iulkjlgs".
              
"2345678901234567890123456789012345678901234567890123456789012".
              
"ыдваолт ДЛЯОЧДльы0щ39478509г0*()*?Щчялртодылматцю4к 2ылвсголо".
              
"4567890123456789012345678901234567890123456789012345678901234".
              
"4567890123456789012345678901234567890123456789012345678901234".
              
"asdfsd ds.kjasldasjlKUJLjLKZjulizL kzjxLkUJOLIULKM.LKl;.mcvss"


Проверял так:

Код:
    $s microtime(true);

    for (
$i=0$i<1000000$i++)
    {
            
// Алгоритм проверки
    
}

    
$e microtime(true);

    echo 
$e-$s


И вот, что у меня вышло:

11.634791135788 секунд
Код:
preg_match('//u', $string ) 


Fatal error: Maximum execution time of 30 seconds exceeded
Код:
(preg_match('%^(?>
                [\x09\x0A\x0D\x20-\x7E]              # ASCII
                | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
                |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
                | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
                |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
                |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
                | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
                |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
            )*$%xs'
, $string) 

Этот алгоритм проверки рекомендует W3C. Кстати, хочу заметить, что атомарная группировка (?: под Windows окружением у меня не работает. Т.е. браузер пишет - "Ошибка, страница не найдена" :) Логи сервера и php пусты, а браузер не может открыть страницу. А вот, (?> работает и в Linux окружении и в Windows. Честно говоря не совсем понятно, с чем это связанно. То ли из-за сборки php, то ли из-за странных конфигов php, но я вроде бы всё проверил и не нашёл причину такого странного поведения.

12.27244400978 секунд
Код:
preg_match('/^./su'$string


15.370143890381 секунд
Код:
mb_detect_encoding($string, array('UTF-8'), true


23.193331956863 секунд
Код:
preg_match('//u'serialize($string)) 


А каким методом для определения UTF-8 пользуетесь вы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скорость работы mb_* функций
СообщениеДобавлено: 19 ноя 2013, 22:10 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Fatal error: Maximum execution time of 30 seconds exceeded - а ты бери не весь документ, а лишь часть. обычно в таких случаях я смотрю комменты на php.com к описанию функций - для mb_detect_encoding приводится несколько альтернативных вариантов.

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скорость работы mb_* функций
СообщениеДобавлено: 20 ноя 2013, 01:00 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
А я и брал не весь документ, а конкретную строку, которую указал в самом начале и с ней и игрался. Каждый конкретный случай проверял отдельно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скорость работы mb_* функций
СообщениеДобавлено: 20 ноя 2013, 02:48 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Насчет строки затупил =\ вообще конечно странно как получилось превышение, я конечно помню, что preg_* ф-ции ресурсоёмкие, но чтобы настолько...
Кстати попробуй что-то вроде:
Код:
<?php $utf8 = (md5(iconv('utf-8', 'utf-8', $string)) == md5($string)); ?> 

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скорость работы mb_* функций
СообщениеДобавлено: 21 ноя 2013, 05:48 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Ага, я в курсе.
Не стал пробовать пробовать по двум причинам: 1) iconv вообще не совсем стандартное решение, оно как бы на shared хостингах отключено, а у меня была цель использовать что нибудь более менее универсальное. 2) В общем то я видел как парни из Kohana Team отказывались от iconv из-за ресурсоёмкости


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group