есть такой код Код (Text): <?php $start = microtime(); $filename = 'cache/'.md5($_SERVER['REQUEST_URI']).'.html'; $cached = false; $time = 4 * 60 * 60; // Время кеша в секундах (4*60*60 = 4 часа) $stat = 0; // Установите 1 для вывода времени загрузки страницы (по умолчанию 0) if (file_exists($filename)) { if ((time()-filemtime($filename))<$time) { $cached = true; } else { unlink($filename); $cached = false; } } if ($cached) { readfile($filename); } else { ob_start(); // WP define('WP_USE_THEMES', true); require('./wp-blog-header.php'); // $text = ob_get_clean(); $fh = fopen($filename, 'w+'); fwrite($fh, $text); fclose($fh); echo $text; } $finish = microtime(); if ($stat==1) echo $finish-$start; ?> при первом выполнении, когда кеш пустой, ф-я memory_get_usage показывает 11 мб в дальнейшем, когда данные берутся из кеша выделяется 4 мб памяти не могу понять почему так происходит простое чтение с диска дает всего в 3 раза экономию памяти? как уменьшить память?
readfile читает файл по кусочкам в 8192 байт и сразу отдаёт на вывод поэтому этой функцией можно очень большие файлы отдавать юзеру без потери памяти. Память не нужно уменьшать) Добавлено спустя 2 минуты 15 секунд: И кстати, во втором случае Вы используете ob_start(); - значит весь ваш вывод сохраняется в буфер (память) перед выводом.
я имел ввиду уменьшить потребление памяти в скрипте я пробовал через file_get_contents -расход памяти не сильно изменился взял пустой пхп файл, вставил 1 строку Код (Text): echo round(memory_get_usage()/1024/1024, 2); и она показала 4 мб неужели нельзя расход памяти уменьшить?
memory_get_usage показывает текущий расход памяти. Попробуйте использовать memory_get_peak_usage() и узнаете сколько памяти было израсходовано максимально за весь запуск (если проверка в конце скрипта).
11мб - эт канеш много, хотя для джумлы является нормой. А вот 4 мегабайта это уже не так много, если проект довольно крупный. Можно ссыль на страничку, отжирающую 4 метра? И да, а что за кеш используется? Просто файловый? И аккселератор стоит ли? Расход оперативы может лихо набегать кучей инклудов. Аккселератор нивелирует этот оверхед.
так я писал что 4 мб для пустой страницы Код (Text): <?php echo memory_get_peak_usage(); вот такой код выводит 4 мб memory_get_peak_usage тоже самое
чочочочочочочочочо? О_о Для пустой страницы под вордпрессом/джумлой или просто для пустой страницы? У меня за 4 метра памяти можно 1000+ модулей инициализировать и на страницу выбросить, причем в эти 4 метра входить будет еще буфер вывода, в котором лежит JS и тд. Во: И это без аккселератора. Хотя он тут сэкономит от силы килобайт 250, которые ушли на парсинг. Основной объем все равно занимает буфер вывода.
пустая страница значит что в коде ничего нету, ничего не подключается весь код Код (Text): <?php echo memory_get_peak_usage(); ?> выводит 4307876
Это ни есть нормально, так не должно быть. Как у вас php подключен к серверу? Какие стоят расширения левые?
В phpinfo, конечно же. Server API. Ну а модули дополнительные левые - там же, но в отдельных секциях. Или в конфиге пыха. Второе удобнее.
xdebug есть? В нем трассировку сделайте, и лог сюда, чтобы было видно, память отожрана до исполнения или во время все же.
в один момент если к тебе зайдёт тыща человек, То у тебя и так и сяк всё помрёть. Но вот когда зайдёт - можно будет купить сервак пожирнеече. Добавлено спустя 5 минут 12 секунд: Померял у себя, получил 703008 байт. наверное корошо. Цмс самопис.
блин я же не пишу что у меня цмс или джумла или еще чтото просто пустой файл вобще без кода сжирает 4 метра хостер отмахивается изза того что у меня вдс и я должен сам им заниматься или платить за услуги