Önbellek devre dışı olsa bile sunucu neden kod dosyalarındaki değişiklikleri yok sayıyor?


14

Localhost'umda bir html / js kodu test ediyorum (Windows 7, Chrome v79.0.3945.130 (64 bit)) ve zaman kodu değişikliklerinin yaklaşık% 50'si tarayıcıya yansıtılmadı (Dev Araçlar / Kaynaklar ile görüyorum) ).
İnternette bir ton tavsiye var, ancak ikisi de işe yaramıyor gibi görünüyor:

  • Yeniden yükle'ye sağ tıklayın ve "Boş önbellek ve Sabit yeniden yükleme" yi seçin - vakaların% 30'unda yardımcı olmaz.
  • Chrome Geliştirici Araçları'nın Ağ sekmesinde önbelleği devre dışı bırak - yardımcı olmaz.
  • <meta http-equiv="Cache-control" content="no-cache">Başlığa ekleyin - yardımcı olmaz.
  • Değiştir <script src="common.js"></script>tarafından <script src="common.js?blabla"></script>- vakaların% 60 yardımcı olur, ama her değişiklik büyük bir angarya sonra bunu yapmak gerekir. Ayrıca, html değişiklikleriyle çalışmaz.
  • Bir dosyayı yeni bir dosyaya kopyalayın (index.html'den index2.html'ye) ve koddaki dosya adını değiştirin - her zaman çalışır, ancak daha da büyük bir iştir.

Kod aynı github.io taahhüt ettiğimde mevcut aynı sorun

Sitenin kod değişikliklerini hemen yansıtması için lütfen bana yardımcı olun.


Düzenleme: Bir dosya index3.html oluşturdum ve orada sadece "merhaba dünya" koymak. Dosyayı tarayıcıda açtı. "Merhaba world2" olarak değiştirildi - tarayıcı içeriği güncelledi. "Merhaba world3" olarak değiştirildi - tarayıcı birden fazla yeniden yükleme ve "Boş önbellek ve sabit yeniden yükleme" işlemlerinden sonra bile "merhaba world2" yi gösteriyor. "Merhaba world4" olarak değiştirdim - tarayıcı hala "merhaba world2" gösterdi. 4 saat içinde "merhaba world5" olarak değiştirdim - tarayıcı hala "merhaba world2" gösteriyor. Bu dosyayı temel not defteri ile düzenledim.


Edit2: İnsanlar hangi sunucuyu kullandığımı soruyorlar. Bu sorunun bir parçası gibi görünüyor. Ne yazık ki, bilmiyorum ve ne kontrol etmek için tam olarak ne yapmam gerektiğini de bilmiyorum. Şimdiye kadar öğrendiğim şu:

  • Ben inetpub/wwwroothtml & js dosyaları koymak ve sonra bir tarayıcıda index.html açmak dizin var http://localhost/.
  • Devs Tools içindeki Network panelim şöyle: image link .
  • Sunucu kurulumu çok hızlıydı ve yüklenmesi için herhangi bir ek yazılıma gerek duyulmadı. Yani node.js kullanmıyorum.
  • İisstart.htm var inetpub/wwwrootve açtığımda http://localhost/iisstart.htmIIS7 diyor.

Bazen Chrome dev araçlarında önbelleği devre dışı bırakma + yenileme + önbelleği tekrar etkinleştirme + yenileme bazen sorunu çözüyor? Denemeye değer olabilir ...
Nick Parsons

2
ne tür bir sunucu kullanıyorsunuz?
Jhecht

@Jhecht nasıl kontrol ederim?
klm123

1
Cevaplarda gördüğümden muhtemelen bir parametre ile çalışacaksınız. Ve bu muhtemelen işe yarayacak. Ancak, normalde chrome dev araçlarında önbelleği devre dışı bıraktığınızda bu gerekli olmamalıdır. Öyleyse benim önsezim başka bir önbellek olmalı. Siz ve sunucu arasında istediğiniz sayıda ek önbellekleme teknolojisi olabilir. Birkaç örnek: Sunucu tarafı önbellekleme (örn. Vernik), CDN önbellekleme (örn. Cloudflare), yönlendirici / güvenlik duvarlarından yerel proxy'ler (örn. Kalamar-önbellek) ve benzeri şeyler. Bunları da kontrol ederdim.
Jey DWork

1
@ klm123 bunun hangi web sunucusuyla ilgili olduğunu bilmeden, bunun için önbellek yapılandırmasını nasıl değiştireceğinizi veya kontrol edeceğinizi söylemek mümkün değildir. Web sunucunuz hakkında bir fikriniz yoksa, kontrol etmenin olası bir yolu devTools'un ağ sekmesindedir: Yüklenen yanıt başlıklarında , web sunucusunda ipucu verebilecek a veya başlık index.htmlgibi bir şey olup olmadığını kontrol edin . Dosya yolunuz için googling yapmak bir IIS sunucusunu işaret eder. X-Powered-ByServerinetpub/wwwroot
acran

