ProDomainer.ru - Клуб Домейнеров  
     

Войти через OpenID
Left Nav Справка ПортфолиоАукцион (39) Календарь Поиск Сообщения за день Все разделы прочитаны Right Nav

Left Container Right Container
 
Старый 17.03.2013, 16:02   #1
Член Клуба ProDomainer.ru
 

Эффект холодного запуска?

Вчера начал перенос старого внешнего конвертора баз под новую архитектуру. Раньше тот конвертер просто писал в базу, но теперь ему нужно учитывать еще некоторые особенности. Адаптировать библиотеки под совместимость не хотелось. Сделал небольшой врапер, чтобы библиотеки из основного движка запускались вне окружения, т.е. из консольного пхп (где собственно и живет конвертер).
Ну поскольку там несколько библиотек надо подружить, то я написал совсем уж примитивный тест - чисто чтобы убедиться что все завелось:
PHP код:
<?php
require ('inc/common.php');
$tree = new _tree();
$index $tree->get(0);
print_r($index);
Тест выполнился правильно, но затратил на это целых четыре секунды.
Я просто никогда из консоли не запускал таких простых вещей, так что никогда не сталкивался с подобным эффектом.
Написал следующий код:
PHP код:
<?php
require ('inc/common.php');
$tree = new _tree();
for(
$i=0;$i<1000;$i++) {
    
$index $tree->get(0);
    
$tmp $tree->subChilds(0);
}
print_r($index);
Код отработал за 11 секунд.
Т.е. как минимум в тысячу раз больше вычислений заняло в три раза больше времени. (а реально $tree->subChilds(0) возвращает не одну запись а несколько сотен, и каждую еще как-то обрабатывает).

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

ПЫСЫ: даже на денвере оно работает существенно быстрее. А там вроде как код не кэшируется. Надо будет на будущее когда всякие консольные приблуды на пхп буду писать помнить, что лучше не перезапускать код, а каждый раз вовращать управление исходному процессу.

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 18.03.2013, 01:15   #2
Член Клуба ProDomainer.ru
 

Именно, - возвращать. Странно, что ты сейчас это обнаружил, я встречал такое, и часто, возможно мой код имеет какие-то плохие особенности, но всегда этот "холодный запуск" был связан с четырьмя проблемами:

- в коде есть неправильные конструкции, например пять вложенных циклов по 1000 итераций, которые делают что-то не очень рациональное, что можно упростить;
- тратится время на соединение с чем-либо (БД, удаленный сервер и проч.), опять же, если это цикл, то время растет;
- обработка чего-либо неверная, например перекодировка из одного в другое идет не через стандартную функцию, а через функцию с большим массивом автозамен или что-то такое;
- в БД что-то не то с кодировкой, и она работает медленно (редко такое).

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 18.03.2013, 02:12   #3
Член Клуба ProDomainer.ru
 

Ну так эти четыре проблемы связаны скорее просто с тормозами.
А тут эффект в том, что увеличение колва полезной нагрузки в несколько тысяч раз увеличило время работы лишь в три раза.
Неправильные конструкции у нас ты в тысячу раз выросли,
соединение да, тут ничего не попишешь,
неверная обработка тоже в тысячу раз выросла бы,
опять таки с кодировкой БД тоже все бы в тысячу раз выросло....

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 18.03.2013, 03:01   #4
Член Клуба ProDomainer.ru
 

Я все равно считаю это ошибкой кодинга , у тебя ведь скрипт в разных его кусках разное время исполняется, и 4 секунды на весь код, а 3.33 секунды какая-то часть, вот и получается, что 3.33 х 3 = 9.99 и остальные 1.01 секунды на другую часть кода.

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Старый 18.03.2013, 14:00   #5
Член Клуба ProDomainer.ru
 

Антон, я скопировал эти классы с рабочего вебпроекта. Там страница целиком генерируется 0.12 - 0.35 секунд. Специально самую тяжелую страницу на тестовом сервере выбрал - 0.30с - 0.35с генерируется. Я даже денвер перезагрузил на всякий случай, думал может у меня в библиотеке постоянное соединение прописано. Нифига.
И это при том, что у меня там код совершенно не оптимизирован. Во всех селектах идет *, одна и та же инфа запрашивается из базы повторно по пять раз и т.п. На сегодня это чистокровный прототип. Вся оптимизация снята для простоты кода, ибо я сильно меняю структуру.

Т.е. налицо факт - простой расчет из консоли берет 4 секунды, сложный расчет из консоли дает 11 секунд, а простой расчет из вебсервера с теми же библиотеками дает 0.1 секунды.

Может быть это конечно особенности именно консольного пхп, потому что вчера вот столкнулся со странной ситуацией - в консольном пхп у меня не было некоторых (всех?) стандартных констант, в частности я наговнокодил вот так:
PHP код:
    // "Магические" 6 и 8 идут потому что консольный пхп почему-то не тянет SORT_NATURAL | SORT_FLAG_CASE
    
sort($arr 8); 
Так что это действительно может быть из-за консоли, или от того, как именно я собрал себе консольный пхп (с минимумом библиотек, мог что-то ценное похерить, что влияет на скорость).


ПЫСЫ: Сейчас вот подумалось, что у меня в этом проекте все антипаттерны имеются - от божественного объекта и до магических чисел. ))

В любой ситуации выбор всегда за вами. Вы либо гуляете под дождем, либо просто под ним мокнете.
Mendel вне форума   Ответить с цитированием
Старый 19.03.2013, 15:59   #6
Член Клуба ProDomainer.ru
 

Может в консоли php-cgi?

«А вы, друзья, как не садитесь,
Всё в музыканты не годитесь» ©
UFO вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
Быстрый переход


Часовой пояс GMT +4, время: 21:47.