хэш CSS и JS файлы, чтобы сломать кешЭто медленно? - PullRequest
2 голосов
/ 24 июня 2011

У меня есть сценарий, который генерирует шаблоны страницы.Кроме того, этот сценарий отображает теги <script> и <link rel='stylesheet'> в HTML.

Я хотел бы добавить функцию отключения кэша с параметром "? V = xxxxx".

Я делаюэто так:

foreach ($scripts as &$script) {

    // get script file name
    $script = "{$this->_js_folder}/{$script}";

    // get it's realpath
    $realfile = realpath(substr($script,1));

    // hashing the file
    $hash = md5_file($realfile);

    // adding cache-breaking number
    $script .= '?v='.$hash;

} //: foreach

Разве это не медленно, хэшировать около десятка файлов каждый раз, когда пользователь обновляет страницу?

Ответы [ 3 ]

5 голосов
/ 24 июня 2011

Лично я не стал бы хэшировать файл, это пустая трата ресурсов.Вместо этого я бы добавил последнюю модифицированную метку времени в v? = .... Я имею в виду что-то вроде этого:

foreach ($scripts as &$script) {

    // get script file name
    $script = "{$this->_js_folder}/{$script}";

    // get it's realpath
    $realfile = realpath(substr($script,1));

    // getting last modified timestamp
    $timestamp = filemtime($realfile);

    // adding cache-breaking number
    $script .= '?v='.$timestamp;

} //: foreach
3 голосов
/ 24 июня 2011

Жестоко для ваших пользователей каждый раз ломать кеш. Как часто вы меняете эти файлы?

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

2 голосов
/ 24 июня 2011

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

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

...