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')),

Другие вопросы по тегам