JavaScript 性能優化實戰技術文章大綱

一、引言

1.1 背景闡述

在當今 Web 應用高度交互化、復雜化的趨勢下,JavaScript 作為核心腳本語言,其性能優劣直接決定了用戶體驗的好壞。從單頁應用(SPA)的流暢運行,到復雜數據可視化的實時交互,JavaScript 承擔著處理大量業務邏輯與用戶交互的重任。然而,隨著功能的不斷疊加,代碼復雜度攀升,性能瓶頸逐漸顯現,如頁面加載緩慢、操作卡頓、內存占用過高等問題屢見不鮮,嚴重影響用戶留存與業務發展。

1.2 性能優化的重要性

  • 提升用戶體驗:快速響應的頁面能減少用戶等待時間,增強操作流暢感,提升用戶滿意度與忠誠度,尤其在競爭激烈的互聯網市場,毫秒級的性能提升都可能成為吸引用戶的關鍵因素。
  • 優化資源利用:合理的性能優化可降低服務器負載、減少帶寬消耗,對于移動應用而言,還能節省用戶流量與電量,提升應用在不同設備與網絡環境下的適應性。
  • 促進業務增長:良好的性能表現有助于提升轉化率,無論是電商平臺的購物流程,還是在線服務的注冊使用,流暢的體驗能引導用戶更順利地完成關鍵操作,推動業務目標達成。

1.3 文章目標與讀者對象

本文旨在為中高級 JavaScript 開發者提供一套全面、深入且具有實戰指導意義的性能優化方案。通過剖析性能瓶頸根源,結合大量代碼示例展示優化前后差異,并介紹實用工具與最佳實踐,幫助讀者掌握性能優化核心技巧,能夠在實際項目中快速定位并解決性能問題,打造高性能的 JavaScript 應用。讀者需具備扎實的 JavaScript 基礎,熟悉常見 Web 開發框架與工具。

二、性能分析:精準定位瓶頸

2.1 Chrome DevTools 性能面板實戰

  • 錄制性能分析:詳細介紹如何打開 Chrome DevTools 的 Performance 面板,點擊錄制按鈕后,模擬用戶在頁面上的各類操作,如頁面加載、滾動、點擊、表單提交等,直至完成特定場景操作后停止錄制,獲取完整的性能數據記錄。
  • 關鍵指標解讀
    Long Tasks(>50ms 的任務):解釋紅色標記的 Long Tasks 對主線程阻塞的影響,如何通過其在時間軸上的分布與時長,定位長時間運行、導致頁面卡頓的任務函數,舉例說明常見的導致 Long Tasks 的操作,如復雜計算、大規模 DOM 更新等。
    Main Thread:深入剖析 Main Thread 面板中函數調用堆棧信息,講解如何通過層層展開調用棧,追蹤到具體耗時函數及其調用路徑,結合實際案例,分析如何從函數執行時間、調用次數等維度,判斷性能瓶頸所在函數。
    FPS:闡述幀率(FPS)波動與頁面渲染性能的緊密聯系,展示正常幀率與低幀率在 Performance 面板中的表現差異,說明低幀率如何直觀反映出頁面動畫卡頓、元素繪制延遲等問題,以及如何通過優化相關代碼提升 FPS。
  • 內存泄漏檢測
    Memory 面板介紹:講解 Memory 面板的主要功能與界面布局,包括拍攝堆快照(Heap Snapshot)、記錄內存時間線(Memory Timeline)等操作入口。
    檢測方法:詳細說明如何通過多次拍攝堆快照,對比不同時間點對象數量、類型及內存占用變化,識別出 <代碼開始> Detached DOM 樹 < 代碼結束 > 等內存泄漏跡象;如何利用內存時間線追蹤內存增長趨勢,定位持續消耗內存且未被釋放的代碼片段。

