国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記一次rax應用用戶體驗性能優(yōu)化

這篇具有很好參考價值的文章主要介紹了記一次rax應用用戶體驗性能優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言


對于前端開發(fā)攻城獅們來說,性能優(yōu)化是一個永恒的話題。隨著前端需求復雜度的不斷升高,在項目中想始終保持著良好的性能也逐漸成為了一個有挑戰(zhàn)的事情。本次分享簡述我們在 Rax 項目中常用的一些性能優(yōu)化方式,并將從近期的一個實際業(yè)務需求出發(fā),講述我在 Rax C端應用場景下所遇到性能問題排查時的心路歷程。
本次分享的優(yōu)化內(nèi)容,主要是指用戶滑動屏幕瀏覽頁面過程中所花費的單幀渲染耗時的降低比例。 單幀渲染耗時通過 chrome dev tools 插件以及手淘端app dev tools測得。一般來說瀏覽器運行幀率為 60hz,因此對于幀率要求非常高的場景如內(nèi)容輸入后的響應、動畫等,需要盡可能的將單幀耗時控制在 16.6ms(1s / 60)以內(nèi),用戶才能完全感知不到系統(tǒng)的卡頓。對于一般性能要求沒那么高的應用場景,單幀耗時能達到33.2ms(2s / 60),也能達到一個相對流暢的用戶體驗。
實際業(yè)務現(xiàn)狀
接下來我將從近期參與的一個實際業(yè)務需求出發(fā),記錄下我在這個項目中遇到性能問題時,發(fā)現(xiàn)問題、解決問題的心路歷程。
從實際業(yè)務場景出發(fā),我們發(fā)現(xiàn)不少頁面在用戶滑動瀏覽頁面的過程中存在卡頓,一些情況下卡頓嚴重,非常影響用戶體驗,由于多數(shù)安卓機的渲染性能不如IOS系統(tǒng),安卓端的性能問題會尤其明顯

那么如何優(yōu)化這個性能問題?

在 Rax當前的版本中,rax框架使用同步渲染模式(Synchronous Rendering),也就是說,在處理更新時會阻塞整個 UI 線程,直到所有更新完成才會重新渲染視圖。這種方式雖然簡單易懂,但是在處理大量或復雜數(shù)據(jù)時存在明顯的性能問題,導致應用程序出現(xiàn)卡頓或者無響應等問題。

React18的并發(fā)模式(Concurrent Mode),它可以將渲染任務分解成多個小塊,并通過 React 的調(diào)度器(Scheduler)來優(yōu)化執(zhí)行順序和時間,從而降低了單次渲染所需的計算資源和時間。并發(fā)模式可以在渲染過程中及時響應用戶的輸入和請求,避免出現(xiàn) UI 卡頓或者無響應的情況,從而提高了整個應用的用戶體驗。

目前Rax框架在性能優(yōu)化上雖然不及react18,但仍然有非常好的應用渲染性能基礎,站在了巨人的肩膀上,我們所能做的,便是在不添亂的前提下,幫助Rax更快、更高效的完成遍歷渲染的過程,使更新鏈路盡可能的短的走完。

排查流程

通過安卓手淘掃碼觀察app dev tools的性能分析,每幀普遍在 700ms以上,最嚴重的長達 1847ms

記一次rax應用用戶體驗性能優(yōu)化,ux

觀察發(fā)現(xiàn)最耗時的任務為一個叫appear的函數(shù)執(zhí)行,appear函數(shù)出現(xiàn)在trackerLink組件中,是曝光方法,也就是說,每當一個標簽需要進行曝光,那么當這個元素出現(xiàn)在瀏覽器視口,就會觸發(fā)此appear方法,隨著一次又一次的需求迭代,需要曝光的點越來越多,導致每一次元素重新出現(xiàn)在適口,都會有大量的appear方法調(diào)用,消耗了大量的性能,在安卓系統(tǒng)性能不夠優(yōu)秀的機型上,用戶體驗表現(xiàn)就會卡頓。

記一次rax應用用戶體驗性能優(yōu)化,ux

當我們滑動頁面時,由于大量元素需要進行曝光操作,appear函數(shù)長時間執(zhí)行,對于用戶來講,這段時間界面是卡死且無法交互的。

如果我們把這個例子中的appear函數(shù)類比成Rax的更新過程:即setState觸發(fā)了一次更新,而這次更新耗時非常久,比如1800ms。那么在這1800ms的時間內(nèi)界面是卡死的,用戶無法進行交互,非常影響用戶的使用體驗。

優(yōu)化思路

雪中送炭

擒賊先擒王,首先解決最影響性能的,怎么讓appear方法的執(zhí)行不影響主線程的渲染?

1.接入react18?

成本太高。pass

2.使用requestIdleCallback來控制appear方法的執(zhí)行不影響主線程?

