欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談微信頁面入口文件被緩存解決方案

 更新時(shí)間:2018年09月29日 16:59:18   作者:木子墨  
緩存對(duì)于前端頁面來說,是加速頁面加載的利器之一,但也同時(shí)帶來了很多問題,這篇文章主要介紹了淺談微信頁面入口文件被緩存解決方案,感興趣的小伙伴們可以參考一下

緩存對(duì)于前端頁面來說,是加速頁面加載的利器之一,但也同時(shí)帶來了很多問題,比如新版本發(fā)布之后,怎么替換客戶端上的緩存文件呢?大家一般的的解決方案主要有以下幾種形式,

一般情況

1、添加版本號(hào),在靜態(tài)資源文件的引用鏈接后面添加版本號(hào),這樣每次發(fā)布的時(shí)候更新版本號(hào),就能讓叫客戶端加載新的資源文件,避免再次使用緩存的老文件,如

<script src="http://m.test.com/build/activity/js/commons.js?v=20170608"></script>

2、文件名使用hash形式,webpack中打包文件可直接生成,這樣每次打包發(fā)布的時(shí)候都會(huì)產(chǎn)生新的hash值,區(qū)別于原有的緩存文件

<script src="http://m.test.com/build/activity/js/activity/201807/schoolbeauty/main.19315e5.js"></script>

3、服務(wù)器及緩存頭設(shè)置,不使用緩存,如

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js)$ {
  root  /mnt/dat1/test/tes-app;
  #### kill cache
  add_header Last-Modified $date_gmt;
  add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
  if_modified_since off;
  expires off;
  etag off;
}  

4、在html的meta標(biāo)簽添加緩存設(shè)置

<!-- cache control: no cache -->
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

微(keng)信(die)瀏覽器

微信瀏覽器下比較特殊,這個(gè)bug一樣的存在居然把入口文件html給緩存下來了,這就意味著通過版本號(hào)和hash號(hào)的形式避免緩存的方案失效了。同時(shí)html的meta設(shè)置依舊沒能生效。

方案一(部分框架無效)
最開始碰到這個(gè)問題,我在想是不是可以給入口文件的html加一個(gè)版本號(hào),比如https://m.test.com/views/index?v=1538208193491

理論上來說,這樣應(yīng)該是可以的,但發(fā)現(xiàn)沒有用。分析原因可能是vue+nginx的形式下,所有的路由都被try_files解析到index.html

location / {
  root  /mnt/dat1/test/tes-app;
  index index.html index.htm;
  try_files $uri $uri/ /index.html;
}

這個(gè)解析的過程中版本號(hào)已經(jīng)失效了,因此沒能達(dá)到替換緩存的目的。至于其他的框架下,比如ftl、jsp那種模版編譯的有可能生效,不過需要大家自己去驗(yàn)證了。

方案二(有效)

再換一種方案,更改服務(wù)器配置,強(qiáng)制不緩存入口文件,其他靜態(tài)正常緩存,比如在nginx中對(duì)靜態(tài)部分如下

location / {
  root  /mnt/dat1/test/tes-app;
  index index.html index.htm;
  try_files $uri $uri/ /index.html;
  #### kill cache
  add_header Last-Modified $date_gmt;
  add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
  if_modified_since off;
  expires off;
  etag off;
}

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js)$ {
  root  /mnt/dat1/test/tes-app;
  access_log off;
  expires 30d;
} 

最終經(jīng)過測(cè)試,這種方式可以解決微信下入口文件被緩存的問題,問題解決~~

題外話

說到這里,微信瀏覽器為什么要緩存html文件呢?
1、難道也是加速頁面加載?并不見得是這個(gè)原因,因?yàn)檫@可能帶來的問題大于帶來的優(yōu)化效果。
2、緩存入口頁面和保留上次瀏覽位置是否有關(guān)聯(lián)呢?感覺關(guān)聯(lián)度也不是那么大

補(bǔ)充:微信瀏覽器取消緩存的方法

一、通過url參數(shù)避免html文件緩存

