快唄,還能有啥。javascript
藍色是dom加載結束的時間,紅色是頁面上全部的資源加載成功的時間css
保存加載完成的結果
html
First Contentful Paint: 不是白屏的時間前端
Speed Index >4就是慢 <4就是快java
Speed Index TTFB 頁面加載時間 首次渲染
這個工具能夠監聽渲染的幀數
node
一流公司作標準,Google寫的標準react
Response : 響應,是咱們的網站給用戶的反饋,google給出的響應在50ms以內完成。
Animation:10ms 以內產生一幀動畫
Idle 空閒,儘量的增長空閒,儘可能讓後端去計算
Load 加載,在5s內完成加載並能夠進行交互webpack
花裏胡哨,很高級的樣子。git
Chrome DevTools 開發調試、性能評測
Lighthouse 網站總體質量評估
WebPageTest 多測試地點、全面性能報告 連接在此github
先安裝docker。
同理,建立agent的鏡像
javascript
(引發視覺的變化,js,css,動畫)->style
(從新對視覺進行計算)->layout
(佈局)->paint
(繪製)->Composite
(合成,相似ps)
寫的代碼是文本,計算機是不能理解的。須要轉換成計算機可以理解的數據結構。
以html的dom結構爲例,識別標記,轉換成鏈式結構。
構建DOM對象:HTML->DOM
而後掛載CSS
構建CSSOM對象:CSS-CSSOM
二者,結合,生成Render Tree。
佈局關心位置和大小
避免迴流
讀寫分離,
複合線程(compositor thread)與圖層(layers)
錄製樣式。
command + P
打開工具,檢查重繪
Paint flashing
閃瞎狗眼
使用tansform,op減小repaint
隻影響複合而不去觸發佈局和繪製。
willChange 不可過多。
# 3-6 高頻事件防抖[解救頁面卡頓]
滾動
touch
poinermove
觸發的頻率高於刷新的頻率
window.requestAnimationFrame
官方連接在此
window.requestAnimationFrame()
告訴瀏覽器——你但願執行一個動畫,而且要求瀏覽器在下次重繪以前調用指定的回調函數更新動畫。該方法須要傳入一個回調函數做爲參數,該回調函數會在瀏覽器下一次重繪以前執行
包上一層函數就能去抖動,達到一幀只觸發一次的目的。
在字體,html,圖片這些資源當中,最爲昂貴的是JavaScript。它後面還有解析和編譯的過程。最後纔是執行.
一樣170kb的文件,js的文件解析須要大約2秒,jpg只須要解碼,大概0.06秒,繪製的總過程0.028s.
js處理的時間大概須要佔三分之一。就算用戶可以看到咱們的頁面,也沒辦法交互。
當前訪問路徑須要哪些資源就加載哪些資源,不須要的咱們給它延遲,訪問的時候再去加載。達到減小加載js的目的
舉例來講,咱們只是引用了loadsh裏面的一個函數,就能夠把這一個函數打包到bundle文件中。
任務時間越長,佔據的阻塞越久
寫行間腳本多是爲了加快首屏的渲染。剩下的再經過web文件進行加載。
對於行間腳本,瀏覽器不能進行優化。
具體看上一章。
node用v8引擎
v8會對代碼進行優化,發現優化的不行了呢,還會反向優化,就會浪費不少時間。
源碼=》抽象語法樹=》字節碼Bytecode=》機器碼
編譯過程會進行優化
運行時可能會發生反優化
檢查超過30kb的腳本,就認爲問價已經足夠大,會單獨開一個線程進行解析。
常用的變量進行緩存
主要針對於函數,先聲明可是不解析。
懶解析的好處,若是不須要解析,那就不用在「堆」裏面分配內存,不用爲它建立一個語法樹。能夠提升咱們加載js的一個總體的效率。
可是現實中,咱們有時候仍是須要咱們的函數當即去執行的。
假如咱們先進行懶解析,而後發現須要當即執行,還須要一個eager parseing,這樣反而性能減半。
那麼,咱們怎樣告訴解析器,咱們須要進行eager parseing?
上面添加的括號會在壓縮的時候被去掉,可是Optimize會幫咱們把括號找回來。
可是如今webpack4已經本身可以實現這個功能。(老師講話真是喜歡大喘氣)。
學習js對象,就像是練習內功。學習得好很差,就看你對對象學習的程度。
這些寫法的目的就是爲了迎合V8引擎對你的代碼進行優化。
至關於多加了一個文檔。父級文檔要等它。
嵌套越深,遍歷越慢
已經out
何時寫在行間?
首屏優化
好比,ul裏面的li
總結:html的優化佔比較少,爲了把優化作到極致,能夠關注上面幾點,可是webpack集成了這樣的功能。(html-minifile)
解析css,會自右向左去讀,先找出全部的a標籤,而後再找出第二個條件進行過濾。
告訴瀏覽器,我和外面的不要緊,只對我裏面的元素進行更改,不用進行迴流,佈局的從新計算。
在頁面上先展現文字,減輕文字閃動的問題
減小http請求量
減少http請求資源的大小
(谷歌就沒壓縮,由於在別的方面作得更好)
js壓縮與混淆,大部分時候都是使用webpack在構建時進行壓縮。
有的人認爲合併比較好,有的人認爲拆分比較好。在網絡上加載比較快。
總結就是同一模塊的小文件,ok的,由於如今都是漸進式加載。單純的爲了優化,減小http請求,會影響用戶體驗。
imagemin 對jpg圖片本身壓縮
使用場景,圖片比較大,還想要儘可能保存畫質。
當圖片有比較多的紋理和邊緣,就不太合適,由於壓縮比較高,會有鋸齒感。
色彩上不相上下
logo,紋理。
大
谷歌新推出的圖片格式
色彩上與JPG不相上下,可是壓縮比更高。
支持webp的瀏覽器。
<img loading="lazy" src="http://,,,,">
連接在此(react-lazy-load-image-component)verlok/lazyload
,yall.js
,Blazy
橫掃描的方式
漸進式圖片
剛開始就能看到圖片的全貌,用戶體驗更好
適配。
剛開始只會加載一張圖片,srcset
裏面是不一樣尺寸的圖片。會根據窗口的大小加載相應大小的圖片。
什麼是FOIT ?什麼是Fout?
字體閃動不可避免。
font-display:auto|block|swap|fallback|optional // block // swap 替換的字體 不會白屏,可是很差看 // fallback 100ms 提早下載完,下載完以前不顯示; 還沒下載完,我就替換 // optional 手機端優化,可以判斷網速,不佳,默認字體,可是默認字體設置上,就不退了
@font-face{ unicode- }