Yanıtlar:


6

Parametre kullanmak doğru yoldur! Burada yalnızca büyük değişikliklerde değiştirdiğiniz bir sürüm numarasını manuel olarak ekleyebilirsiniz ve hata ayıklama için Date.time () olarak ayarlayabilirsiniz; bir:

< script type="text/javascript"> 
    var script = document.createElement('script'); 
    var version = Date.time();
    script.src = "common.js?v="+version; 
    document.head.appendChild(script) 
< /script>

Bu yardımcı olur umarım!


Sanırım yapabilirim. Ama dördüncü seçeneğimle aynı değil mi? dosya adından sonra "? blabla" eklemek için. Oldukça sık çalışmıyor - Kaynaklar sekmesinde aynı dosya adı veya blabla eklendi, ancak dosyanın içeriği hala aynı.
klm123

Aynı şey değil. Bir parametre iki kez kullanıldığında (bu, Date.time (ile asla olmayacaktır) önbelleğe alınmış bir sürüm oluşturabilir.? Blabla, iki kez kullanıldıktan sonra aynıdır.
lehm.ro

parametresi iki kez kullanılmaz. Kodu düzenlerim, sonra parametreyi değiştiririm, sonra tarayıcıdaki kaynak kodunu kontrol ederim ve eskisi.
klm123

Yaklaşımımı denedin mi?
lehm.ro

Yaklaşımınız yardımcı oluyor, teşekkürler. Ama sorunumu çözmedi. Yazdıklarım benim durumumda doğru değil. "parametre her zaman yeni bir sürüm olduğu için önbelleğe alınan tüm sürümlerin üzerine yazmaya zorlar", parametreyi yenisiyle değiştirmek önbelleğimi güvenilir bir şekilde yeniden yüklemeye zorlamaz. Ayrıca index.html dosyasındaki değişikliklere yardımcı olamaz.
klm123

3

Windows 7 üzerinde çalışan IIS7 Windows sunucusunda, içeriğinizin önbelleğe alınmasını önlemek için, adı verilen yapılandırma dosyalarınızdan birinde bazı değişiklikler yapmanız gerekir web.config. Daha sonra IIS 7 ve konfigürasyon dosyalarının bulunmaktadır %WinDir%\System32\Inetsrv\Config foldernerede %WinDir%Windows (genellikle yüklü klasördür C:/Windows).

web.configDosyanızı düzenlemeden önce yedek bir kopyasını oluşturun, böylece dosyada yapacağınız değişiklikler onu bozarsa dosyaya geri dönebilirsiniz.

Senin içinde web.configdosyanın sadece aramalarınızdan önbelleğe önlemek için aşağıdakileri ekleyin index.html:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <location path="index.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

</configuration>

Dosyanın dosya yolunu web.configburadan bulabilirsiniz: Windows Doc: Yapılandırma Başvurusu

Yukarıdaki önbellek yapılandırmasını buradan edinebilirsiniz: IIS aracılığıyla sunulan tek sayfalık uygulama HTML dosyasının önbelleğe alınmasını nasıl devre dışı bırakabilirim?


Belirtilen yolda web.config yoktur. Ben oluşturdum ve kodunuzu oraya koydum. Ancak index.html'yi projectName/index.htmltarayıcımdaki url'den kopyaladığım gibi tam yolla değiştirmek zorunda kaldım http:/localhost/projectName/index.html. Sonuç - önbellek sorunu üzerinde hiçbir etkisi yoktur.
klm123

@ kim123 web.configDosyayı sitenizin kök klasörüne (sitenizin bulunduğu klasör) eklemeyi ve yolu tam olarak değiştirmeyi deneyip index.htmlçalışıp çalışmadığını görebilirsiniz.
AndrewL64

yaptım. yardımcı olmuyor.
klm123

1

Aynı sorun vardı ve bu benim kontrol listem:

  1. Kontrol web.config (önbelleğe alma ve clientcache, çekirdek önbellek politikası vs) veya .htaccess (Üstbilgi Cache-Control ayarlanır).
  2. ASP, PHP gibi dinamik diller kullandıysanız, dahili önbellek ayarı olabilir. Bir durumda <%Response.Expires=1440%>ASP kodu birçok satırda buldum ve diğer tüm ayarları aşmak oldu! Php session_cache_expirede aynı şeyi yapabilir.
  3. IIS kullanıyorsanız , sunucu adı altında listelenen web siteleri için de aynı önbellekleme konusunda hiçbir şey olmadığından emin olmak için sunucu > HTTP Yanıt üstbilgilerini kontrol edin .
  4. http-equiv="Cache-control"html başlıklarını kontrol edin (bu testi geçtiniz!).

Sonunda yukarıda tüm durumlarda, kontrol edilmesi söylemek zorunda devre dışı bırak önbellek içinde newtwork ancak bu iyidir hep benim için çalıştı Krom konsolunda sekmesi yalnızca amaçları ve bunu alışkanlık ziyaretçileri ayıklama için sayfaların yeni bir sürümünü görüntülemek için!


1. web.config ve .htaccess'i nerede bulabilirim? 2. Yalnızca html ve js kullanıyorum. 3. HTTP Yanıt başlıkları şuna benzer: imgur.com/leYpdej
klm123

IIS kullanıyorsanız, web.congfig kökünde wwwroot bulunur. Ayrıca sunucu düzeyinde, buradan doğrudan IIS konsolundan değiştirebileceğiniz Machine.config dosyası vardır: stackoverflow.com/questions/2325473/where-is-machine-config . Windows'ta apache sunucusu kullanıyorsanız, lütfen .htaccess @ klm123
Ali Sheikhpour

0

Google Chrome kullanımıyla ilgili özel bir durumda, şunu deneyin: Geliştirici Araçlarını açın -> 'Ağ' sekmesine gidin. Sayfayı yeniledikten sonra 'Önbelleği devre dışı bırak' onay kutusunu işaretleyin.

NOT: Bunun, Dev Araçları penceresi her zaman açık kalması GEREKİR.

resim açıklamasını buraya girin

Ancak, kullanıcılarınıza değişiklikleri yaymak için, sayfayı zor bir şekilde yenilemelerine vb. Gerek kalmadan, sık sık değişen dosyalar için (tıpkı belirttiğiniz gibi) başvurulan her dosyanın sonuna dosya sürümlerini eklemeniz gerekir. Örneğin:

<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=20b379f72a37" >

v=20b379f72a37Sonuna eklenen bir dosyanın içeriğinin otomatik olarak oluşturulmuş bir dosya bozulmasıdır.


Listemdeki öğe 2 bu.
klm123

Geliştirici Araçları penceresinin açık olduğundan emin misiniz?
Martin Shishkov

geliştirici araçları penceresi açık, onay kutusu işaretli [ancak genellikle kaynaklar sekmesine bakıyorum] ve hatta zor yenileme yapıyorum.
klm123

0

Bu uzun bir çekim - ama ne tür bir editör / IDE kullanıyorsunuz? Ayrıca, index.html dosyasında ne tür düzenlemeler yapıyorsunuz?

Dosyayı kaydedip yüklemeye çalıştığınızda yansıtılmayan bu tür düzenlemelere bazı örnekler verebilir misiniz?

Sorununuzu yeniden oluşturmayı denemek istiyorum. İnsanların önerdiklerinden, sorunun kodun içinde olduğu görülmemektedir. Bunun çevresel bir sorun olduğundan şüpheleniyorum, ancak şüphelerimi doğrulamak için sizden daha fazla bilgiye ihtiyacım var.


Microsoft Visual Studio kodunu kullanıyorum. Örnek: <script src = "common.js"> </script> yerine <script src = "common.js? Blabla"> yazın. Örnek2: yeni bir düğme ekleyin, yeni bir div ekleyin, onload işlevi çağrısı ekleyin. Tbh her türlü düzenlemeye benziyor.
klm123

Soru yazımın sonundaki düzenlemelere bakın.
klm123

0

HTML meta'ya yazdıklarınız, tarayıcılara bir öneri değil, kesin bir talimattır. Tarayıcıda katı önbellekleme etkinse, bu yardımcı olmaz.

Çözümler iyi tanımlanmıştır: https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/

Ben sunucu tarafında komut dosyası eklemek için dosyanın son güncelleme tarihi ile sürüm tercih ederim.

<script src="/myScript.js?v=1579780745150"></script>

Nerede 1579780745150 Unix zaman damgası günceller olan MyScript.js dosyasının kendisinin. Yalnızca kendi dosyalarıyla çalışır, ancak harici olanlara gerek yoktur. Çoğu zaman dosya adında sürümdür.


Arka uç koduna ihtiyacınız varsa. Hangi platformu kullandığını söyle.
Aleksandr Smityukh

0

Bu muhtemelen gerçekten sinir bozucu ve yanlış bir şey yapıyormuşsunuz gibi gelmiyor.

Sorun büyük olasılıkla tarayıcınız ve aradığınız komut dosyası arasında bazı önbellekleme yaparak bir şey olabilir.

Ne olduğunu belirlemek için localhost URL'sine nasıl göz attığınızı sorayım.

Örnekler:

file://path/to/file.html
http://localhost/file.html
http://127.0.0.1/file.html
http://[machine's-hostname]/file.html
http://[custom-domain-defined-in-hosts-file]/file.html

Eğer çalışıyorsa file://path/to/file.htmlbu araçlar bir web sunucu / proxy üzerinden gezen değildir. Eğer öyleyse http://[something]/file.htmlo zaman bir tür web sunucusu çalıştırıyorsunuz ve muhtemelen suçludur. Önbelleği kapatabileceğiniz bir tür ayar arayın.

Bir web sunucusu kullanmıyorsanız ve tam anlamıyla bir web sunucusu olmadan doğrudan yerel bir html dosyasına göz atıyorsanız, tarayıcının suçlu olduğunu öneririm. Bu durumda, Martin Shishkov'un önerdiği gibi tarayıcı önbelleğini kapatmanızı öneririm .


öyle http://localhost/ProjectName/index.htmlsen önbelleğe alma kapatabilirsiniz bu ayar olabilir Nerede?
klm123

Başka bir yerde yayınladığınız ekran görüntüsüne benziyor, IIS kullanıyorsunuz (Microsoft'un Internet Information Services olarak da bilinir). Hızlı bir çözüm, tarayıcıya yüklemek için .html dosyanızı çift tıklamaktır file://path/to/projectName/index.html. Bu, web sunucusunu denklemden kaldıracaktır. IIS'yi kullanmaya devam etmek ve yalnızca önbelleği düzeltmek için bu makaleye bakın: support.microsoft.com/tr-tr/help/247404/…
Dean Householder

0

Chrome, dosya çok fazla değişmediyse, ne anlama geldiğinden emin değilse, “derlenmiş” önbellek sürümünü kullanacağı bu şeyi yapar. Html için ayrıştırılmış don ağacı anlamına gelir. JS için önceden derlenmiş kod vb.

Bunu ele almanın genellikle yolları vardır, birçok çerçeve dosya adlarında karma kullanır: main.md5hash.jsçünkü dosya adını değiştirmek herhangi bir önbelleği geçersiz kılar.

O zaman muhtemelen html güncellenmez kalacak. Ve net olmak gerekirse, emin değilim, her zaman rastgele damla ile yorum ekleyebilirsiniz ... bir tarih gibi.


0

Yanıtınızın güncellemelerine dayanarak, sorununuzun IIS v7'den kaynaklandığını söyleyebilirim, yerel sabit sürücünüzü önbelleğe almak için PC Belleğinizi kullanıyor olmasının nedeni budur Hard reloadve diğer tüm yöntemler düzgün çalışmıyor gibi görünüyor.

3 çözüm düşünebilirim:

1. IIS önbellek sorununuzu çözme: (IIS'li bir bilgisayarım olmadığı için test edilmedi)

  1. Gönderen Başlat menüsünden tıklayın Yönetimsel Araçlar ve ardından Internet Information Services (IIS) Yöneticisi. (bkz Görüntüleri )
  2. Gelen ağaç görünümü sol tarafında , başvurunuzu bulabilirsiniz.
  3. Seç Çıkış Önbelleği menü öğesini.
  4. Önbellek Kuralı Ekle'yi tıklayın, ardından extensionönbelleği devre dışı bırakmak istediğiniz dosyaları yazın. Yani .aspx.css, .js vb ...
  5. Artık, kullanıcı modu önbelleğe almayı kaldırabilir veya Tüm önbelleğe almayı engelle'yi seçebilirsiniz . Buna benzer görünmelidir:

resim açıklamasını buraya girin

Çözüm Kaynağı - IIS 7 Önbellek hakkında daha fazla bilgi edinin


2. IIS için bazı alternatifler kullanma Oldukça az ama tavsiye ederim (deneyimlerime dayanarak) WAMP veya XAMPP Her ikisi de size daha iyi bir geliştirme "ortamı" verecek ve her ikisi de Windows 7'yi destekleyecektir. Ayrıca, VS Kodu sadece Live Server uzantısını kullanabilirsiniz .


3. Geliştirirken Chrome Gizli modunu kullanın . (IIS7 için çalışıp çalışmadığından emin değilim)


Önbellek Kuralı Ekle / Tüm önbelleği engelle - yardımcı olmaz [html ile denendi]. Gizli mod - yardımcı olmaz.
klm123

.jsDosyalarla denediniz mi? hangi değişiklikleri yaptığınıza bağlıdır.
awran5
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.