Geliştirme sırasında önbelleğe almayı nasıl önlersiniz?


31

Sitedeki değişikliklerin görünümünü test ederken tüm önbelleklemeyi engellemenin basit bir yolu var mı? WP Süper Önbellek kullanıyorum. Sağlanan seçeneği kullanarak önbelleğini silebilir, tarayıcım için önbelleği silebilir ve yine de css veya widget'larda bazı değişiklikler yenilenmeyebilir. Tarayıcı veya bilgisayar arasında geçiş yapmak gibi diğer işleri deniyorum, ancak daha önce önbelleğe alınmış formatta değil de yaptığım değişiklikleri görüntülediğimden emin olabileceğim daha akışlı bir iş akışı olmalı? Bunun için en iyi çözüm nedir?


Sadece CSS için bunu yapmak için birkaç eklentileri de var gibi gözüküyor . Gerçekten gerekli mi? Bu eklentiler tarayıcı önbelleğini temizlemenin yapmadığı bir şey yapıyor mu?
cboettig

Benim durumumda ortaya çıktı, DNS sağlayıcısı (cloudflare) tarafından oluşturulan önbelleği temizlemek zorunda kaldım. Yine de aşağıdaki önerileriniz için teşekkürler.
cboettig,

Chrome tarayıcısını kullanıyorum; Geliştirme sırasında tarayıcı düzeyinde önbellek sorunları ile karşılaştığımda, gizli penceresi kullanışlıdır.
Joseph Kulandai

Bu eklentinin size yardımcı olacağını
umuyorum

Yanıtlar:


32

filemtime()Stil sayfanızı sürüm parametresi olarak ekleyin . Varsayılan stil olduğunu söylemek Lets css/default.cssve css/default.min.css( değilstyle.css ). Bir stil sayfasını kaydettiğinizde wp_loaded( değilinit ), bir sürümü dördüncü parametre olarak iletebiliriz. Bu en son değiştirilen zaman olacak ve bu nedenle dosyayı her değiştirdiğimizde değişecek.

$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 ve Grunt kullanıyorsanız, Browsersync'i şiddetle tavsiye ederim . Dosyalarınızı izleyecek ve değiştiğinde anında güncelleyecektir. Ayrıca kaydırma pozisyonunu senkronize edebilir, birden fazla açık tarayıcıda sunumlar ve daha fazlasını yapabilir. Çok havalı.


Çok teşekkürler. Görünüşe göre bu aynı zamanda yukarıdaki eklentinin yaklaşımı. Benim durumumdaki problemi çözmedi çünkü DNS sağlayıcım (CloudFlare) css dosyasını önbelleğe alıyordu, bu yüzden oradaki önbelleği temizlemek zorunda kaldım - sanırım bunun basit bir yolu yok. Genel olarak, bunun bence bu sorunun en iyi cevabı olduğunu düşünüyorum. Tekrar teşekkürler.
cboettig,

Geliştirme sırasında neden yerel stil sayfanızı kullanmıyorsunuz?
fuxia

Bazı bulut önbellekleme hizmetleri dosyanızı 8 + saat boyunca önbelleğe alır; bu nedenle, sürümlendirme için daha iyi bir hizmet uygulamalarını istemeniz (bazıları bunu yapar), hizmetleri değiştirir veya kullanmayı bırakmanız gerekir.
Wyck

@cboettig CloudFlare, 3 saatlik bir pencere için önbelleğe almayı durduracak bir geliştirme modu ayarına sahiptir. Daha sonra otomatik olarak 3 saat sonra önbelleğe almaya devam eder.
Gilbert,

7

Birçok kez basit bir çözüm aradıktan sonra işe yarayan bir şey bulmaya karar verdim!

bu yüzden ... bunu düşündükten sonra, yeni web siteleri geliştirirken önbelleğe almayı geçersiz kılmanın harika bir yolunu buldum ... (ve kolay).

İhtiyacımız olan şey wp'ye bunun bunun gibi yeni bir CSS versiyonu olduğunu söylemek.

Değişikliklerden önce:

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

Değişikliklerden sonra:

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

Bu eklediğimiz şey:

?v='.time()

Açıklama:
Temel olarak tarayıcıyı her güncellediğimizde yeni css'i yüklemeye zorlayan css dosyasına dinamik bir sürüm numarası ekliyoruz.