2.2 真實案例:DOM 操作引發的災難

  • 問題現象:描述某實際項目中,頁面在執行特定操作(如大量數據加載并渲染到頁面、頻繁切換頁面元素顯示狀態)時,出現嚴重卡頓甚至假死現象,通過 Performance 面板觀察到大量 <代碼開始> Layout < 代碼結束 >(布局計算)和 < 代碼開始 > Recalculate Style < 代碼結束 >(樣式重新計算)相關記錄,且幀率極低。
  • 定位過程:逐步分析代碼中與 DOM 操作相關部分,展示如何發現循環中頻繁直接修改 <代碼開始> element.style.width < 代碼結束 >、< 代碼開始 > element.innerHTML < 代碼結束 > 等屬性,導致每次修改都觸發瀏覽器重新計算布局與樣式,引發大量不必要的重排(Reflow)和重繪(Repaint)。
  • 優化方案
    使用 <代碼開始> requestAnimationFrame < 代碼結束 > 批量更新:解釋 < 代碼開始 > requestAnimationFrame < 代碼結束 > 的工作原理,如何利用它將多次 DOM 更新操作合并,在瀏覽器下一次重繪前統一執行,減少重排與重繪次數,給出優化后的代碼示例并對比性能提升效果。
    提前讀取布局屬性,避免強制同步布局(FSL):說明強制同步布局的概念與危害,介紹如何在修改 DOM 樣式前,提前讀取相關布局屬性(如 < 代碼開始 > offsetWidth < 代碼結束 >、< 代碼開始 > scrollTop < 代碼結束 > 等),緩存數據后再進行批量樣式修改,防止因瀏覽器即時計算布局而導致性能損耗,給出具體代碼修改前后對比案例。

三、高頻優化場景與實戰代碼

3.1 減少重排與重繪

  • 優化技巧
    CSS 屬性分層:深入講解對頻繁變化的元素使用 <代碼開始> will-change: transform;
    < 代碼結束 >
    或 < 代碼開始 > transform: translateZ (0);
    < 代碼結束 >
    的原理,如何通過將元素提升至 GPU 層,利用硬件加速減少 CPU 參與,從而避免重排與重繪,結合動畫效果案例展示優化前后性能差異。
    批量 DOM 修改:詳細對比錯誤寫法(如在循環中多次直接修改 DOM 元素的單個屬性,每次修改都觸發重排)與正確寫法(使用 cssText 一次性修改多個樣式屬性,或通過切換 CSS 類名來改變元素樣式),分析不同寫法對重排重繪次數的影響,給出具體代碼示例及性能測試數據。

3.2 事件監聽優化

  • 問題場景:描述如頁面滾動(scroll)、窗口大小調整(resize)、鼠標移動(mousemove)等高頻事件,在綁定復雜處理函數時,導致頁面性能急劇下降的現象,例如在 scroll 事件中進行大量 DOM 元素位置計算與樣式更新,隨著滾動頻繁觸發,頁面卡頓明顯。
  • 優化方案
    節流(Throttle):介紹節流函數的實現原理,通過設置固定時間間隔,確保在該時間段內無論事件觸發多少次,處理函數最多只執行一次,給出節流函數的 JavaScript 實現代碼,并展示如何將其應用于高頻事件(如 scroll 事件),有效減少函數執行次數,提升頁面性能。
    防抖(Debounce):講解防抖函數的工作機制,即當事件觸發后,等待一定延遲時間,若在此期間事件再次觸發,則重新計時,直到延遲時間內無新事件觸發,才執行處理函數,常用于輸入框搜索建議、按鈕防重復點擊等場景,給出防抖函數代碼示例及實際應用案例。

