сделал небольшой тест...почему такие результаты?

alrond

Guest
сделал небольшой тест...почему такие результаты?

я сравнивал, что быстрее работает при отдаче статического контента...
ведь не секрет, что малоизменяемые данные лучше хранить в файле, а не в базе.

так вот...
взял два способа вывода...через include и fopen.
читаю один и тот же файл 4 раза и замеряю для каждого раза время выполнения кусочка программы.
порядок работы скрипта:
1) через include
2) через fopen
3) снова через fopen
4) снова через include

кстати, различий между print и echo действительно не обнаружено

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

1.2 кб
1) 0.0003
2) 0.0001
3) 0.0001
4) 0.0001
с кэшем то же самое


12кб
1) 0.0008
2) 0.2193
3) 0.0722
4) 0.0007
с кэшем
1) 0.0008
2) 0.0002
3) 0.2195
4) 0.0007

42 кб
1) 0.2904
2) 0.1322
3) 0.0909
4) 0.121
с кэшем
1) 0.02
2) 0.0004
3) 0.36
4) 0.27

209 кб
1) 0.7825
2) 0.8323
3) 0.8348
4) 0.8334
с кэшем тоже самое

ктонибудь может объяснить, почему в случае средних файлов (12 и 42 кб) работа fopen такая?
то есть при первой загрузки первое открытие файла дольше в 2-3 раза, но с кэшированием наоборот! и разница в ТЫСЯЧУ раз!....хотя вроде только что был файл прочитан
и еще fopen при 42 кб с кэшем в 5 раз быстрее первого открытия через инклюд

я проводил тест специально для того, чтобы определить что лучше использовать для организации сайта, частично или полностью использующего статику...

то есть например мини-CMS, где вместо записи в таблицу будет генерироваться один файлик на статью, который потом через инклюд подключается. редактирование не критично...это именно статическая информация..., но вызываемая через PHP

я этот тестик сделал для проверки в реальных условиях...на сервере, то есть где и процессор и настройки и память влияют...
понятно...fopen лучше не использовать....
а вот чем readfile лучше include?
именно для задачи встраивания контента HTML,
понятно, что если код PHP там есть, то реадфайл не прокатит...

Добавлено
только что протестил инклюд и реадфайл...
работают одинаково...токо вот функция, которая идет второй всегда в несколько раз медленнее...

а потом сделал просто вывод на экран двух файлов (по 38кб) обеими функциями и попарно
и оказалось, что время генерации около 0.3

пробовал и с
ob_start();
ob_end_flush();
ob_end_clean();

результат не меняется...

как можно ускорить выполнение этих скриптов?
то есть не может так же быть...чтобы на простое чтение двух файлов уходило так много времени...многие движки форумов работают быстрее...а там файлов подгружается ого-го сколько

Добавлено
что за число может быть такое: 22329
файл с таким размером readfile() обрабатывает микросекунды, если уже 22330, то разница в 500(!!!) раз...
причем не еденичные выполнения скрипта, а усредненное значение...
я так понимаю это связано с ограничением буфера...только какого?
если файлы не выводить в броузер, а только подключать их через инклюд, то время почти не увеличивается....даже если подключается сотня килобайт....
но вот с той цифрой в 22кб все еще не ясно
тест проводил в "боевых" условиях...
то есть я грузил эти тесты на сервер...и уже потом их браузером открывал...

PHP 4.3.3
Apache 2.0.48
SUSE 9.0
 

Кром

Новичок
>читаю один и тот же файл 4 раза

После этой фразы отчет о тестировании похож скорее на фельетон.
 

alrond

Guest
это не отчет о тестировании....
это просьба объяснить, почему так работает с кэшированием
и как лучше организовать такую CMS...
просьба о движках не говорить....так как все писаться будет с нуля, а все движки работают с базой....
и хотя база будет тоже, но не для хранения контента...он должен быть статичным
 

SelenIT

IT-лунатик :)
alrond

результаты ... с первого запуска скрипта, и с остальных (включается кэширование)
Откуда такая информация?

чем readfile лучше include? именно для задачи встраивания контента HTML
По-видимому тем, что не пытается искать и исполнять php-код в файле.

я так понимаю это связано с ограничением буфера...только какого?
если файлы не выводить в броузер, а только подключать...
Попробуй использовать другие ф-ции и замерить время вывода для файлов разного размера отдельно от времени чтения.
 

Кром

Новичок
>это просьба объяснить, почему так работает с кэшированием

Т.е. ты спрашиваешь, почему солнце зеленое, если смотреть на него через зеленые очки?

>и как лучше организовать такую CMS.
>но не для хранения контента...он должен быть статичным

Перед тем как говорить о CMS, узнай, что это такое.
 

alrond

Guest
я работал с мамбой...так вот...для моей задачи даже мамба слишком большая...

мне не нужна регистрация пользователей, автор один, исправлений не будет, текст статичный, но встраивается в динамическую страницу

про вопрос "ТАК работает" я имею ввиду, что
12кб
2) 0.2193
3) 0.0722

с кэшем
2) 0.0002
3) 0.2195
первое открытие страницы/работа скрипта - fopen работает в 3 раза медленнее
зато при нажатии F5 в браузере много раз (вариант с кэшем...согласен, примитивно) - повторное открытие файла, сразу же(!), работает в тысячу раз медленнее

может я что-то и не то делаю, но я все же новичек...и пишу в соответствующем форуме
 

Кром

Новичок
alrond, во-первых, учитвая что у тебя в сайте фактически нет никакой динамики твоя озабоченность кеширванием совершенно непонятна.

Во-вторых, дело в том, что задавая свой вопрос ты отталкиваешся от теста, который изначально неправильно организован. Таким образом дальнейшие рассуждения на тему кто сильнее, кит или слон, будут совершенно бессмыстенны.
Так что если ты хочешь здесь говорить о скорости приведи нормальные данные, где речь идет не о четырех, а о миллионах итераций. Кроме того нужно подготовить сервер, проверить скрипты (и естественно показать из общественности), возможно в них есть логические ошибки, наконец проверить файлы с данными.
А пока, глядя на этот столбик с четырьмя цифрами, говорить не о чем.
 

alrond

Guest
этот тестик я делал просто посмотреть какую функцию в дальнейшем использовать для этих задач...
вывод таков: если встраиваемый код будет содержать PHP, то include(), если только HTML, то fileread(), чтобы mod_php не искал внутри код...
 

Кром

Новичок
А, понятно. Ты решил всем рассказать свое открытие о функциях, которые не парсят код? Спасибо, но все уже в курсе.
 

alrond

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

Кром

Новичок
>где можно про это побольше почитать...не про функции, а про то,как их применять правильно...например парсить код...

А что по этому поводу говорят ну ру-борде? :)
 
Сверху