主頁 > 企業開發 > 前端里那些你不知道的事兒之 【window.onload】

前端里那些你不知道的事兒之 【window.onload】

2023-04-08 08:19:32 企業開發

作者:京東科技 孫凱

一、前言

相信很多前端開發者在做專案時同時也都做過頁面性能優化,這不單是前端的必備職業技能,也是考驗一個前端基礎是否扎實的考點,而性能指標也通常是每一個開發者的績效之一,尤其馬上接近年關,頁面白屏時間是否過長、首屏加載速度是否達標、影片是否能流暢運行,諸如此類關于性能更具體的指標和感受,很可能也是決定著年底你能拿多少年終獎回家過年的晴雨表

關于性能優化,我們一般從以下四個方面考慮:

  1. 開發時性能優化

  2. 編譯時性能優化

  3. 加載時性能優化

  4. 運行時性能優化

而本文將從第三個方面展開,講一講哪些因素將影響到頁面加載總時長,談到總時長,那總是避免不了要談及window.onload,這不但是本文的重點,也是常見頁面性能監控工具中必要的API之一,如果你對自己頁面加載的總時長不滿意,歡迎讀完本文后在評論區交流,

二、關于 window.onload

這個掛載到window上的方法,是我剛接觸前端時就掌握的技能,我記得尤為深刻,當時老師說,“對于初學者,只要在這個方法里寫邏輯,一定沒錯兒,它是整個檔案加載完畢后執行的生命周期函式”,于是從那之后,幾乎所有的練習demo,我都寫在這里,也確實沒出過錯,

MDN上,關于onload的解釋是這樣的:load 事件在整個頁面及所有依萊澩如樣式表和圖片都已完成加載時觸發,它與DOMContentLoaded不同,后者只要頁面 DOM 加載完成就觸發,無需等待依萊澩的加載,該事件不可取消,也不會冒泡,

后來隨著前端知識的不斷擴充,這個方法后來因為有了“更先進”的DOMContentLoaded,在我的代碼里而逐漸被替代了,目前除了一些極其特殊的情況,否則我幾乎很難用到window.onload這個API,直到認識到它影響到頁面加載的整體時長指標,我才又一次拾起來它,

三、哪些因素會影響 window.onload

本章節主要會通過幾個常用的業務場景展開描述,但是有個前提,就是如何準確記錄各種型別資源加載耗時對頁面整體加載的影響,為此,有必要先介紹一下前提,

為了準確描述資源加載耗時,我在本地環境啟動了一個用于資源請求的node服務,所有的資源都會從這個服務中獲取,之所以不用遠程服務器資源的有主要原因是,使用本地服務的資源可以在訪問的資源鏈接中設定延遲時間,如訪問腳本資源http://localhost:3010/index.js?delay=300,因鏈接中存在delay=300,即可使資源在300毫秒后回傳,這樣即可準確控制每個資源加載的時間,

以下是node資源請求服務延遲相關代碼,僅僅是一個中間件:

const express = require("express")
const app = express()

