頁面性能優化

優化點

解決方案

效果

  1. 雙向綁定數量過多

競對設置單元格內部涉及雙向綁定的輸入組件過多,線上頁面最多有88個該和抽屜中的編輯表格一樣的組件,共計930+個(按每行最少6個來計算的)雙向綁定的組件,嚴重拖累頁面性能。

數據計算依據:88 = 競對信息單元格數,930 = 155(編輯表格行數)*6(每行最低的雙向綁定組件數)

問題截圖

將競對設置的編輯表格改為純文本展示表格全局僅維護一個編輯表格,點擊對應單元格的編輯按鈕后,顯示抽屜,將目標單元格數據帶入編輯表格進行編輯操作,編輯完成后將修改后的數據同步到目標單元格對應的數據對象中。

通用的編輯表格組件數量由88個縮減到1個,雙向綁定組件由930+個縮減到20個以內(線上數據每個編輯表格大概2-3行)

優化前

優化后

M3 Mac

進入頁面后13s后可以進行頁面交互

感官卡頓時間:6s

滾動會有明顯卡頓

進入頁面后6s后可以進行頁面交互

感官卡頓時間:1s

滾動無卡頓

Windows測試機

頁面崩潰無法打開

刷新后13s后可以進行頁面交互

感官卡頓時間:5s

滾動無卡頓

2. 高并發重復請求?

這是在子組件請求接口,沒有做接口緩存,導致調用N次請求。

緩存后,不切換城市只請求一次。

3. 樹型選擇器渲染函數時間復雜度高

線上場景組織節點數為5377個,當選擇父級節點時,樹型選擇器renderTag方法使用了O(n2)的查找父節點遍歷方法。

該renderTag方法在初始化、點擊選擇框、選擇值、選擇框失焦等多個事件中都會觸發。

問題截圖:

使用Map進行緩存,將函數時間復雜度降為O(n)

              // 優化前:filter+some 二層嵌套循環 時間復雜度為O(n2)const allTagList = data.filter((item) => {// 如果 item 有父節點,檢查父節點是否選中if (item.parentId) {// 查找時間為O(n)return !data.some((dataItem) => dataItem.id === item.parentId);}// 如果 item 沒有父節點,直接選中return true;});
// 優化后:Map直接讀數時間復雜度為O(n)
const allTagList = data.filter((item) => {// 如果 item 有父節點,檢查父節點是否選中if (item.parentId) {// 使用 Map 的 has 方法,時間復雜度 O(1)return !selectedIdMap.has(item.parentId);}// 如果 item 沒有父節點,直接選中return true;});

優化前

優化后

M3 Mac

點擊全選果蔬組織

JS邏輯層執行時間4046ms

頁面卡頓時間:6s

點擊選擇果蔬中心全選

JS邏輯層執行時間 6ms

頁面卡頓時間:2s

Windows測試機

點擊全選果蔬組織,頁面崩潰

點擊選擇果蔬中心全選

頁面卡頓時間:4s

感官卡頓計時方式

  1. 開始計時:使用計時器,點擊全選果蔬按鈕后開始計時

  2. 結束計時:頁面可以隨意滾動交互

感官卡頓時間 = 結束時間點-開始時間點

JS邏輯計時方式

在renderTag問題函數的開始結束位置獲取時間戳,在函數執行完畢后打印兩者差值。

JS邏輯層執行時間 = 點擊全選果蔬按鈕后控制臺輸出的最長renderTag執行時間

4. 寫法優化。

使用Set (n1)查找

避免模版直傳方法渲染,替換為計算屬性

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91205.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳細說明零拷貝

詳細說明零拷貝【一】零拷貝介紹【1】說明【2】為什么需要零拷貝?—— 傳統數據傳輸的問題【3】零拷貝的核心優化【4】零拷貝的實現方式(1)mmap(內存映射)(2)sendfile(Linux 系統調用…

docker部署自己寫的c++http服務器教程

我用的是ubuntu 22.04環境下 qt c 寫的應用程序,是終端程序,不是界面,然后用linuxdeployqt工具將其打包成了AppImage可執行文件,以上是部署前的準備工作,需要確保AppImage可執行文件在自己的ubuntu上可以運行才能執行以…

Caffeine 緩存庫的常用功能使用介紹

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)

目錄 列表(List)特點 創建列表 RemoveAll 刪除與之條件相匹配的數據 會返回刪除的個數 Capacity 獲取或設置列表的容量 更多方法可參照上篇文章:C#_ArrayList動態數組 字典(Dictionary)特點 定義一個字典 向字…

【實時Linux實戰系列】實時網絡控制與調度

在實時控制系統中,網絡調度是確保實時數據流傳輸和處理不受延遲影響的關鍵。實時網絡控制與調度技術對于工業自動化、金融交易、多媒體流等領域至關重要。通過合理設計網絡調度策略,可以顯著提高系統的實時性和可靠性。本文將介紹如何在實時控制系統中實…

Qwen3-Coder:介紹及使用 -- 超強AI編程助手

更多內容:XiaoJ的知識星球 目錄一、Qwen3-Coder模型介紹1.預訓練階段(Pre-Training)2.后訓練階段(Post-Training)1)Scaling Code RL: Hard to Solve, Easy to Verify2)Scaling Long-Horizon RL二…

