最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

緩存對于前端頁面來說,是加速頁面加載的利器之一,但也同時(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中對靜態(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)過測試,這種方式可以解決微信下入口文件被緩存的問題,問題解決~~

題外話

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

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

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

請求同一個(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文件的請求。

猜測在這里,微信發(fā)現(xiàn)我們所請求的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,但是有的人說沒有用。目測是因?yàn)閙eta只能保障js和css等資源不會(huì)被緩存,但是無法保障html不被緩存。所以,要和url參數(shù)方法于meta方法一起使用,才能保障毫無側(cè)漏!

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

相關(guān)文章

  • JavaScript注冊監(jiān)聽事件和清除監(jiān)聽事件方式詳解

    JavaScript注冊監(jiān)聽事件和清除監(jiān)聽事件方式詳解

    js中事件監(jiān)聽就是利用addEventListener來綁定一個(gè)事件,這個(gè)用法在jquery中非常常用并且簡單,但在原生js中比較復(fù)雜,下面這篇文章主要給大家介紹了關(guān)于JavaScript注冊監(jiān)聽事件和清除監(jiān)聽事件方式的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • JavaScript函數(shù)的4種調(diào)用方法詳解

    JavaScript函數(shù)的4種調(diào)用方法詳解

    了解函數(shù)的調(diào)用過程有助于深入學(xué)習(xí)與分析JavaScript代碼。本文是JavaScript高級(jí)這個(gè)系列中的第三篇文章,主要介紹JavaScript中函數(shù)的四種使用形式
    2014-04-04
  • 用JavaScript調(diào)用WebService的示例

    用JavaScript調(diào)用WebService的示例

    JavaScript用htc實(shí)現(xiàn)WebService的調(diào)用
    2008-04-04
  • JavaScript深拷貝與淺拷貝原理深入探究

    JavaScript深拷貝與淺拷貝原理深入探究

    深拷貝和淺拷貝是面試中經(jīng)常出現(xiàn)的,主要考察對基本類型和引用類型的理解深度,這篇文章主要給大家介紹了關(guān)于js深拷貝和淺拷貝的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • js列舉css中所有圖標(biāo)的實(shí)現(xiàn)代碼

    js列舉css中所有圖標(biāo)的實(shí)現(xiàn)代碼

    最近在做一個(gè)通用的配置模塊。配置模塊中必然要對系統(tǒng)的菜單、功能模塊、權(quán)限資源等進(jìn)行配置,為了更好的用戶體驗(yàn),圖標(biāo)是必不可少的!
    2011-07-07
  • JS解析url參數(shù)為json對象問題

    JS解析url參數(shù)為json對象問題

    這篇文章主要介紹了JS解析url參數(shù)為json對象問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • JS數(shù)組reduce()方法原理及使用技巧解析

    JS數(shù)組reduce()方法原理及使用技巧解析

    這篇文章主要介紹了JS數(shù)組reduce()方法原理及使用技巧解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • javascript比較兩個(gè)日期相差天數(shù)的方法

    javascript比較兩個(gè)日期相差天數(shù)的方法

    這篇文章主要介紹了javascript比較兩個(gè)日期相差天數(shù)的方法,涉及javascript針對日期的轉(zhuǎn)換與數(shù)學(xué)運(yùn)算相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • 微信小程序顯示下拉列表功能【附源碼下載】

    微信小程序顯示下拉列表功能【附源碼下載】

    這篇文章主要介紹了微信小程序顯示下拉列表功能,涉及微信小程序navigator組件導(dǎo)航及頁面加載相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下
    2017-12-12
  • Javascript的爺孫通信和組件自調(diào)用詳解

    Javascript的爺孫通信和組件自調(diào)用詳解

    這篇文章主要為大家詳細(xì)介紹了Javascript的爺孫通信和組件自調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評(píng)論

重庆市| 霍城县| 措美县| 余江县| 新野县| 荔浦县| 垫江县| 通河县| 华亭县| 遂川县| 恭城| 周至县| 喀喇沁旗| 深水埗区| 新竹县| 江阴市| 社会| 肇源县| 兖州市| 合作市| 修武县| 抚顺县| 巴林右旗| 隆回县| 商洛市| 秭归县| 离岛区| 积石山| 元阳县| 凤冈县| 汤阴县| 陇西县| 洪江市| 大余县| 忻州市| 类乌齐县| 农安县| 城固县| 宣恩县| 洞头县| 弥渡县|