app.use(function (req, res, next) {
    Number(req.query.delay) > 0
        ? setTimeout(next, req.query.delay)
        : next()
})

  • 場景一: 使用 async 異步加載腳本場景對 onl oad 的影響
    示例代碼:

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>test</title>
    
          <!-- 請求時長為1秒的js資源 -->
          <script src="http://localhost:3010/index.js?delay=1000" async></script>
      </head>
      <body>
      </body>
      </html>
    
    

    瀏覽器表現如下:
    alt
    通過上圖可以看到,瀑布圖中深藍色豎線表示觸發了DOMContentLoaded事件,而紅色豎線表示觸發了window.onload事件(下文中無特殊情況,不會再進行特殊標識),由圖可以得知使用了 async 屬性進行腳本的異步加載,仍會影響頁面加載總體時長,

  • 場景二:使用 defer 異步加載腳本場景對 onl oad 的影響
    示例代碼:

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>test</title>
    
          <!-- 請求時長為1秒的js資源 -->
          <script src="http://localhost:3010/index.js?delay=1000" defer></script>
      </head>
      <body>
      </body>
      </html>
    
    

    瀏覽器表現如下:
    alt
    由圖可以得知使用了 defer 屬性進行腳本的異步加載,除了正常的在DOMContentLoaded之后觸發腳本執行,也影響頁面加載總體時長,

  • 場景三:異步腳本中再次加載腳本,也就是常見的動態加載腳本、樣式資源的情況
    html 代碼保持不變,index.js內示例代碼:

    const script = document.createElement('script')
    
    // 請求時長為0.6秒的js資源
    script.src = 'http://localhost:3010/index2.js?delay=600'
    script.onload = () => {
        console.log('js 2 異步加載完畢')
    }
    document.body.appendChild(script)
    
    

    結果如下:
    alt
    從瀑布圖可以看出,資源的連續加載,導致了onload事件整體延后了,這也是我們再頁面中非常常見的一種操作,通常懶加載一些不重要或者首屏外的資源,其實這樣也會導致頁面整體指標的下降,

    不過值得強調的一點是,這里有個有意思的地方,如果我們把上述代碼進行改造,洗掉最后一行的document.body.appendChild(script),發現 index2 的資源請求并沒有發出,也就是說,腳本元素不向頁面中插入,腳本的請求是不會發出的,但是也會有反例,這個我們下面再說,

    在本示例中,后來我又把腳本請求換成了 css 請求,結果是一致的,

  • 場景四:圖片的懶加載/預加載
    html 保持不變,index.js 用于加載圖片,內容如下:

    const img = document.createElement('img')
    
    // 請求時長為0.5秒的圖片資源
    img.src = 'http://localhost:3010/index.png?delay=500'
    document.body.appendChild(img)
    
    

    結果示意:
    alt
    表現是與場景三一樣的,這個不再多說,但是有意思的來了,不一樣的是,經過測驗發現,哪怕洗掉最后一行代碼:document.body.appendChild(img)不向頁面中插入元素,圖片也會發出請求,也同樣延長了頁面加載時長,所以部分同學就要注意了,這是一把雙刃劍:當你真的需要懶加載圖片時,可以少寫最后一行插入元素的代碼了,但是如果大量的圖片加載請求發出,哪怕不向頁面插入圖片,也真的會拖慢頁面的時長,

    趁著這個場景,再多說一句,一些埋點資料的上報,也正是借著圖片有不需要插入dom即可發送請求的特性,實作成功上傳的,

  • 場景五:普通介面請求
    html 保持不變,index.js 內容如下:

    // 請求時長為500毫秒的請求介面
    fetch('http://localhost:3010/api?delay=500')
    
    

    結果如下圖:
    alt
    可以發現普通介面請求的發出,并不會影響頁面加載,但是我們再把場景弄復雜一些,見場景六,

  • 場景六:同時加載樣式、腳本,腳本加載完成后,內部http介面請求,等請求結果回傳后,再發出圖片請求或修改dom,這也是更貼近生產環境的真實場景
    html 代碼:

    <!DOCTYPE html>
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>test</title>
    
        <!-- 請求時長為1.2秒的css -->
        <link rel="stylesheet" href="http://localhost:3010/index.css?delay=1200">
    
        <!-- 請求時長為0.4秒的js -->
        <script src="http://localhost:3010/index.js?delay=400" async></script>
    </head>
    <body>
    </body>
    </html>
    
    

    index.js 代碼:

    async function getImage () {
        // 請求時長為0.5秒的介面請求
        await fetch('http://localhost:3010/api?delay=500')
    
        const img = document.createElement('img')
        // 請求時長為0.5秒的圖片資源
        img.src = 'http://localhost:3010/index.png?delay=500'
        document.body.appendChild(img)
    
    }
    
    getImage()
    
    

    結果圖如下:
    alt

    如圖所示,結合場景五記的結果,雖然普通的 api 請求并不會影響頁面加載時長,但是因為api請求過后,重新請求了圖片資源(或大量操作 dom),依然會導致頁面加載時間變長,這也是我們日常開發中最常見的場景,頁面加載了js,js發出網路請求,用于獲取頁面渲染資料,頁面渲染時加載圖片或進行dom操作,

  • 場景七:頁面多媒體資源的加載
    示例代碼:

    <!DOCTYPE html>
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>test</title>
    </head>
    <body>
        <video src="http://localhost:3010/video.mp4?delay=500" controls></video>
    </body>
    </html>
    
    

    結果如圖:
    alt

    對于視頻這種多媒體資源的加載比較有意思,video 標簽對于資源的加載是默認開啟 preload 的,所以資源會默認進行網路請求(如需關閉,要把 preload 設定為 none ),可以看到紅色豎線基本處于圖中綠色條和藍色條中間(實際上更偏右一些),圖片綠色部分代表資源等待時長,藍色部分代表資源真正的加載時長,且藍色加載條在onload的豎線右側,這說明多媒體的資源確實影響了 onl oad 時長,但是又沒完全影響,因為設定了500ms的延遲回傳資源,所以 onl oad 也被延遲了500ms左右,但一旦視頻真正開始下載,這段時長已經不記錄在 onl oad 的時長中了,

    其實這種行為也算合理,畢竟多媒體資源通常很大,占用的帶寬也多,如果一直延遲 onl oad,意味著很多依賴 onl oad 的事件都無法及時觸發,

    接下來我們把這種情況再復雜一些,貼近實際的生產場景,通常video元素是包含封面圖 poster 屬性的,我們設定一張延遲1秒的封面圖,看看會發生什么,結果如下:
    alt
    不出意外,果然封面圖影響了整體的加載時長,魔鬼都在細節中,封面圖也需要注意優化壓縮

  • 場景八:異步腳本和樣式資源一同請求
    示例代碼:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>test</title>
    
        <!-- 請求時長為1秒的css -->
        <link rel="stylesheet" href="http://localhost:3010/index.css?delay=1000">
    
        <!-- 請求時長為0.5秒的js -->
        <script src="http://localhost:3010/index.js?delay=500" async></script>
    </head>
    <body>
    </body>
    </html>
    
    

    瀏覽器表現如下:
    alt
    可以看出 css 資源雖然沒有阻塞腳本的加載,但是卻延遲了整體頁面加載時長,其中原因是css資源的加載會影響 render tree 的生成,導致頁面遲遲不能完成渲染,
    如果嘗試把 async 換成 defer,或者干脆使用同步的方式加載腳本,結果也是一樣,因結果相同,本處不再舉例,

  • 場景九:樣式資源先請求,再執行行內腳本邏輯,最后加載異步腳本
    我們把場景八的代碼做一個改造,在樣式標簽和異步腳本標簽之間,加上一個只包含空格的行內腳本,讓我們看看會發生什么,代碼如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <script>
            console.log('頁面js 開始執行')
        </script>
    
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>test</title>
    
        <!-- 請求時長為1秒的css -->
        <link rel="stylesheet" href="http://localhost:3010/index.css?delay=2000">
    
        <!-- 此標簽僅有一個空格 -->
        <script> </script>
    
        <!-- 請求時長為0.5秒的js -->
        <script src="http://localhost:3010/index.js?delay=500" async></script>
    </head>
    <body>
    </body>
    </html>
    
    

    index.js 中的內容如下:

    console.log("腳本 js 開始執行");
    
    

    結果如下,這是一張 GIF,加載可能有點慢:
    alt
    這個結果非常有意思,他到底發生了什么呢?

    1. 腳本請求是0.5秒的延遲,樣式請求是2秒

    2. 腳本資源是 async 的請求,異步發出,應該什么時候加載完什么時候執行

    3. 但是圖中的結果卻是等待樣式資源加載完畢后才執行

    答案就在那個僅有一個空格的腳本標簽中,經反復測驗,如果把標簽換成注釋,也會出現一樣的現象,如果是一個完全空的標簽,或者根本沒有這個腳本標簽,那下方的index.js 通過 async 異步加載,并不會違反直覺,加載完畢后直接執行了,所以這是為什么呢?

    這其實是因為樣式資源下方的 script 雖然僅有一個空格,但是被瀏覽器認為了它內部可能是包含邏輯,一定概率會存在樣式的修改、更新 dom 結構等操作,因為樣式資源沒有加載完(被延遲了2秒),導致同步 js (只有一個空格的腳本)的執行被阻塞了,眾所周知頁面的渲染和運行是單執行緒的,既然前面已經有了一個未執行完成的 js,所以也導致了后面異步加載的 js 需要在佇列中等待,這也就是為什么 async 雖然異步加載了,但是沒有在加載后立即執行的原因,

  • 場景十:字體資源的加載
    示例代碼:

    <!DOCTYPE html>
    
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>test</title>
        <style>
            @font-face {
                font-family: font-custom;
                src: url('http://localhost:3010/font.ttf?delay=500');
            }
    
            body {
                font-family: font-custom;
            }
        </style>
    </head>
    <body></body>
    </html>
    
    

    結果如下:
    alt
    可以看到,此情況下字體的加載是對 onl oad 有影響的,然后我們又測驗了一下只宣告字體、不使用的情況,也就是洗掉上面代碼中 body 設定的字體,發現這種情況下,字體是不會發出請求的,僅僅是造成了代碼的冗余,