Aksi taktirde geliştirmeniz bittikten sonra kaldırmayı unutmayın, önbelleğe alma işleminiz bu dosya için işe yaramaz ve kullanıcıları tekrar tekrar göndermek için yüklenir.

Bu teknik, css ve js dosyaları için işe yarar - umarım bu yardımcı olur;)


Oldukça güzel, ama daha iyisi, sadece sürüm olan 4. parametresindeki time () işlevini kullanın. Hangisi size verecek:wp_enqueue_style( 'maincss', get_template_directory_uri() . '/css/style.css', array(), time(), 'all' );
Dave

Dördüncü parametre olarak zamanın kullanılması, kromu bu sürüme tutmaya zorlayabilir. Bu, özellikle canlı bir sitede çalışırken her şeyi önbelleğe almak için geçerlidir. Bu şekilde, bu "eski" sürümü bir süre daha (başka kaynaklar için ayarlandığı gibi) tutmaya çalışmak yerine, kullanacağı kroma "yeni bir dosya" gönderirsiniz.
Sagive SEO 13:18

Hayır, kromla iyi çalışıyor, dün kullanıyordum.
Dave,

bu, htaccess'inizde veya bir eklenti aracılığıyla önbellek / süre dolma zamanını artırmadığınız anlamına gelir. Ama, sizin için ne olursa olsun çalışır;)
Sagive SEO

6

Bu aşırı derecede basit görünebilir, ancak sitenizin geliştirme bölümünü tamamlayana kadar önbelleğe almayı devre dışı bırakmaya ne dersiniz? Açmak ve kapatmak çok basit.


2
+1 - Firefox için "Web Developer" araç çubuğunu kullanıyorum, önbelleği (diğer şeylerin yanı sıra) çok hızlı bir şekilde devre dışı bırakmanıza izin veriyor
Shane

Teşekkürler - yalnızca tarayıcının önbelleğini devre dışı bırakmak gerekli midir? WP superCache önbelleğe alınmış içerik sağlamaya devam edecek mi? DNS hizmetim bile önbelleğe çıkıyor, bu nedenle her önbelleği (WP, tarayıcı, DNS vb.) Ayrı ayrı devre dışı bırakmam gerekip gerekmediğinden emin değilim.
cboettig

Sorta, onunla oynamak zorunda kalacaksınız ve yapılandırmanız için ne yapmanız gerektiğini çözmeniz gerekecek.
mor7ifer

Onun yanındayım, sadece devre dışı bırak, yaptığım şey bu.
matt

4

Bu sorunun kabul edilmiş bir cevabı olduğunu biliyorum, ancak bu sorunun eldeki sorun için hala çok karmaşık olduğunu düşünüyorum ve aslında kullanıcıya bağlı olarak yanlış olabilir (suçsuz olsa da), bu yüzden hala paylaşacağımı düşündüm. benim dev yaptığım zaman önbellekleme atlamak nasıl (sadece Wordpress ile değil).

Çoğu modern tarayıcıda gizli mod adı verilen bir şey bulunur . Bu modda, bilgisayarınızdaki hiçbir şey önbelleğe alınmaz, bu nedenle her yenileme sunucudan yeni bir sayfa indirilir. Internet Explorer’da tuşuna basın Ctrl + Shift + P. Firefox ve Chrome'da tuşuna basın Ctrl + Shift + N.

Tarayıcınızda gizli mod yoksa, normal Ctrl + F5olarak IE'ye basarak veya Ctrl + Shift + RFirefox ve Chrome'da zor bir yeniden yüklemeyi zorlayabilirsiniz .

CSS dosyaları ile ilgili sorunuza gelince (ve esasen, resimler ve Javascript dosyaları gibi tüm varlık dosyalarınız), WP Süper Önbelleği tarafından hiçbir şekilde önbelleklenmedi. Ayarlarınız ve / veya bu eklentinin kullanımı gelmez bu dosyaların yayınlanma şeklini etkiler. Bu dosyaları önbelleğe alan tarayıcınızdır ve bu nedenle yeniden yüklemenizi zorlamanızın nedeni budur.

Eklenti, Wordpress'in HTML dosyalarınızı (PHP yoluyla) nasıl oluşturduğunu değerlendirir ve bir kopyasını saklar, böylece bir dahaki sefere birileri aynı yazı, sayfa veya her neyse, kopyaya hizmet eder ve istemez PHP tarafından oluşturulan HTML'yi yeniden değerlendirin ve bu nedenle sayfalarınızı bu kadar hızlı yükleyerek hesaplama süresinden tasarruf edin. (Umarım bu açıktır.)

