php clearstatcache() объяснение производительности и параметров
Я использую filemtime
для снятия отпечатков внешних ресурсов в html, например:
<link rel="stylesheet" href="screen-<?=md5(filemtime('screen.css'));?>.css">
Я заметил значительную задержку между эффективным обновлением и отметкой времени, возвращенной filemtime
так что я добавил clearstatcache()
на вершине, которая, кажется, решить проблему. Но согласно инструкции php:
Вам нужно вызывать clearstatcache() только в том случае, если вы выполняете несколько операций с одним и тем же именем файла и хотите, чтобы информация об этом конкретном файле не кэшировалась.
Так что мне интересно, правильно ли я это использую.
Кроме того, я обеспокоен производительностью полной очистки кэша при каждом вызове. Может кто-нибудь сказать мне, если это может вызвать значительное замедление работы сервера?
clearstatcache
также принимает два дополнительных параметра, но я не уверен в их значении:
clear_realpath_cache Очистить ли кеш реального пути или нет.
filename Очистить реальный путь и кеш статистики только для определенного имени файла; используется только если clear_realpath_cache имеет значение TRUE.
Я не понимаю, что означает "кеш реального пути", и я не смог найти никакой информации об этом. Есть ли смысл звонить clearstatcache
сюда:
clearstatcache(true,'/path/to/screen.css');
с целью очистки только информации, связанной с этим конкретным файлом (и, следовательно, уменьшить "влияние" clearstatcache
)?
3 ответа
Кажется, что вы используете функцию правильно. Если вы не используете другие функции статистики (как указано в документе), которые вы бы предпочли кэшировать, я не знаю причины, по которой это может привести к значительному замедлению.
Когда ты include('somefile')
, somefile
может быть в разных местах, как это определено include_path
, cwd и т. д. Кеш реального пути просто устраняет необходимость многократного поиска в этих местах.
Для вашего использования ваш код выглядит нормально.
$clear_realpath_cache относится к вызовам функции realpath, результаты которой также кэшируются. Это не должно повлиять на ваши обращения к filemtime.
Я не могу дать ответ напрямую.
Но я предлагаю вам использовать md5_file('screen.css')
вместо md5(filemtime('screen.css'))
,