3.3 大數據渲染:虛擬列表

  • 傳統方案問題:分析傳統方式渲染大量數據(如列表展示 10000 條甚至更多數據項)時面臨的困境,如 DOM 節點數量劇增導致內存占用過高、頁面渲染緩慢,滾動操作時頻繁重排重繪,引發嚴重卡頓,從性能指標(如 FPS、CPU 使用率、內存占用量)角度量化展示傳統方案的弊端。
  • 虛擬列表實現思路
    計算可視區域高度 <代碼開始> containerHeight < 代碼結束 >:介紹如何獲取頁面中用于展示列表的容器元素高度,考慮不同設備屏幕尺寸、瀏覽器窗口大小變化等因素,確保計算的準確性。
    根據每條高度 < 代碼開始 > itemHeight < 代碼結束 >,計算可視區域能展示的條目數 < 代碼開始 > visibleCount < 代碼結束 >:說明如何確定每個列表項的高度,以及基于此計算在當前可視區域內可完整顯示的列表項數量,為后續只渲染可見區域數據提供依據。
    監聽滾動事件,動態渲染可視區域數據并偏移占位元素:詳細闡述如何通過監聽滾動事件,實時計算當前滾動位置,確定需要在可視區域內渲染的列表項起始索引與結束索引,僅對這部分數據進行 DOM 渲染,同時通過設置占位元素(高度等于所有列表項總高度)來維持頁面布局,實現流暢的滾動效果,給出關鍵步驟的代碼邏輯與注釋。
  • 核心代碼片段:提供虛擬列表實現的關鍵 JavaScript 代碼片段,包括數據處理、滾動事件監聽與處理、DOM 渲染更新等部分,對代碼進行詳細注釋,解釋每一步操作的目的與實現方式,幫助讀者理解虛擬列表技術的核心實現原理,并可結合實際項目場景進行擴展與優化。

四、現代瀏覽器 API 的極致優化

4.1 Web Workers:解放主線程

  • 適用場景:明確指出 Web Workers 適用于處理加密解密、圖像處理、復雜數學計算(如大規模矩陣運算、數據排序算法)等 CPU 密集型任務,這些任務若在主線程執行,會長時間占用 CPU 資源,導致頁面失去響應,詳細分析在不同業務場景下使用 Web Workers 的必要性與優勢。
  • 使用示例:給出一個完整的 Web Workers 使用案例,包括在主線程中創建 Worker 實例、向 Worker 發送數據(如待處理的數據塊、計算參數)、監聽 Worker 返回的計算結果,以及在 Worker 線程中接收數據、執行復雜計算任務并返回結果的代碼實現,對每一步操作進行詳細注釋與說明,展示如何通過 Web Workers 將復雜任務從主線程分離,提升頁面整體響應性能。

4.2 Intersection Observer:高效監聽元素可見性

  • 替代傳統滾動監聽:對比傳統通過監聽 scroll 事件結合元素位置計算來判斷元素是否進入視口的方法,分析其存在的性能問題(如頻繁觸發 scroll 事件導致大量計算開銷、計算不準確等),闡述 Intersection Observer API 如何通過瀏覽器底層優化,高效、準確地監聽元素與祖先元素或視口的交集變化情況,減少不必要的計算與事件觸發,提升頁面性能與用戶體驗。
  • 使用場景與代碼示例:介紹 Intersection Observer 在圖片懶加載、無限滾動加載更多數據、廣告曝光統計等常見業務場景中的應用,給出具體代碼示例,包括如何創建 IntersectionObserver 實例、配置觀察選項(如根元素、根邊界、閾值等)、在回調函數中處理元素可見性變化事件(如加載圖片、請求更多數據等操作),對代碼進行詳細解讀,幫助讀者掌握該 API 的實際應用技巧。

4.3 requestIdleCallback:空閑時間調度

  • 低優先級任務調度:解釋在頁面運行過程中,存在一些對實時性要求不高的任務(如數據統計上報、非關鍵資源預加載、后臺緩存更新等),若在主線程繁忙時執行,可能影響關鍵業務邏輯的響應速度,而 requestIdleCallback 提供了一種在瀏覽器空閑時間執行低優先級任務的機制,避免對主線程造成阻塞,確保頁面流暢運行。
  • 使用方法與注意事項:詳細介紹 requestIdleCallback 的使用方法,包括如何定義回調函數(在空閑時間執行的任務邏輯)、如何獲取瀏覽器空閑時間(通過回調函數參數),以及在實際使用中需要注意的問題,如回調函數執行時間限制、兼容性處理等,給出簡單易懂的代碼示例,展示如何合理運用該 API 調度低優先級任務,優化頁面性能。

五、性能優化 checklist

分類檢查項工具 / 方法
加載優化代碼分割(Code Splitting)Webpack 動態 import,將大文件拆分為多個小模塊,按需加載,減少初始加載體積,提升首屏加載速度
加載優化Tree ShakingWebpack 生產模式下自動啟用,通過靜態分析代碼導入導出關系,去除未使用的代碼,進一步減小打包文件體積
運行時優化避免內存泄漏Chrome Memory 面板,通過拍攝堆快照、分析內存時間線,檢測并定位內存泄漏點,如未移除的事件監聽器、閉包導致的對象無法釋放等
運行時優化減少全局變量ESLint 檢測規則配置,強制限制全局變量使用,將變量作用域盡量縮小,降低命名沖突風險,減少內存占用
渲染優化使用 CSS 動畫替代 JS 動畫優先使用 <代碼開始> transform < 代碼結束 > 和 < 代碼開始 > opacity < 代碼結束 > 屬性創建動畫,利用瀏覽器硬件加速,減少重排重繪,相比 JS 操作 DOM 樣式實現動畫,性能更優
渲染優化離屏 Canvas 繪制在需要繪制復雜圖形、圖表或進行大量像素操作時,先使用離屏 Canvas 進行預繪制,完成后再將繪制結果一次性渲染到頁面 Canvas 上,避免頻繁觸發頁面重繪,提升繪制效率

六、進階方向

6.1 WASM 加速

  • 原理簡介:深入講解 WebAssembly(WASM)的基本原理,它如何將 C++、Rust 等語言編寫的高性能模塊編譯為二進制格式,在瀏覽器中以接近原生的速度運行,打破 JavaScript 單線程執行與動態類型帶來的性能限制,介紹 WASM 在 Web 應用性能優化領域的重要地位與發展趨勢。
  • 應用場景舉例:舉例說明 WASM 在音視頻解碼、3D 圖形渲染、高性能數據處理(如大數據分析、科學計算)等對性能要求極高的場景中的應用,分析在這些場景下使用 WASM 相較于純 JavaScript 實現的性能優勢,展示實際項目中引入 WASM 后性能指標(如處理速度、資源占用)的顯著提升。

6.2 Service Worker 緩存

  • 功能介紹:詳細闡述 Service Worker 的核心功能,如攔截網絡請求、實現資源預加載與緩存管理,通過在瀏覽器后臺運行,它可以在網絡離線或不穩定時,從緩存中快速讀取資源,確保頁面正常訪問與部分功能可用,極大提升用戶體驗的穩定性與流暢性。
  • 優化策略:介紹如何制定合理的 Service Worker 緩存策略,包括緩存哪些類型的資源(如 HTML、CSS、JS、圖片)、何時更新緩存(如版本更新、資源變化時)、如何處理緩存過期與失效等問題,給出具體代碼示例與配置說明,展示如何通過優化 Service Worker 緩存策略,提升頁面加載速度與離線應用能力。

6.3 Performance API 監控

  • 監控方法:詳細講解如何使用 Performance API 進行更精細的性能監控,包括如何通過 <代碼開始> performance.mark ()< 代碼結束 > 標記代碼執行起始與結束點,使用 < 代碼開始 > performance.measure ()< 代碼結束 > 計算特定代碼段執行時長,以及如何通過 < 代碼開始 > performance.getEntriesByName ()< 代碼結束 > 獲取性能測量結果,結合實際代碼示例展示如何利用這些 API 精確測量函數執行時間、頁面關鍵流程耗時等性能指標。
  • 數據應用:分析如何將 Performance API 獲取到的性能數據進行收集、整理與分析,通過可視化圖表(如時間軸圖、柱狀圖)展示性能趨勢,以便開發者直觀了解應用性能變化,及時發現性能瓶頸并進行針對性優化,介紹如何結合日志記錄與數據分析工具,將性能監控數據與業務邏輯關聯,為性能優化決策提供有力支持。

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

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

相關文章

正點原子【第四期】Linux之驅動開發學習筆記-2.1LED燈驅動實驗(直接操作寄存器)

前言&#xff1a; 本文是根據嗶哩嗶哩網站上“正點原子【第四期】手把手教你學Linux系列課程之 Linux驅動開發篇”視頻的學習筆記&#xff0c;該課程配套開發板為正點原子alpha/mini Linux開發板。在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內…

【GM3568JHF】FPGA+ARM異構開發板 測試命令

本章節的命令操作均在板卡的終端執行 1 初探/sys目錄 與/proc目錄類似&#xff0c;/sys目錄下的文件/文件夾向用戶提供了一些關于設備、內核模塊、文件系統以及其他內核組件的信息&#xff0c; 如子目錄block中存放了所有的塊設備&#xff1b;子目錄bus中存放了系統中所有的總…

【Win】Motrix+Aria2瀏覽器下載加速

系統安裝Motrix Motrix官網下載&#xff0c;推薦下載NSIS Installer 安裝版 瀏覽器安裝Aria2 下載Aria2插件&#xff0c;然后開發者模式安裝到瀏覽器 Aria2擴展選項的配置如下&#xff1a; 端口號需要改成Motrix的&#xff0c;默認是16800

SpringBoot applicationContext.getBeansOfType獲取某一接口所有實現類,應用于策略模式

本文介紹了如何在Springboot項目中通過ApplicationContext獲取接口的實現類&#xff0c;并通過枚舉策略模式避免if/else&#xff0c;展示了如何使用getBeansOfType獲取TrafficModeService的實現&#xff0c;以及如何在實際場景中應用&#xff0c;如查詢交通方式費用 1 在實際工…

大模型問題:幻覺分類+原因+各個訓練階段產生幻覺+幻覺的檢測和評估基準

1. 什么是幻覺&#xff1f;大模型出現幻覺&#xff0c;簡而言之就是“胡說八道”。 用《A Survey on Hallucination in Large Language Models》1文中的話來講&#xff0c;是指模型生成的內容與現實世界事實或用戶輸入不一致的現象。 研究人員將大模型的幻覺分為事實性幻覺&…

智慧冷庫物聯網解決方案——實現降本增效與風險可控的冷庫管理新范式

一、冷庫管理痛點設備孤島化&#xff1a;冷庫品牌、型號分散&#xff0c;缺乏統一接入標準&#xff0c;數據互通難&#xff0c;依賴人工巡檢&#xff0c;故障響應滯后。能耗黑洞&#xff1a;制冷系統能耗占冷庫總運營成本的60%以上&#xff0c;傳統管理粗放&#xff0c;缺乏動態…

太空生活的八種要素

數代以來&#xff0c;科學家們一直在銀河系中搜尋地外行星存在生命的證據。他們試圖找到一組特定的環境條件與化學物質&#xff0c;在恰當的時間、恰當的地點交匯融合。 通過研究人類、植物、動物及微生物在地球上的生存與繁衍方式&#xff0c;科學家們已識別出生命演化所需的關…

Flutter 小技巧之有趣的 UI 骨架屏框架 skeletonizer

很久沒有更新過小技巧系列&#xff0c;今天簡單介紹一個非常好用的骨架屏框架 skeletonizer &#xff0c;它主要是通過將你現有的布局自動簡化為簡單的骨架&#xff0c;并添加動畫效果來實現加載過程&#xff0c;而使用成本則是簡單的添加一個 Skeletonizer 作為 parent &…

基于SpringBoot的寵物用品系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

MongoDB 分片集群修改管理員密碼

記得關注一下博主&#xff0c;博主每天都會更新IT技術&#xff0c;讓你有意想不到的小收獲哦^_^ 文章目錄*記得關注一下博主&#xff0c;博主每天都會更新IT技術&#xff0c;讓你有意想不到的小收獲哦^_^*一、注釋MongoDB分片集群認證參數&#xff08;三臺主機都要操作&#xf…

C++函數重載與引用詳解

一、函數重載&#xff1a;同名函數的 “差異化生存”?1. 概念定義?函數重載&#xff08;Function Overloading&#xff09;是 C 的重要特性&#xff0c;指在同一作用域內&#xff0c;允許存在多個同名函數&#xff0c;但要求這些函數的參數列表必須不同。&#xff08;參數個數…

2025-08-17 李沐深度學習16——目標檢測