requestIdleCallback 會將任務安排在瀏覽器的空閑時期執(zhí)行。在當前頁面的生命周期內(nèi),也不能保證 requestIdleCallback 中的任務一定會執(zhí)行。如果瀏覽器長時間忙于處理高優(yōu)先級任務,低優(yōu)先級的空閑回調(diào)可能會被推遲,直到有足夠的空閑時間來執(zhí)行它們。如果這種情況一直持續(xù),那么這些任務可能會被無限期地推遲。pass

3.如果任務是關(guān)鍵性的,需要在特定時間內(nèi)一定要執(zhí)行,那么使用 setTimeout可能是更好的選擇。setTimeout這個API提供了更可靠的方式來計劃任務的執(zhí)行,即使它們沒有 requestIdleCallback 提供的執(zhí)行時機那樣靈活。

setTimeout將同步任務變?yōu)楫惒饺蝿?,當需要trackertLink組件需要曝光時,將曝光函數(shù)異步執(zhí)行,不阻塞影響主線程渲染,提高用戶體驗性。

改動TrackerLink組件:

// needAsyncSending控制埋點曝光異步進行,不阻塞主線程
if (needAsyncSending) {
  const sendExpTimer = setTimeout(() => {
    recordExp();
    clearTimeout(sendExpTimer);
  }, 0)
} else {
  recordExp();
}

優(yōu)化后:

記一次rax應用用戶體驗性能優(yōu)化,ux

我們可以看到,當trakcerLink組件異步調(diào)用曝光方法時,每幀渲染時間大幅縮減,效果明顯,每幀最糟糕的情況從1800ms降低至每幀最糟糕的情況200ms左右,

錦上添花

通過異步發(fā)送曝光埋點解決了最大頭的性能問題,用戶滑動頁面時已經(jīng)不會有明顯的延時和滑不動,但是任然有部分頓挫感,由于無法使用react app dev tools工具觀察組件的渲染情況,我們使用console.log來判斷哪些組件一直在重新渲染,發(fā)現(xiàn)在滾動過程中,航班報價列表和報價卡片一直在重新渲染,

記一次rax應用用戶體驗性能優(yōu)化,ux

但是業(yè)務場景下,此種渲染是不必要的,當沒有重新發(fā)起請求時,是不需要一直重新渲染ota報價卡片

避免 State 的不必要更新

一些業(yè)務場景下,不需要一直更新setState,找到不必要的setState,避免這些更新

防止父組件重新渲染重新聲明方法導致子組件不必要的重新渲染

純函數(shù)組件使用 Memo 包裹,純函數(shù)組件的function類型的prop使用useCallback包裹

記一次rax應用用戶體驗性能優(yōu)化,ux?===========>>>>>記一次rax應用用戶體驗性能優(yōu)化,ux

最終優(yōu)化效果:

可以看到最終性能分析得到的數(shù)據(jù)沒有明顯卡頓的地方,很多幀也達到了16.7ms的理想狀態(tài)

記一次rax應用用戶體驗性能優(yōu)化,ux文章來源地址http://www.zghlxwxcb.cn/news/detail-831821.html