uniapp 如果進入頁面輸入框自動聚焦,此時快速返回頁面或者跳轉到下一個頁面,輸入法頂上來的頁面出現半屏的黑屏問題。

如果進入頁面輸入框自動聚焦,此時快速返回頁面或者跳轉到下一個頁面,輸入法頂上來的頁面出現半屏的黑屏問題。輸入法出來后,設置了自動將頁面頂上來的配置:pages.json"softinputMode": "adjustResize""g…

深入了解 Kubernetes(k8s):從概念到實踐

目錄 一、k8s 核心概念 二、k8s 的優勢 三、k8s 架構組件 控制平面組件 節點組件 四、k8s docker 運行前后端分離項目的例子 1. 準備前端項目 2. 準備后端項目 3. 創建 k8s 部署配置文件 4. 部署應用到 k8s 集群 在當今云計算和容器化技術飛速發展的時代&#xff0c…

Android User版本默認用test-keys,如何改用release-keys

Android User版本 默認用test-keys, 如何改用release-keys 開發云 - 一站式云服務平臺 --- build/core/Makefile | 5 1 file changed, 5 insertions() diff --git a/build/core/Makefile b/build/core/Makefile index --- a/build/core/Makefile b/build/core…

從零開始學習Dify-數據庫數據可視化(五)

概述上一篇文章我們圍繞 Excel 文件展開數據可視化教學,逐步掌握了數據導入、圖表構建和 AI 智能分析。在實際業務環境中,很多數據并不是保存在表格中,而是存儲于數據庫系統中,尤其是最常見的 MySQL。本篇作為本系列的第五篇&…

使用vue2和 element-ui 做一個點餐收銀臺系統前端靜態項目

今天給大家分享一個 關于點餐收銀臺的靜態網站,最近一直在練習前端項目,就使用vue2和 element-ui 做了一個 這樣簡單的 收銀臺系統。先給大家看一下 做出來的樣子。 因為是練習項目 所以頁面功能還是比較簡單的。 使用的技術是: 技術棧 Vu…

Spring Boot自動配置原理深度解析

Spring Boot自動配置原理深度解析 一、自動配置核心概念 1.1 什么是自動配置 Spring Boot自動配置(Auto-Configuration)是其核心特性之一,能夠根據項目依賴自動配置Spring應用程序。例如: 當檢測到H2數據庫依賴時,自動配置內存數據庫當存在Sp…

關于 Apache Ignite 中 Job 調度(Job Scheduling)與沖突控制(Collision Control) 的機制說明

這段內容是關于 Apache Ignite 中 Job 調度(Job Scheduling)與沖突控制(Collision Control) 的機制說明。我來為你逐段解析,幫助你深入理解其原理和使用方式。🔍 一、核心概念:Job 調度與 Colli…

網絡資源模板--基于Android Studio 實現的課程管理App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情(部分) 登錄頁 首頁 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可…

ROUGE-WE:詞向量化革新的文本生成評估框架

一、ROUGE 基礎與核心局限 ROUGE(Recall-Oriented Understudy for Gisting Evaluation) 是自動文本摘要與機器翻譯的主流評估指標,由 Chin-Yew Lin 在2004年發表的論文中首次系統提出。其核心變體包括: ROUGE-N:基于…

MGER綜合實驗

一.拓撲二、實驗需求 1、R5為ISP,只能進行IP地址配置,其所有地址均配為公有IP地址; 2、R1和R5間使用PPP的PAP認證,R5為主認證方; R2與R5之間使用ppp的CHAP認證,R5為主認證方; R3與R5之間使用HDLC封裝; 3、R1、R2、R3構建一個MGRE環…

高可用集群Keepalived、Redis、NoSQL數據庫Redis基礎管理

1. 總結負載均衡常見的算法 輪詢 (Round Robin):按順序將請求依次分配給后端服務器,適合服務器性能相近的場景。 加權輪詢 (Weighted Round Robin):在輪詢的基礎上,根據服務器的權重分配請求。 隨機 (Random):隨機選…

【深度學習】獨熱編碼(One-Hot Encoding)

獨熱編碼(One-Hot Encoding) 在機器學習中,數據預處理是不可或缺的關鍵一步。面對各種非數值類型的分類數據(Categorical Data),如何將其轉換為機器學習模型能夠“理解”的語言呢?獨熱編碼&…

Promise完全體總結

我們在上篇文章提到了異步會導致無法通過返回值來獲取函數的執行結果,我們通過傳入一個回調函數的方式,以參數的形式獲取到了我們想要獲取的數據,但是這樣如果需要對數據進行多次操作導致形成回調地獄那種不便于閱讀以及護理的代碼。為了解決…

SpringJDBC源碼初探-DataSource類

一、DataSource接口核心作用 DataSource是JDBC規范的核心接口,位于javax.sql包中,用于替代傳統的DriverManager獲取數據庫連接。Spring框架通過org.springframework.jdbc.datasource包對該接口進行了增強,提供連接池管理、事務綁定等高級特性…