Есть ли способ использовать @import для кэша файлов CSS безопасно?

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

A Transform stream - это дуплексный поток, где вывод каким-то образом вычисляется с входа.

blockquote >

0
задан helle 17 January 2019 в 10:52
поделиться

1 ответ

Я полагаю, что единственный способ вызвать перезагрузку в css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.

Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime() вместе с правилами перезаписи для автоматического обновления имени версии css всякий раз, когда в файл вносятся изменения.

Вот пример:

// Pass in the url path to the file '/frontend/css/main.css' for example
function css_auto_version($file) {
    // Return $file if the path is faulty to prevent errors.
    if(strpos($file, '/') !== 0 || !file_exists(

Я полагаю, что единственный способ вызвать перезагрузку в css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.

Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime() вместе с правилами перезаписи для автоматического обновления имени версии css всякий раз, когда в файл вносятся изменения.

Вот пример:

[110]

Затем в вашем файле .htaccess для корня документа вам нужно добавить следующее:

RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]

Это правило переписывания в основном говорит apache вместо этого ищет /frontend/css/main.TIMESTAMP.css в /frontend/css/main.css.

Теперь вы можете использовать эту функцию в своем php-шаблоне, как этот echo css_auto_version('/frontend/css/main.css');, и имя файла в пути всегда будет содержать метку времени последнего изменения файла. Любой браузер с более старой версией кэшированного файла поверит, что это совершенно другой файл, и перезагрузит его с сервера. Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.

Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import в тег style в HTML и включить туда php.

Вы можете узнать больше о filemtime здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp

Если вы действительно хотите просто всегда принудительно перезагружать, Независимо от того, изменился ли файл на самом деле, я бы предложил установить в ответе заголовки http как no-cache. Вы можете прочитать больше об этом здесь:

HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control [ 1120]

PHP header () https://www.w3schools.com/php/func_http_header.asp

Надеюсь, это поможет!

SERVER['DOCUMENT_ROOT'] . $file)) return $file; // filemtime() returns a timestamp showing the last time the file was changed. $mtime = filemtime(

Я полагаю, что единственный способ вызвать перезагрузку в css - это изменить версию в URL-адресе импорта, как вы упомянули в своем вопросе.

Не уверен, поможет ли это, но , используя php и apache, вы можете использовать filemtime() вместе с правилами перезаписи для автоматического обновления имени версии css всякий раз, когда в файл вносятся изменения.

Вот пример:

[110]

Затем в вашем файле .htaccess для корня документа вам нужно добавить следующее:

RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]

Это правило переписывания в основном говорит apache вместо этого ищет /frontend/css/main.TIMESTAMP.css в /frontend/css/main.css.

Теперь вы можете использовать эту функцию в своем php-шаблоне, как этот echo css_auto_version('/frontend/css/main.css');, и имя файла в пути всегда будет содержать метку времени последнего изменения файла. Любой браузер с более старой версией кэшированного файла поверит, что это совершенно другой файл, и перезагрузит его с сервера. Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.

Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import в тег style в HTML и включить туда php.

Вы можете узнать больше о filemtime здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp

Если вы действительно хотите просто всегда принудительно перезагружать, Независимо от того, изменился ли файл на самом деле, я бы предложил установить в ответе заголовки http как no-cache. Вы можете прочитать больше об этом здесь:

HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control [ 1120]

PHP header () https://www.w3schools.com/php/func_http_header.asp

Надеюсь, это поможет!

SERVER['DOCUMENT_ROOT'] . $file); // return '/frontend/css/main.TIMESTAMP.css' return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file); }

Затем в вашем файле .htaccess для корня документа вам нужно добавить следующее:

RewriteEngine on
RewriteRule ^(.*)\.[\d]{10}\.(css)$ $1.$2 [L]

Это правило переписывания в основном говорит apache вместо этого ищет /frontend/css/main.TIMESTAMP.css в /frontend/css/main.css.

Теперь вы можете использовать эту функцию в своем php-шаблоне, как этот echo css_auto_version('/frontend/css/main.css');, и имя файла в пути всегда будет содержать метку времени последнего изменения файла. Любой браузер с более старой версией кэшированного файла поверит, что это совершенно другой файл, и перезагрузит его с сервера. Правило перезаписи удалит отметку времени в запросах и позволит серверу найти правильный файл CSS и отправить его обратно в браузер.

Поскольку вы не можете использовать php внутри css-файла, вам, вероятно, придется включить правила @import в тег style в HTML и включить туда php.

Вы можете узнать больше о filemtime здесь https://www.w3schools.com/php/func_filesystem_filemtime.asp

Если вы действительно хотите просто всегда принудительно перезагружать, Независимо от того, изменился ли файл на самом деле, я бы предложил установить в ответе заголовки http как no-cache. Вы можете прочитать больше об этом здесь:

HTTP Cache-control https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control [ 1120]

PHP header () https://www.w3schools.com/php/func_http_header.asp

Надеюсь, это поможет!

0
ответ дан Azer 17 January 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: