【瀏覽器】Chrome 88 新功能解讀
CSS aspect-ratio 屬性
aspect-ratio 屬性對應(yīng)的就是 Aspect Ratio,它的意思就是寬高比,也常稱為 縱橫比,是幾何形狀在不同尺寸的比值。舉個例子,當矩形方向為橫向時的寬高比值,是其長邊與短邊的比率。常會用來描述圖像或屏幕的寬度和高度的比率。通常表示為 x:y 或 x × y,其中的 冒號 和 乘號 表示中文的 比 之意。

就拿 16:9 來說,第一個數(shù)字總是指 寬度,第二個數(shù)字是指 高度。如果圖像的比例與屏幕的比例不同,你可能無法看到整個圖像。如果屏幕比圖像窄,圖像就不能合適地放入。
在以前,只有某些特定的元素具有長寬比,例如 image。這時我們僅指定寬度或高度,元素會根據(jù)固有長寬比自動計算另一個。
<img?src="..."?style="width:?800px;">
在 Chrome 88 中, aspect-ratio 屬性可讓你顯式指定寬高比,從而實現(xiàn)類似的行為。
.square?{
??aspect-ratio:?1?/?1;
}
大幅限制鏈式 JavaScript 定時器
Chrome 88 將在特定情況下大幅限制隱藏頁面的鏈式 JavaScript 計時器。這將減少CPU使用率,也將減少電池使用率。
如果你在一個 setTimeout 里調(diào)用了同一個 setTimeout,這就相當于鏈式調(diào)用了:
let?chainCount?=?0;
function?setTimeoutChain()?{
??setTimeout(()?=>?{
????chainCount++;
????console.log(`This?is?number?${chainCount}?in?the?chain`);
????setTimeoutChain();
??},?500);
}
在 Chrome 88 中,當以下所有的條件都成立時,你的 setTimeout 調(diào)用就會被節(jié)流限制:
該頁面已經(jīng)隱藏 5 分鐘以上(用戶當前打開了其他的頁面) 你鏈式調(diào)用的計數(shù)是 5 或更多次 該頁面已經(jīng)靜音 30 秒以上 未使用 WebRTC
在滿足這種情況下,瀏覽器將每分鐘檢查一次定時器,你定時器里的邏輯也會在每分鐘內(nèi)分批處理。Chrome 官方推薦使用 setInterval 來解決這個問題。
默認啟用 noopener
class=""?href="https://developers.tiktok.com/?refer=tiktok_web"?target="_blank">TikTok?for?Developers</a>
如果你的 a 標簽只是有一個 target="_blank" 屬性,打開新窗口后,新頁面能通過 window.opener 獲取到來源頁面的 window 對象,如果跳轉(zhuǎn)到一個惡意頁面,它可能會惡意讀取你的一些信息,甚至進行釣魚攻擊。
為了符合 HTML 標準的更改,默認情況下如果你的 a 標簽有 target="_blank",現(xiàn)在會默認開啟 rel="noopener"。
V8 支持非回溯 RegExp 引擎
由于 V8 中的 RegExp 引擎默認使用的是 NFA引擎,NFA引擎是用表達式去匹配文本,而表達式又有若干分支和范圍,一個分支或者范圍匹配失敗并不意味著最終匹配失敗,正則引擎會去嘗試下一個分支或者范圍,NFA引擎的核心特點就是會發(fā)生回溯。
回溯可不是個好東西。想象一下,面前有兩條路,你選擇了一條,走到盡頭發(fā)現(xiàn)是條死路,你只好原路返回嘗試另一條路。這個原路返回的過程就叫回溯,它在正則中的含義是吐出已經(jīng)匹配過的文本。
你可以使用下面的正則在 Chrome 控制臺進行測試:
document.cookie)/>/g);
雖然只是簡單的一段正則,但是由于它的分支過多,會引起大量的回溯,從而導(dǎo)致你的瀏覽器卡死。
為了解決這個問題,從 v8.8 開始,V8附帶了一個新的實驗性非回溯 RegExp 引擎,它可以保證在字符串長度變大的情況下保持線性的時間變化:

你可以通過下面的方式配置新的 RegExp 引擎:
--enable-experimental-regexp_engine-on-excessive-backtracks:在過多的回溯上啟用對非回溯引擎的回退。--regexp-backtracks-before-fallback N:(默認N=50000)指定了多少回溯被視為過多,即何時進行回退。--enable-experimental-regexp-engine直接啟用非回溯RegExp引擎。
Manifest v3

Chrome 88 現(xiàn)在支持使用 Manifest v3 構(gòu)建的擴展程序,用戶可以將其上傳到 Chrome 網(wǎng)上應(yīng)用店。Manifest v3 是一個新的擴展平臺,默認情況下可使 Chrome 擴展更安全,更高效,更尊重隱私。
Manifest v3 不允許使用遠程托管的代碼,這可以幫助 Chrome Web Store 審核人員更好地了解擴展程序帶來的風(fēng)險,并且應(yīng)該允許你更快地更新擴展。
完全禁用 FTP

從 86 版本開始,Chrome 開始了禁用 FTP 的過程,到 88 版本發(fā)布后,F(xiàn)TP 被完全禁用:
Chrome 86:默認情況下,大多數(shù)用戶仍啟用FTP,但對于pre-release channels禁用了FTP,并且將對穩(wěn)定用戶的百分之一進行實驗性關(guān)閉。在此版本中,用戶可以使用--enable-ftp命令或--enable-features=FtpProtocol?從命令行重新啟用它 。Chrome 87:默認情況下,百分之五十的用戶將禁用FTP支持,但可以使用上面列出的 flag 啟用FTP支持。Chrome 88:FTP支持被完全禁用
完全禁用混合內(nèi)容下載

如上面的過程,從 81 版本開始, Chrome 開始阻止混合內(nèi)容的下載,并在各個版本開啟不同文件類型的阻止,到 Chrome 88 版本,所有文件類型的混合內(nèi)容下載被完全阻止。
當用戶正在訪問一個以 HTTPS 開頭的網(wǎng)頁,但文件是從一個以 HTTP 開頭的 URL 下載的。Chrome 將這些情況視為 “混合”和 “不安全”下載。
完全禁用 flash

Chrome 在 83 版本對用戶使用 flash 開啟了進一步提示,比如如果提示激活 Flash 插件時并導(dǎo)致狀態(tài)更改,將會再次給予警告。
2020 年 12 月 31 日,F(xiàn)lash 達到了正式的生命終點,Adobe 正式停止支持該軟件。1 月 12 日,Adobe 開始直接阻止 Flash 內(nèi)容播放。
移除 Web Components v0 支持
從 Chrome 88 版本開始,不再支持 Web Components v0 ,Chrome 使用 Web Components v1 API 替代了 Web Components v0,并且 Safari、Firefox、Edge 都支持了這項改動。
歡迎關(guān)注「前端雜貨鋪」,一個有溫度且致力于前端分享的雜貨鋪
關(guān)注回復(fù)「加群」,可加入雜貨鋪一起交流學(xué)習(xí)成長
