Як уникнути кешування під час розробки?


31

Чи є простий спосіб запобігти кеш-пам’яті під час тестування появи змін на сайті? Я використовую WP Super Cache. Я можу видалити кеш-пам'ять за допомогою наданої опції, видалити кеш для мого браузера, і все ж деякі зміни css або віджетів не оновлюються. Я намагаюся використовувати інші робочі кола, такі як перемикання браузерів або комп'ютерів, але повинен бути більш поточний робочий процес, де я можу переконатися, що я переглядаю внесені зміни, а не якийсь кешований раніше формат? Яке найкраще рішення для цього?


Здається, є також кілька плагінів, щоб зробити це для CSS. Це справді потрібно? Чи роблять ці плагіни щось таке, чого очищення кешу браузера не робить?
cboettig

У моєму випадку виявилося, що мені довелося очистити кеш, створений провайдером DNS (cloudflare). Дякую всім за запропоновані нижче пропозиції.
cboettig

Я використовую браузер Chrome; Анонімне вікно стає корисним, коли під час розробки я стикаюся з проблемами кешу на рівні браузера.
Джозеф Куландай

Сподіваюсь, цей плагін допоможе вам: wordpress.org/plugins/prevent-browser-caching
Костя Терещук

Відповіді:


32

Додайте filemtime()таблицю стилів як параметр версії. Скажімо, таблиця стилів за замовчуванням знаходиться в ( css/default.cssі не ). Коли ми реєструємо таблицю стилів ( не ), ми можемо передати версію як четвертий параметр. Це буде останній модифікований час, і тому ми змінюємо щоразу, коли ми змінюємо файл.css/default.min.cssstyle.csswp_loadedinit

$min    = WP_DEBUG ? '': '.min';
$file   = "/css/default$min.css";
$url    = get_template_directory_uri() . $file;
$path   = get_template_directory() . $file;
$handle = get_stylesheet() . '-default';

// Overridden?
if ( is_child_theme() && is_readable( get_stylesheet_directory() . $file ) )
{
    $url  = get_stylesheet_directory_uri() . $file;
    $path = get_stylesheet_directory()     . $file;
}

$modified = filemtime( $path );

add_action( 'wp_loaded', function() use ( $handle, $url, $modified ) {
    wp_register_style( $handle, $url, [], $modified );
});

add_action( 'wp_enqueue_scripts', function() use ( $handle ) {
    wp_enqueue_style( $handle );
});

Якщо ви використовуєте Node.js та Grunt, я настійно рекомендую Browsersync . Він буде дивитися ваші файли та миттєво їх оновлювати, коли вони змінюватимуться. Він також може синхронізувати позицію прокрутки, подати форми та багато іншого в декілька відкритих браузерів. Дуже круто.


Велике дякую. Здається, це також підхід до вищевказаного плагіна. Це не вирішило проблему в моєму випадку, оскільки мій постачальник DNS (CloudFlare) кешував файл css, тому мені довелося очистити кеш там - здогадуйтесь, немає простого способу цього. Взагалі, я вважаю, що це найкраща відповідь на подібне питання, тому я відзначу прийнятим. Знову дякую.
cboettig

Чому ви не використовуєте свій локальний таблицю стилів під час розробки?
fuxia

Деякі сервіси кешування хмари будуть важко кешувати ваш файл протягом 8 + годин, тому вам доведеться або попросити їх впровадити кращу послугу для версії версій (деякі це роблять), змінити сервіси або припинити їх використання.
Wyck

@cboettig CloudFlare має налаштування режиму розробки, яке зупинить кешування протягом 3-годинного вікна. Потім воно автоматично відновлює кешування через 3 години.
Гілберт

7

Шукаючи просте рішення багато разів, я вирішив знайти щось, що працює!

тож ... подумавши про це, я знайшов чудовий спосіб змінити кешування під час розробки нових веб-сайтів ... (і це легко).

Що нам потрібно - це сказати, що це нова версія CSS, як ця ...

Перед змінами:

wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), false, 'all' );

Після змін:

wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css?v='.time(), array(), false, 'all' );

Це те, що ми додали:

?v='.time()

Пояснення:
Ми в основному додаємо в файл css динамічний номер версії, який змушує браузер завантажувати новий css кожен раз, коли ми його оновлюємо.

Не забудьте видалити його після того, як ви закінчили розробку, інакше кешування не працюватиме для цього файлу, і він буде завантажуватися для повернення користувачів знову і знову.

Ця методика працює для файлів css & js - сподіваюся, це допоможе;)


Дуже приємно, але ще краще, просто використовуйте час () у четвертому параметрі, який є версією. Що б вам дало:wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), time(), 'all' );
Дейв

Використання часу в якості 4-го параметра може призвести до того, що хром може тримати цю версію. Це особливо актуально, якщо кешувати все інше, поки ви працюєте на реальному сайті. Таким чином ви надсилаєте "новий файл" до chrome, який він би використовував, а не намагався зберегти цю "стару" версію протягом певного часу (як це встановлено для інших ресурсів).
Вибачте SEO

Ні, прекрасно працює в хромі, я його вчора використовував.
Дейв

це означає, що ви не встановили кеш / час закінчення в своєму htaccess або через плагін. Але, що б не
спрацювало

6

Це може здатися надто простим, але як щодо того, щоб просто відключити кешування, поки ви не закінчите з розробкою частини вашого сайту? Увімкнути та вимкнути це більш ніж просто.


2
+1 - Я використовую панель інструментів "Веб-розробник" для Firefox, дозволяє дуже швидко відключити кеш (серед іншого)
Шейн

