禁止瀏覽器緩存標(biāo)簽
<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" />
有些瀏覽器標(biāo)簽會失敗
瀏覽器有緩存怎么去除緩存
前臺:不加data 加cache-control的請求頭,加隨機數(shù)
后臺:只有加cache-control 的頭
瀏覽器模塊化加載 支持的是谷歌瀏覽器及火狐瀏覽器的高版本
<script src="path/to/myModule.js" defer></script>
<script src="path/to/myModule.js" async></script>
上面代碼中毒涧,<script>標(biāo)簽打開defer或async屬性阅虫,腳本就會異步加載武契。渲染引擎遇到這一行命令,就會開始下載外部腳本,但不會等它下載和執(zhí)行阴绢,而是直接執(zhí)行后面的命令槐脏。
defer與async的區(qū)別是:前者要等到整個頁面正常渲染結(jié)束匀们,才會執(zhí)行;后者一旦下載完准给,渲染引擎就會中斷渲染泄朴,執(zhí)行這個腳本以后,再繼續(xù)渲染露氮。一句話祖灰,defer是“渲染完再執(zhí)行”,async是“下載完就執(zhí)行”畔规。另外局扶,如果有多個defer腳本,會按照它們在頁面出現(xiàn)的順序加載叁扫,而多個async腳本是不能保證加載順序的三妈。
瀏覽器加載 ES6 模塊,也使用<script>標(biāo)簽莫绣,但是要加入type="module"屬性畴蒲。
<script type="module" src="foo.js"></script>
上面代碼在網(wǎng)頁中插入一個模塊foo.js,由于type屬性設(shè)為module对室,所以瀏覽器知道這是一個 ES6 模塊模燥。
瀏覽器對于帶有type="module"的<script>,都是異步加載掩宜,不會造成堵塞瀏覽器蔫骂,即等到整個頁面渲染完,再執(zhí)行模塊腳本牺汤,等同于打開了<script>標(biāo)簽的defer屬性辽旋。
<script type="module" src="foo.js"></script>
<!-- 等同于 -->
<script type="module" src="foo.js" defer></script>
<script>標(biāo)簽的async屬性也可以打開,這時只要加載完成,渲染引擎就會中斷渲染立即執(zhí)行补胚。執(zhí)行完成后固该,再恢復(fù)渲染。
<script type="module" src="foo.js" async></script>
ES6 模塊也允許內(nèi)嵌在網(wǎng)頁中糖儡,語法行為與加載外部腳本完全一致伐坏。
<script type="module">
import utils from "./utils.js";
// other code
</script>
對于外部的模塊腳本(上例是foo.js),有幾點需要注意握联。
代碼是在模塊作用域之中運行桦沉,而不是在全局作用域運行。模塊內(nèi)部的頂層變量金闽,外部不可見纯露。
模塊腳本自動采用嚴(yán)格模式,不管有沒有聲明use strict代芜。
模塊之中埠褪,可以使用import命令加載其他模塊(.js后綴不可省略,需要提供絕對 URL 或相對 URL)挤庇,也可以使用export命令輸出對外接口钞速。
模塊之中,頂層的this關(guān)鍵字返回undefined嫡秕,而不是指向window渴语。也就是說,在模塊頂層使用this關(guān)鍵字昆咽,是無意義的驾凶。
同一個模塊如果加載多次,將只執(zhí)行一次掷酗。