到了這里,關(guān)于記一次rax應用用戶體驗性能優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 數(shù)字化時代,如何做好用戶體驗與應用性能管理

    數(shù)字化時代,如何做好用戶體驗與應用性能管理

    隨著數(shù)字化時代的到來,各個行業(yè)的應用系統(tǒng)從傳統(tǒng)私有化部署逐漸轉(zhuǎn)向公有云、行業(yè)云、微服務,這種變遷給運維部門和應用部門均帶來了較大的挑戰(zhàn)?;诋斍捌髽I(yè) IT 運維均為多部門負責,且使用多種運維工具,因此,當業(yè)務出現(xiàn)問題時很難快速定位故障根源。而隨著業(yè)

    2024年02月14日
    瀏覽(16)
  • 數(shù)字化時代,如何做好用戶體驗與應用性能管理?

    數(shù)字化時代,如何做好用戶體驗與應用性能管理?

    隨著數(shù)字化時代的到來,各個行業(yè)的應用系統(tǒng)從傳統(tǒng)私有化部署逐漸轉(zhuǎn)向公有云、行業(yè)云、微服務,這種變遷給運維部門和應用部門均帶來了較大的挑戰(zhàn)?;诋斍捌髽I(yè) IT 運維均為多部門負責,且使用多種運維工具,因此,當業(yè)務出現(xiàn)問題時很難快速定位故障根源。而隨著業(yè)

    2024年02月16日
    瀏覽(20)
  • 性能測試(記一次論壇網(wǎng)站性能測試)

    近期做了一次論壇網(wǎng)站性能測試,記錄下來以便總結(jié)提高,歡迎大家交流分享,若有不妥之處還請指教; 性能要求 1、服務在3000并發(fā)基礎上,關(guān)鍵服務響應時間小于等于300ms 2、系統(tǒng)支持快速擴容,支持更大的并發(fā)Session,例如并發(fā)Session從2000到4000,擴容后關(guān)鍵頁面訪問、關(guān)鍵

    2024年02月11日
    瀏覽(24)
  • 記一次Flink遇到性能瓶頸

    記一次Flink遇到性能瓶頸

    這周的主要時間花在Flink上面,做了一個簡單的從文本文件中讀取數(shù)據(jù),然后存入數(shù)據(jù)庫的例子,能夠正常的實現(xiàn)功能,但是遇到個問題,我有四臺機器,自己搭建了一個standalone的集群,不論我把并行度設置多少,跑起來的耗時都非常接近,實在是百思不得其解。機器多似乎

    2023年04月15日
    瀏覽(26)
  • 記一次 JMeter 壓測 HTTPS 性能問題

    記一次 JMeter 壓測 HTTPS 性能問題

    在使用 JMeter 壓測時,發(fā)現(xiàn)同一后端服務,在單機 500 并發(fā)下,HTTP 和 HTTPS 協(xié)議壓測 RT 差距非常大。同時觀測后端服務各監(jiān)控指標水位都很低,因此懷疑性能瓶頸在 JMeter 施壓客戶端。 切入點:垃圾回收 首先在施壓機觀察到 CPU 使用率和內(nèi)存使用率都很高,詳細看下各線程

    2024年01月21日
    瀏覽(31)
  • 優(yōu)化記錄 -- 記一次搜索引擎(SOLR)優(yōu)化

    優(yōu)化記錄 -- 記一次搜索引擎(SOLR)優(yōu)化

    某服務根據(jù)用戶相關(guān)信息,使用搜索引擎進行數(shù)據(jù)檢索 solr 1臺:32c 64g 數(shù)據(jù)10gb左右,版本 7.5.5 應用服務器1臺:16c 64g 應用程序 3節(jié)點 1、因業(yè)務系統(tǒng)因處理能不足,對業(yè)務系統(tǒng)硬件平臺進行升級,升級變更為 16c64g — 32c64g 增加 16c 2、業(yè)務系統(tǒng)升級,處理能力增加,對原搜索引

    2024年02月05日
    瀏覽(25)
  • 記一次項目內(nèi)存優(yōu)化--內(nèi)存泄漏

    記一次項目內(nèi)存優(yōu)化--內(nèi)存泄漏

    主要是與某個版本作基準進行對比(一般是最新版本的前一個版本作原數(shù)據(jù)),優(yōu)化后,PSS有所下降,線上OOM率減少(Bugly版本對比),泄漏點減少(從捉取一些線上上傳回來的內(nèi)存堆棧信息分析,或本地測試后dump下hprof文件分析)。 了解什么是內(nèi)存泄漏 了解虛擬機中的對象

    2024年02月12日
    瀏覽(33)
  • 記一次 Oracle 下的 SQL 優(yōu)化過程

    記一次 Oracle 下的 SQL 優(yōu)化過程

    事情是這樣的,UAT 環(huán)境的測試小伙伴向我扔來一個小 bug,說是一個放大鏡的查詢很慢,轉(zhuǎn)幾分鐘才出數(shù)據(jù),我立馬上開發(fā)環(huán)境試了一下,很快啊我說??,放大鏡的數(shù)據(jù)立馬就出來了,然后我登錄 UAT 環(huán)境一看,誒是有些慢?? ,于是開始了我的排查之旅... 首先我立馬拿到了

    2024年02月05日
    瀏覽(22)
  • 【PyTorch】記一次卷積神經(jīng)網(wǎng)絡優(yōu)化過程

    【PyTorch】記一次卷積神經(jīng)網(wǎng)絡優(yōu)化過程

    在深度學習的世界中,圖像分類任務是一個經(jīng)典的問題,它涉及到識別給定圖像中的對象類別。CIFAR-10數(shù)據(jù)集是一個常用的基準數(shù)據(jù)集,包含了10個類別的60000張32x32彩色圖像。在上一篇博客中,我們已經(jīng)探討如何使用PyTorch框架創(chuàng)建一個簡單的卷積神經(jīng)網(wǎng)絡(CNN)來對CIFAR-10數(shù)

    2024年01月24日
    瀏覽(24)
  • 記一次生產(chǎn)慢sql索引優(yōu)化及思考

    夜黑風高的某一晚,突然收到一條運營后臺數(shù)據(jù)庫慢sql的報警,耗時竟然達到了60s。 看了一下,還好不是很頻繁,內(nèi)心會更加從容排查問題,應該是特定條件下沒有走到索引導致,如果頻繁出現(xiàn)慢查詢,可能會將數(shù)據(jù)庫連接池打滿,導致數(shù)據(jù)庫不可用,從而導致應用不可用。

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包