前因
今天檢查乙個vue頁面問題,就是在切換tab時候(某些win10電腦),頁面會卡頓一段很長的時間,短則3秒,長則十幾秒,這個體驗非常糟糕,於是我著手尋找其中原因。
概況
這個vue頁面的元素非常多,主要分為六個tab內容,切換tab也只是控制tab內容的顯隱。按道理這是非常簡單的行為,不應該出現卡頓的情況。
檢查
**上,我將切換tab做的一些業務邏輯去掉,只留下控制顯隱部分,並列印執行時間。
測試過後發現,即便是這麼簡單的操作,頁面還是會卡頓,從列印的日誌上看,我發現了切換的**很快就執行完了,是後續的渲染卡頓了。
timeline
我開啟了控制台工具,點到timeline那一欄,檢查js的執**況。
效果如下:
果然有一長串一直在執行的東西,上圖紫色部分,卡頓的時間就是在執行這玩意。
放大紫色部分,發現這一長條紫色是由一塊塊小塊紫色任務組成的,每個小塊執行的都是同乙個東西,都是在執行update layer tree這個動作。
思考
這update layer tree是瀏覽器渲染頁面的其中乙個行為,但我很奇怪,為什麼會有這麼多這種操作。
ps:了解update layer tree需要知道什麼是頁面重繪(repaint)和回流(reflow),可以看我另一篇文章:
我的**:
我tab切換是用『visibility:hidden』,由vue乙個計算屬性控制,當初為了某些功能,才沒使用『display:none』的。
引用:
這個問題裡面出現了跟我相似的情況,我看了其中的解答,大體意思,』當前樹的某個顯示層失效,導致該層次結構要更新一層,引發該層次結構上每個層都被更新。』
ps:這裡說的樹應該是render tree。
原因:
難道因為『visibility:hidden』的切換,導致render tree的更新異常?
ps:其實按道理,即便是所有的塊都更新了,也不應該更新那麼多次,卡那麼久。
所以,我猜想,可能頁面裡面某些元素的顯隱導致了render tree迴圈更新了。
我將『visibility:hidden』換成『display:none』控制,測試一下,果然就沒不卡頓了。
後續
我沒有找到哪個位置導致的render tree更新異常,目前只能更換tab切換方式,從源頭截止。
另外,如果發現頁面卡頓了,可以用timeline這個工具檢視,非常不錯。
android頁面卡頓
安卓手機應用中介面切換卡頓和滑動卡頓的區別是什麼,請從專業角度解釋?或者給出乙個開發者需要注意事項?於是直接貼我的答案 不過需要注意的是,我舉的例子並不是完備的。而且答題時間有限,而我打字有點慢.所以如果有錯也別打我oaq 另外 本答案基本基於 google 的 android開發指導。在andro...
NFS導致df h卡主解
nfs服務意外斷開,導致掛載的客戶端 df th 命令無法使用,及掛載目錄無法 cd ls 解決思路 1 強制取消客戶端掛載 2 重啟nfs服務,客戶端和服務端都需要重啟 3 重新掛載nfs 處理方法 1 強制取消客戶端掛載 cat etc mtab umount lf mnt 2 重啟nfs服務,...
PyQt5執行耗時操作導致主頁面暫時性卡死問題
問題 pyqt5主介面,如果某些操作比較耗時,比如點選按鈕執行某個指令碼 點選按鈕從網路上讀取資料等,則點選按鈕後,很可能造成整個主視窗卡死,無法執行視窗最大化 最小化 文字輸入 按鈕點選等其他操作。例子如下 程式執行後,有個按鈕和乙個qlabel顯示框,點選按鈕後,會計算1 2 50000000,...