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