文章目錄1 介紹1.1 實際應用1.2 邊界框1.3 數據集2 錨框2.1 什么是錨框2.2 交并比2.3 分配標簽2.4 非極大值抑制3 經典目標檢測網絡3.1 R-CNN3.1.1 R-CNN (原始版本)3.1.2 Fast R-CNN3.1.3 Faster R-CNN3.1.4 Mask R-CNN3.2 單階段檢測器&#xff1a;SSD 和 YOLO3.2.1 SSD (Sin…

Bluedroid vs NimBLE

&#x1f539; 對比&#xff1a;Bluedroid vs NimBLE 1. 協議棧體積 & 內存占用 Bluedroid&#xff1a;體積大&#xff0c;RAM 占用也大&#xff08;幾十 KB 到上百 KB&#xff09;。NimBLE&#xff1a;輕量級&#xff0c;內存占用大概是 Bluedroid 的一半甚至更少。 &…

(純新手教學)計算機視覺(opencv)實戰八——四種邊緣檢測詳解:Sobel、Scharr、Laplacian、Canny

邊緣檢測詳解&#xff1a;Sobel、Scharr、Laplacian、Canny邊緣檢測是圖像處理和計算機視覺中的重要步驟&#xff0c;主要用于發現圖像中亮度變化劇烈的區域&#xff0c;即物體的輪廓、邊界或紋理特征。OpenCV 提供了多種常用的邊緣檢測算子&#xff0c;本教程將通過四種方法帶…

PyTorch 環境配置

目錄一、安裝 CUDA二、安裝 PyTorch1. 創建虛擬環境2. 安裝 PyTorch三、在 PyCharm 上創建一個 PyTorch 項目參考文章&#xff1a; 【2025年最新PyTorch環境配置保姆級教程&#xff08;附安裝包&#xff09;】 【超詳細 CUDA 安裝與卸載教程&#xff08;圖文教程&#xff09;】…

鴻蒙中冷啟動分析:Launch分析

啟動的分類&#xff08;熱身環節&#xff09; 啟動動類型觸發條件系統開銷 & 速度主要優化方向冷啟動應用進程不存在&#xff08;首次啟動或進程被殺后啟動&#xff09;最高&#xff0c;需創建進程、加載資源、初始化所有組件主要優化目標&#xff0c;減少主線程任務&…

告別盲目排查,PolarDB+DAS Agent智能運維新突破

1.概述 周五下午6點正準備下班&#xff0c;數據庫CPU突然爆滿&#xff0c;業務告警響成一片&#xff0c;DBA卻要手動翻查CPU/內存/負載等多個監控指標&#xff0c;還要查詢是否有新增慢SQL&#xff0c;死鎖等問題&#xff1f;” 這可能是數據庫DBA最鬧心的場景了&#xff0c;…

Linux------《零基礎到聯網:CentOS 7 在 VMware Workstation 中的全流程安裝與 NAT 網絡配置實戰》

&#xff08;一&#xff09;Linux的發行版Centos安裝與配置 下載Linux發行版本Centos:centos-7-isos-x86_64安裝包下載_開源鏡像站-阿里云點擊CentOS-7-x86_64-DVD-2009.torrent &#xff0c;CentOS-7-x86_64-DVD-2009.torrent是官方提供的 BT 種子文件&#xff08;176.1 KB&a…

iOS App 混淆工具實戰,教育培訓類 App 的安全保護方案

隨著在線教育、企業培訓、知識付費平臺的興起&#xff0c;越來越多的 iOS 應用需要保護自己的課程資源和核心邏輯。然而&#xff0c;教育類 App 面臨的最大風險并非傳統的外掛或刷分&#xff0c;而是 視頻盜鏈、題庫數據泄露、源碼邏輯被二次利用。 在這種場景下&#xff0c;合…

RabbitMQ:SpringAMQP Topic Exchange(主題交換機)

目錄一、案例需求二、基礎配置三、代碼實現TopicExchange與DirectExchange類似&#xff0c;區別在于RoutingKey可以是多個單次的列表&#xff0c;并且以.分割。 Queue與Exchange指定BindingKey時可以使用通配符&#xff1a; #&#xff1a;代指0個或多個單詞。*&#xff1a;代…