四、總結

前面列舉了大量的案例,接下來我們做個總結,實質性影響 onl oad 其實就是幾個方面,

  1. 圖片資源的影響毋庸置疑,無論是在頁面中直接加載,還是通過 js 懶加載,只要加載程序是在 onl oad 之前,都會導致頁面 onl oad 時長增加,

  2. 多媒體資源的等待時長會被記入 onl oad,但是實際加載程序不會,

  3. 字體資源的加載會影響 onl oad,

  4. 網路介面請求,不會影響 onl oad,但需要注意的是介面回傳后,如果此時頁面還未 onl oad,又進行了圖片或者dom操作,是會導致 onl oad 延后的,

  5. 樣式不會影響腳本的加載和決議,只會阻塞腳本的執行,

  6. 異步腳本請求不會影響頁面決議,但是腳本的執行同樣影響 onl oad,

五、優化舉措

  1. 圖片或其他資源的預加載可以通過 preload 或 prefetch 請求,這兩種方式都不會影響 onl oad 時長,

  2. 一定注意壓縮圖片,頁面中圖片的加載速度可能對整體時長有決定性影響,

  3. 盡量不要做串行請求,沒有依賴關系的情況下,推薦并行,

  4. 中文字體包非常大,可以使用字蛛壓縮、或用圖片代替,

  5. 靜態資源上 cdn 很重要,壓縮也很重要,

  6. 洗掉你認為可有可無的代碼,沒準哪一行代碼就會影響加載速度,并且可能很難排查,

  7. 視瞥澩如果在首屏以外,不要開啟預加載,合理使用視頻的 preload 屬性,

  8. async 和 defer 記得用,很好用,

  9. 非必要的內容,可以在 onl oad 之后執行,是時候重新拾起來這個 api 了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/549444.html

標籤:Html/Css

上一篇:CSS常用背景屬性(背景顏色、背景圖片、背景平鋪、背景位置、背景附著、背景色半透明、背景屬性復合寫法)

下一篇:前端設計模式——MVVM模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more