Спасибі - чи потрібно лише відключити кеш браузера? Чи WP superCache все-таки призведе до надання кешованого вмісту? Навіть мій сервіс DNS кешує, тому я не впевнений, чи потрібно мені вимкнути кожен кеш (WP, браузер, DNS тощо) окремо.
cboettig

Сорта залежить, вам доведеться пограти з цим і розібратися, що вам потрібно зробити для своєї конфігурації.
mor7ifer

Я з ним, просто відключити його, ось що я роблю.
мат

4

Я знаю, що на це питання було прийнято відповідь, але я вважаю, що ця відповідь все ще занадто складна для проблеми, яка існує, і може бути неправильною, залежно від користувача (проте, без правопорушення), тому я подумав, що все-таки поділюсь як я обминаю кешування, коли я роблю свій розробник (не лише з Wordpress).

У більшості сучасних веб-переглядачів є режим анонімного режиму . У цьому режимі нічого у вашому комп’ютері не кешується, тому кожне оновлення - це свіже завантаження шиферу з сервера. В Internet Explorer ви натискаєте Ctrl + Shift + P. У Firefox та Chrome ви натискаєте Ctrl + Shift + N.

Якщо у вашому веб-переглядачі немає режиму анонімного перегляду, ви можете звичайно перезавантажити, натиснувши Ctrl + F5на IE або Ctrl + Shift + Rна Firefox та Chrome.

Що стосується вашого питання стосовно файлів CSS (і по суті, всіх ваших файлів активів, як-от зображення та файли Javascript), то WP Super Cache жодним чином не кешується. Ваші налаштування та / або використання цього плагіна не впливають на спосіб подання цих файлів. Кешування цих файлів - це ваш браузер , і саме тому ви робите важке перезавантаження.

Що робить плагін - це він оцінює, як Wordpress створює ваші HTML-файли (через PHP), і зберігає копію, щоб наступного разу хтось запитав ту саму публікацію, сторінку чи будь-яку іншу, вона обслуговувала копію, і не доведеться переоцініть сформований PHP HTML ще раз, а отже, заощадите трохи часу на обчислення, завантажуючи ваші сторінки набагато швидше. (Я сподіваюся, що це зрозуміло.)

Проблема з цим полягає в тому, що якщо ви ляпаєте по часовій позначці URL-адрес ваших CSS-файлів за допомогою функції PHP, це оцінка PHP для HTML, і це буде кешовано WP Super Cache. Кожен запит на ту саму посаду матиме однакову позначку часу, оскільки користувачам надсилається копія оригінальної оцінки часової мітки. (Виправте мене, якщо я помиляюся.)

Правильний спосіб обійти кешування WP Super Cache - встановити параметр Don't cache for known usersна trueсторінці налаштувань плагіна.

Нарешті (і це є особистим уподобанням, оскільки я справжній стикер, що стосується кодування), вдаючись до використання анонімного перегляду або примусового жорсткого перезавантаження, не зажадає від вас додавати зайву розмітку на своїх HTML-сторінках. Звичайно, додавання часової позначки додає лише близько 13 байт на статичний файл на запит, але ей, як я вже сказав, я є стикером для подібних матеріалів. Це ще 13 байт непотрібних.


Дякуємо за корисні поради. На жаль, жодна з відповідей тут не вірна в моєму випадку, оскільки моє рішення вимагало очищення кешу постачальника послуг доменних мереж, cloudflare, але багато з них все ще були хорошою інформацією.
cboettig

2

Боже, багато способів відповісти на це! Перш за все, ви запитали про дві різні речі: WP Super Cache та CSS файли. Вони кешовані по-різному, в різних місцях, тому важливо визнати, де ваша проблема.

Якщо WP Super Cache, ви можете визначити константу DONOTCACHEPAGEу своїх функціях.php під час розробки, щоб запобігти кешуванню WP Super Cache будь-чим. Не забудьте видалити це при запуску!

define('DONOTCACHEPAGE', true);

Кожен сайт також має унікальний ключ для додавання до URL-адреси, щоб завантажити свіжу версію сторінки, яку ви можете знайти на вкладці "Додатково", я вважаю.

Зробивши це до ще кращого рішення, слід розглянути можливість створення середовища розробки та виробничого середовища, де у вашому середовищі розробки не буде включено WP Super Cache (знову ж таки, припускаючи, що це ваша проблема).

Якщо ваша проблема стосується файлів CSS / JS, перегляньте відповідь toscho та подальший коментар m0r7if3r вище.


1

HyperCache відключає кешування, коли ви ввійшли як адміністратор. Не впевнений, чи має WP Super Cache однаковий функціонал.


Для цього є варіант, так.
Меттью Бойнес

1

Якщо ви користуєтеся Chrome (що я настійно пропоную), відкрийте Інспектор, натисніть значок налаштувань у правому нижньому куті та в розділі "Мережа" виберіть "Відключити кеш".


0

Як сказано для кешу wp super, але для загального кешування WP у wp-config.php зміні цього:

define( 'WP_CACHE', false );

Довідка: codex.wordpress.org


-1

Ви можете використовувати цей фрагмент https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1

Він буде генерувати нову версію вашого активного css теми та js щоразу, коли ви завантажуєте сторінку


Будь ласка, опублікуйте відповідь тут, включаючи весь відповідний код. Використовуйте зовнішні сайти лише для довідки. Ваш пост повинен містити повну відповідь, не потрібно переходити на інший сайт; якщо веб-сайт третьої сторони знизиться, ваша відповідь буде
невикористаною
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.