Cum eviți utilizarea cache-ului în timpul dezvoltării?
Există o modalitate simplă de a preveni orice tip de cache în timp ce testezi aspectul modificărilor pe site? Folosesc WP Super Cache. Pot șterge cache-ul acestuia folosind opțiunea furnizată, pot șterge cache-ul browserului meu, și totuși unele modificări la CSS sau widget-uri nu se actualizează. Încerc alte soluții alternative precum schimbarea browserelor sau a calculatoarelor, dar trebuie să existe un flux de lucru mai simplificat prin care să mă asigur că văd modificările pe care le-am făcut și nu un format anterior stocat în cache. Care este cea mai bună soluție pentru aceasta?

Adaugă filemtime()
pentru fișierul tău de stiluri ca parametru de versiune. Să presupunem că fișierul tău implicit de stiluri este în css/default.css
și css/default.min.css
(nu style.css
). Când înregistrăm un fișier de stiluri în wp_loaded
(nu init
), putem pasa o versiune ca al patrulea parametru. Aceasta va fi data ultimei modificări și, prin urmare, se va schimba de fiecare dată când modificăm fișierul.
$min = WP_DEBUG ? '': '.min';
$file = "/css/default$min.css";
$url = get_template_directory_uri() . $file;
$path = get_template_directory() . $file;
$handle = get_stylesheet() . '-default';
// Suprascris?
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 );
});
Dacă folosești Node.js și Grunt, recomand cu tărie Browsersync. Acesta va monitoriza fișierele tale și le va actualiza instantaneu ori de câte ori se modifică. Poate de asemenea sincroniza poziția de scroll, trimiterea formularelor și multe altele între mai multe browsere deschise. Foarte cool.

Mulțumesc mult. Se pare că aceasta este și abordarea pluginului menționat mai sus. În cazul meu nu a rezolvat problema deoarece furnizorul meu de DNS (CloudFlare) stoca în cache fișierul css, așa că a trebuit să golesc cache-ul acolo — presupun că nu există o soluție simplă pentru asta. În general, cred că acesta este cel mai bun răspuns pentru acest tip de problemă, așa că voi marca ca acceptat. Mulțumesc din nou.

Unele servicii de caching în cloud vor stoca fișierul tău în cache pentru 8+ ore, așa că fie trebuie să le ceri să implementeze un serviciu mai bun pentru versionare (unele fac asta), să schimbi serviciile, sau să nu le mai folosești.

După ce am căutat de multe ori o soluție simplă, am decis să găsesc ceva care chiar funcționează!
Așa că... după ce m-am gândit la asta, am găsit o metodă foarte bună de a suprascrie caching-ul în timp ce dezvoltăm site-uri noi... (și este ușor).
Ceea ce avem nevoie este să-i spunem lui WP că aceasta este o nouă versiune de CSS, astfel...
Înainte de modificări:
wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), false, 'all' );
După modificări:
wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css?v='.time(), array(), false, 'all' );
Iată ce am adăugat:
?v='.time()
Explicație:
Practic, adăugăm un număr de versiune dinamic la fișierul CSS, ceea ce forțează browserul să încarce noul CSS de fiecare dată când îl actualizăm.
Nu uitați să eliminați această modificare după ce terminați dezvoltarea, altfel caching-ul nu va funcționa pentru acest fișier și se va reîncărca pentru utilizatorii care revin pe site.
Această tehnică funcționează atât pentru fișierele CSS, cât și pentru cele JS - sper că vă este de folos ;)

Destul de frumos, dar și mai bine, folosește pur și simplu time() în al 4-lea parametru care este versiunea. Ceea ce ar da: wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), time(), 'all' );

Folosirea time() ca al 4-lea parametru ar putea determina Chrome să rețină acea versiune. Acest lucru este valabil mai ales dacă folosești caching pentru toate celelalte resurse în timp ce lucrezi la un site live. În acest fel, transmiți un "fișier nou" către Chrome, pe care acesta l-ar folosi în loc să încerce să păstreze versiunea "veche" pentru o anumită perioadă de timp (așa cum este setat pentru alte resurse).

+1 - Eu folosesc toolbar-ul "Web Developer" pentru Firefox, care îți permite să dezactivezi foarte rapid cache-ul (printre altele)

Mulțumesc - este necesar doar să dezactivez cache-ul browserului? WP Super Cache va continua să ofere conținut din cache? Chiar și serviciul meu de DNS cache-ază, așa că nu sunt sigur dacă trebuie să dezactivez fiecare cache (WP, browser, DNS etc) separat.

Depinde, va trebui să experimentezi și să afli ce trebuie să faci pentru configurația ta.

