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

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

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

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

一般情況

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

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

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

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

3、服務器及緩存頭設置,不使用緩存,如

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標簽添加緩存設置

<!-- 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)瀏覽器

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

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

理論上來說,這樣應該是可以的,但發(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;
}

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

方案二(有效)

再換一種方案,更改服務器配置,強制不緩存入口文件,其他靜態(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、難道也是加速頁面加載?并不見得是這個原因,因為這可能帶來的問題大于帶來的優(yōu)化效果。
2、緩存入口頁面和保留上次瀏覽位置是否有關聯(lián)呢?感覺關聯(lián)度也不是那么大

補充:微信瀏覽器取消緩存的方法

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

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

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

二、避免css和js的緩存

以上工作完成之后,我們解決了html的緩存問題,但是通過訪問nginx(或是其他工具)的日志發(fā)現(xiàn),雖然帶上了不同的參數(shù),html確實不會緩存了,但是卻沒有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,但是有的人說沒有用。目測是因為meta只能保障js和css等資源不會被緩存,但是無法保障html不被緩存。所以,要和url參數(shù)方法于meta方法一起使用,才能保障毫無側漏!

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

相關文章

  • Javascrip實現(xiàn)文字跳動特效

    Javascrip實現(xiàn)文字跳動特效

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

    Javascript中常用類型的格式化方法小結

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

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

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

    如何學JavaScript?前輩的經(jīng)驗之談

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

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

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

    confirm確認對話框的實現(xiàn)方法總結

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

    微信小程序實現(xiàn)時間進度條功能

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

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

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

    BootStrap前端框架使用方法詳解

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

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

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

最新評論