Sorun şu ki bir PHP fonksiyonu aracılığıyla CSS dosyaları URL'yi bir zaman damgası üzerinde eğer ediyoruz tokat olduğunu olduğunu HTML PHP değerlendirme ve bu edecektir WP Super Cache tarafından önbelleğe alınması. Aynı gönderiye yapılan her istek, aynı zaman damgasına sahip olacak, çünkü kullanıcılara orijinal zaman damgası değerlendirmesinin bir kopyası sunuluyor. (Yanlışsam düzelt.)

Bypass WP Süper Önbellek en önbelleğe alma için doğru yol seçeneğini ayarlamaktır Don't cache for known usersiçin trueeklentinin ayar sayfasında.

Son olarak (ve kodlama konusunda gerçek bir yapıştırıcı olduğum için bu kişisel bir tercihtir), gizli veya zorlu yeniden yükleme işlemlerine başvurmak, HTML sayfalarınızda gereksiz işaretleme eklemenizi gerektirmez. Tabii ki, bir zaman damgası eklemek, istek başına statik dosya başına sadece 13 bayt ekler, ancak hey, dediğim gibi, bu tür şeyler için bir yapıştırıcı olduğumu. Hala 13 byte gereksiz.


Yararlı ipuçları için teşekkürler. Maalesef buradaki cevapların hiçbiri doğru değil çünkü benim çözümüm Etki Alanı Ağ Hizmeti sağlayıcısının önbelleğini temizlemeyi gerektirdi, çünkü bulut parlama, ancak çoğu hala iyi bilgilerdi.
cboettig

2

Tanrım, buna cevap vermenin birçok yolu var! Öncelikle ve en önemlisi, iki farklı şey sordunuz: WP Süper Önbellek ve CSS dosyaları. Bunlar farklı yerlerde, farklı yerlerde önbelleğe alınır, bu nedenle sorununuzun nerede olduğunu bilmek önemlidir.

WP Süper Önbellek ise, DONOTCACHEPAGEWP Süper Önbellek'in herhangi bir şeyi önbelleğe almasını önlemek için geliştirme sırasında functions.php dosyasındaki sabiti tanımlayabilirsiniz . Yine de lansman sırasında bunu kaldırmayı unutmayın!

define('DONOTCACHEPAGE', true);

Her sitenin, "Gelişmiş" sekmesinde bulabileceğiniz sayfanın yeni bir sürümünü yüklemek üzere URL’ye eklemek için benzersiz bir anahtarı da var.

Daha da iyi bir çözüme indirgemek için, geliştirme ortamınızın WP Süper Önbelleği'nin etkin olmadığı bir üretim ortamı ve üretim ortamı oluşturmayı düşünmelisiniz (yine de bunun sizin probleminiz olduğunu farzedersiniz).

Sorununuz CSS / JS dosyalarıyla ilgiliyse, cevabını toscho ve ardından gelen m0r7if3r tarafından yazılan cevaba bakınız.


1

HyperCache, yönetici olarak oturum açtığınızda önbelleğe almayı devre dışı bırakır. WP Süper Önbellek aynı işlevselliğe sahip olup olmadığından emin değil.


Bunun için bir seçenek var, evet.
Matthew Boynes

1

Chrome kullanıyorsanız (ki önerdiğim), Inspector'ı açın, sağ alt köşedeki ayarlar simgesine tıklayın ve "Ağ" altında "Önbelleği Devre Dışı Bırak" seçeneğini seçin.


0

Wp süper önbellek için söylendiği gibi genel WP önbelleğe almak için Şunlara wp-config.php değiştirin:

define( 'WP_CACHE', false );

Referans: codex.wordpress.org


-1

Bu pasajı https://gist.github.com/jhayiwg/92bae4330aeb738a98022d7ab63ce9b1 kullanabilirsiniz

Sayfayı her yüklediğinizde aktif tema css ve js'nizin yeni sürümünü üretecek


Lütfen, tüm ilgili kodlar dahil cevabı buraya yazınız. Harici siteleri sadece referans olarak kullanın. Gönderiniz, başka bir siteye gitmeye gerek kalmadan tam bir cevap sağlamalıdır; Eğer üçüncü parti sitesi kapanırsa, cevabınız
faydasız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.