Știu că această întrebare are deja un răspuns acceptat, dar cred că acel răspuns este încă prea complicat pentru problema în cauză și poate fi chiar incorect în funcție de utilizator (fără supărare), așa că am vrut totuși să împărtășesc cum ocolesc caching-ul în timpul dezvoltării (nu doar în WordPress).
Majoritatea browserelor moderne au un mod numit mod incognito. În acest mod, nimic nu este stocat în cache pe computerul tău, așa că fiecare reîmprospătare este o descărcare proaspătă de pe server. În Internet Explorer apeși Ctrl + Shift + P
. În Firefox și Chrome, apeși Ctrl + Shift + N
.
Dacă browserul tău nu are mod incognito, poți forța de obicei o reîmprospătare completă apăsând Ctrl + F5
pentru IE sau Ctrl + Shift + R
în Firefox și Chrome.
În ceea ce privește întrebarea ta despre fișierele CSS (și, în esență, toate fișierele de resurse, cum ar fi imaginile și fișierele JavaScript), acestea nu sunt stocate în cache în niciun fel de WP Super Cache. Setările tale și/sau utilizarea acestui plugin nu afectează modul în care aceste fișiere sunt servite. Ceea ce stochează aceste fișiere în cache este browserul tău, și de aceea faci o reîmprospătare completă.
Ceea ce face plugin-ul este să evalueze cum WordPress construiește fișierele tale HTML (prin PHP) și să stocheze o copie, astfel încât data viitoare când cineva solicită același articol, pagină sau orice altceva, să servească copia și să nu mai fie nevoie să reevalueze HTML-ul generat de PHP din nou, economisind astfel timp de calcul și încărcând paginile mult mai rapid. (Sper că este clar.)
Problema cu asta este că, dacă adaugi un timestamp la URL-ul fișierelor CSS prin intermediul unei funcții PHP, acesta este o evaluare PHP în HTML și va fi stocat în cache de WP Super Cache. Fiecare solicitare pentru același articol va avea același timestamp, deoarece utilizatorilor li se servește o copie a evaluării originale a timestamp-ului. (Corectează-mă dacă greșesc.)
Modul corect de a ocoli caching-ul WP Super Cache este să setezi opțiunea Don't cache for known users
la true
în pagina de setări a plugin-ului.
În final (și aceasta este o preferință personală, deoarece sunt foarte meticulos când vine vorba de codare), recurgerea la utilizarea modului incognito sau a reîmprospătărilor forțate nu te va obliga să adaugi markup inutil pe paginile tale HTML. Desigur, adăugarea unui timestamp adaugă doar aproximativ 13 octeți per fișier static pe solicitare, dar, hei, cum am spus, sunt meticulos cu astfel de lucruri. Totuși sunt 13 octeți inutili.

Ceea ce a funcționat pentru mine, rulând WordPress pe un stack Bitnami sub Windows, a fost să editez fișierul php.ini și să repornesc serverul.
În secțiunea [opcache], am schimbat opcache.revalidate_freq la 1:
opcache.revalidate_freq=1
Apoi am repornit serverele și acum paginile mele afișează imediat modificările aduse plugin-urilor.

Uau, sunt multe moduri de a răspunde la această întrebare! În primul rând, ai menționat două lucruri diferite: WP Super Cache și fișierele CSS. Acestea sunt stocate în cache în locuri diferite, așa că este important să identifici unde este problema ta.
Dacă problema este legată de WP Super Cache, poți defini constanta DONOTCACHEPAGE
în fișierul tău functions.php în timpul dezvoltării pentru a preveni WP Super Cache să stocheze orice în cache. Nu uita să o elimini după ce lansezi site-ul!
define('DONOTCACHEPAGE', true);
De asemenea, fiecare site are o cheie unică care poate fi adăugată la URL pentru a încarca o versiune proaspătă a paginii, pe care o poți găsi în fila "Advanced", cred eu.
Pentru o soluție și mai bună, ar trebui să configurezi un mediu de dezvoltare și un mediu de producție, unde mediul de dezvoltare nu are WP Super Cache activat (presupunând că aceasta este problema ta).
Dacă problema ta este legată de fișierele CSS/JS, atunci consultă răspunsul lui toscho și comentariul ulterior al lui m0r7if3r de mai sus.

Așa cum s-a menționat pentru wp super cache, dar pentru caching-ul general în WP în wp-config.php
Schimbă în aceasta:
define( 'WP_CACHE', false );
Referință: codex.wordpress.org

Puteți folosi acest fragment de cod https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1
Acesta va genera o nouă versiune a fișierelor CSS și JS ale temei active de fiecare dată când încărcați pagina