請(qǐng)求同一個(gè)頁面的時(shí)候,如果url后面的參數(shù)不一樣,則不會(huì)調(diào)用微信緩存中的html頁面,由此可以解決html頁面的緩存問題。例如加個(gè)版本號(hào)或時(shí)間戳

www.xxx.com/home.html?v=1.0

二、避免css和js的緩存

以上工作完成之后,我們解決了html的緩存問題,但是通過訪問nginx(或是其他工具)的日志發(fā)現(xiàn),雖然帶上了不同的參數(shù),html確實(shí)不會(huì)緩存了,但是卻沒有js和css文件的請(qǐng)求。

猜測(cè)在這里,微信發(fā)現(xiàn)我們所請(qǐng)求的js和css文件在他的緩存里面有了,所以就直接打開緩存中的文件返回給了頁面上。(所以這就坑爹了?。。。?/p>

所以我們要在html文件的頭部(head)處加上一些meta:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />

<meta http-equiv="Pragma" content="no-cache" />

<meta http-equiv="Expires" content="0" />

ps,網(wǎng)上很多答案都提供了添加在head處的meta,但是有的人說沒有用。目測(cè)是因?yàn)閙eta只能保障js和css等資源不會(huì)被緩存,但是無法保障html不被緩存。所以,要和url參數(shù)方法于meta方法一起使用,才能保障毫無側(cè)漏!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Javascrip實(shí)現(xiàn)文字跳動(dòng)特效

    Javascrip實(shí)現(xiàn)文字跳動(dòng)特效

    這篇文章主要介紹了Javascrip實(shí)現(xiàn)文字跳動(dòng)特效的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Javascript中常用類型的格式化方法小結(jié)

    Javascript中常用類型的格式化方法小結(jié)

    這篇文章主要給大家介紹了Javascript中常用類型的格式化方法,其中包括格式化浮點(diǎn)數(shù)、格式化有符號(hào)整數(shù)(int32)、格式化無符號(hào)整數(shù)(uint32)、格式化布爾值以及格式化字符串等,文中給出了詳細(xì)的示例代碼,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • JavaScript數(shù)組去重的3種方法和代碼實(shí)例

    JavaScript數(shù)組去重的3種方法和代碼實(shí)例

    這篇文章主要介紹了JavaScript數(shù)組去重的3種方法和代碼實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-07-07
  • 如何學(xué)JavaScript?前輩的經(jīng)驗(yàn)之談

    如何學(xué)JavaScript?前輩的經(jīng)驗(yàn)之談

    這篇文章主要介紹了如何學(xué)JavaScript?前輩的經(jīng)驗(yàn)之談,也就是怎么學(xué)前端的問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JS中的async與await異步編程及await使用陷阱

    JS中的async與await異步編程及await使用陷阱

    這篇文章主要介紹了async與await異步編程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • confirm確認(rèn)對(duì)話框的實(shí)現(xiàn)方法總結(jié)

    confirm確認(rèn)對(duì)話框的實(shí)現(xiàn)方法總結(jié)

    下面小編就為大家?guī)硪黄猚onfirm確認(rèn)對(duì)話框的實(shí)現(xiàn)方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • 微信小程序?qū)崿F(xiàn)時(shí)間進(jìn)度條功能

    微信小程序?qū)崿F(xiàn)時(shí)間進(jìn)度條功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)時(shí)間進(jìn)度條功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • javascript中undefined與null的區(qū)別

    javascript中undefined與null的區(qū)別

    在JavaScript中存在這樣兩種原始類型:Null與Undefined。這兩種類型常常會(huì)使JavaScript的開發(fā)人員產(chǎn)生疑惑,在什么時(shí)候是Null,什么時(shí)候又是Undefined?
    2015-08-08
  • BootStrap前端框架使用方法詳解

    BootStrap前端框架使用方法詳解

    這篇文章主要介紹了BootStrap前端框架使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理詳解

    JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理詳解

    這篇文章主要介紹了JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理的知識(shí),文章內(nèi)容非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論