<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          徹底弄懂<script>標(biāo)簽 您所在的位置:網(wǎng)站首頁(yè) 草字頭的女孩名字屬馬2014 徹底弄懂<script>標(biāo)簽

          徹底弄懂<script>標(biāo)簽

          2025-07-16 06:08| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          文章目錄

          一、script標(biāo)簽特性

          二、script特性驗(yàn)證

          三、script標(biāo)簽優(yōu)化

          一、script標(biāo)簽特性

          script標(biāo)簽主要用于從服務(wù)器端加載一段javascript腳本并在當(dāng)前頁(yè)面中執(zhí)行。因?yàn)槠湫枰獜姆?wù)器端中加載,所以會(huì)在一定程度上影響到web的性能。在性能優(yōu)化中,script標(biāo)簽的優(yōu)化至關(guān)重要。

          ①?script標(biāo)簽?zāi)J(rèn)是同步加載的。當(dāng)HTML頁(yè)面在加載的過程中,遇到了一個(gè)script標(biāo)簽,就會(huì)中斷HTML頁(yè)面的加載,然后根據(jù)對(duì)應(yīng)的src地址向服務(wù)器發(fā)起請(qǐng)求,當(dāng)對(duì)應(yīng)的javascript腳本加載完成后,HTML頁(yè)面仍然不能加載,還必須等加載的javascript腳本執(zhí)行完成后,HTML頁(yè)面才能繼續(xù)往下加載。

          ②?當(dāng)遇到script標(biāo)簽的時(shí)候會(huì)立即渲染一次。當(dāng)HTML頁(yè)面加載的過程中,遇到了一個(gè)script標(biāo)簽,如果之前已經(jīng)加載了部分HTML內(nèi)容,那么會(huì)先將之前加載的HTML內(nèi)容渲染出來,然后再去加載對(duì)應(yīng)的javascript腳本。

          二、script特性驗(yàn)證

          ① 驗(yàn)證特性1,我們通過服務(wù)器設(shè)置一個(gè)請(qǐng)求,這個(gè)請(qǐng)求需要等待5秒后返回,來模擬延長(zhǎng)javascript的加載時(shí)間。

          const express = require("express"); const app = express(); app.use(express.static("./public")); app.use("/test", (req, res) => { setTimeout(() => { res.send(`console.log(document.getElementsByTagName("h1).length)`); }, 5000); // 延長(zhǎng)javascript腳本的加載時(shí)間 }); app.listen(8080); hello script 0

          當(dāng)我們?cè)L問該頁(yè)面的時(shí)候,在頁(yè)面加載過程中,頁(yè)面首先遇到了一個(gè)script標(biāo)簽,并去加載服務(wù)器http://localhost:8080/test返回的腳本,由于該腳本需要5秒后返回,所以我們可以看到頁(yè)面白屏了5秒后,執(zhí)行了加載的腳本,然后再才顯示頁(yè)面內(nèi)容hello script 0。 說明頁(yè)面加載過程中,如果遇到了script標(biāo)簽,那么會(huì)中斷頁(yè)面的加載,必須等待對(duì)應(yīng)的javascript的腳本加載并執(zhí)行完成后才會(huì)繼續(xù)頁(yè)面加載。

          ② 驗(yàn)證特性2,我們修改一下script標(biāo)簽的順序,將script標(biāo)簽放到hello script 0后面**。

          hello script 0 hello script 1

          當(dāng)我們?cè)L問該頁(yè)面的時(shí)候,在頁(yè)面加載過程中,頁(yè)面首先遇到了一個(gè)h1標(biāo)簽,然后才遇到了一個(gè)script標(biāo)簽,同樣會(huì)去加載服務(wù)器http://localhost:8080/test返回的腳本,同樣該腳本也需要5秒后返回,但是這次我們可以看到頁(yè)面中首先出現(xiàn)了hello script 0內(nèi)容,等待5秒白屏后,腳本加載完成并執(zhí)行腳本輸出結(jié)果,接著繼續(xù)渲染HTML頁(yè)面,顯示hello script 1內(nèi)容。 說明,頁(yè)面加載過程中,如果遇到了script標(biāo)簽,那么會(huì)將之前已經(jīng)解析的HTML內(nèi)容先渲染出來,然后再去服務(wù)器加載對(duì)應(yīng)的javascript。所以我們通常需要將script標(biāo)簽放到body標(biāo)簽之后,以便盡早的展現(xiàn)HTML內(nèi)容。

          三、script標(biāo)簽優(yōu)化

          script標(biāo)簽?zāi)J(rèn)是同步加載的,但是其提供了一些屬性可以變成異步加載,如:?async、defer、type=“module”。

          ①?async: 異步加載對(duì)應(yīng)的javascript腳本,不阻塞HTML頁(yè)面的渲染,當(dāng)對(duì)應(yīng)的javascript加載完成后,如果此時(shí)HTML頁(yè)面還未加載完成,那么會(huì)阻塞頁(yè)面的渲染,等javascript執(zhí)行完成后再繼續(xù)HTML頁(yè)面的加載。

          ②?defer: 異步加載對(duì)應(yīng)的javascript腳本,不阻塞HTML頁(yè)面的渲染,當(dāng)對(duì)應(yīng)的javascript加載完成后,如果此時(shí)HTML頁(yè)面還未加載完成,那么不會(huì)阻塞頁(yè)面的渲染,等HTML頁(yè)面加載完成后再接著執(zhí)行加載完成的javascript腳本。

          ③?type=“module”: 也是能起到異步加載的效果,效果同defer,不過其可以配合async屬性讓javascript加載完成后立即執(zhí)行。

          app.use("/deferHTML", (req, res) => { setTimeout(() => { res.send(`console.log("延遲html加載")`); }, 8000); }); hello script 0

          當(dāng)我們?cè)L問該頁(yè)面的時(shí)候,在頁(yè)面加載過程中,頁(yè)面首先遇到了一個(gè)帶async屬性的script標(biāo)簽,此時(shí)會(huì)立即去加載test腳本,不阻塞頁(yè)面的加載,繼續(xù)加載HTML內(nèi)容,然后又遇到了一個(gè)同步加載的script標(biāo)簽,然后去加載deferHTML腳本,阻塞頁(yè)面的加載,阻塞時(shí)間為8秒,而5秒后test腳本加載完成,此時(shí)會(huì)立即執(zhí)行該腳本,該腳本執(zhí)行會(huì)輸出當(dāng)前已加載h1標(biāo)簽的個(gè)數(shù),從輸出結(jié)果可以看到為0。所以我們可以看出,async是異步加載腳本,并且會(huì)在腳本加載完成后立即執(zhí)行。

          hello script 0

          當(dāng)我們?cè)L問該頁(yè)面的時(shí)候,在頁(yè)面加載過程中,頁(yè)面首先遇到了一個(gè)帶defer屬性的script標(biāo)簽,此時(shí)會(huì)立即去加載test腳本,不阻塞頁(yè)面的加載,繼續(xù)加載HTML內(nèi)容,然后又遇到了一個(gè)同步加載的script標(biāo)簽,然后去加載deferHTML腳本,阻塞頁(yè)面的加載,阻塞時(shí)間為8秒,而5秒后test腳本加載完成,此時(shí)不會(huì)立即執(zhí)行該腳本,8秒后deferHTML腳本加載完成,繼續(xù)加載HTML頁(yè)面,當(dāng)HTML頁(yè)面加載完成后,test腳本才會(huì)開始執(zhí)行,輸出當(dāng)前已加載h1標(biāo)簽的個(gè)數(shù),從輸出結(jié)果可以看到為1。所以我們可以看出,defer是異步加載腳本,并且會(huì)在HTML加載完成后再執(zhí)行。



          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 卢氏县| 河间市| 滦平县| 白城市| 吴旗县| 进贤县| 旬邑县| 荣昌县| 西藏| 突泉县| 临清市| 慈利县| 昆明市| 江川县| 安岳县| 商南县| 天镇县| 绵竹市| 大兴区| 东明县| 沁阳市| 英山县| 富顺县| 饶平县| 聂拉木县| 象州县| 四会市| 澄城县| 彝良县| 喜德县| 平顶山市| 蒙山县| 怀来县| 金塔县| 平武县| 金湖县| 五家渠市| 紫阳县| 德安县| 左贡县| 衢州市| http://444 http://444 http://444 http://444 http://444 http://444