日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解ROMA中復(fù)雜圖表的渲染實現(xiàn)

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2025-10-21 13:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、背景

ROMA承接很多復(fù)雜圖表的渲染需求,在京東金融APP內(nèi),特別是首頁首屏的圖表,對圖表渲染的及時性要求很高。近期業(yè)務(wù)反饋頻繁重啟時,首頁的黃金走勢圖偶現(xiàn)渲染不出的問題,通過梳理圖表的渲染流程,對緩存策略、視圖加載和渲染過程進(jìn)行了重構(gòu),確保渲染成功率,提升了渲染速度以及補(bǔ)充了異常重試的功能。

二、使用場景分析

京東金融App內(nèi)有很多使用復(fù)雜圖表的業(yè)務(wù)場景,以下截取部分場景。下圖分別是黃金歷史金價的走勢圖、用戶購買的基金的收益走勢圖、小金庫的收益柱狀圖、用戶投資診斷的雷達(dá)圖、省錢賬單和AI助手賬單趨勢柱狀圖。

wKgZPGj3IMGAQ5tLAAQZOteqvo0650.png

可見,金融App內(nèi)圖表的使用具備種類豐富、數(shù)據(jù)信息量大,定制程度高、交互頻繁等特點,經(jīng)調(diào)研發(fā)現(xiàn),Apache ECharts 是一個基于 JavaScript 的功能強(qiáng)大的開源可視化圖表庫,被廣泛應(yīng)用于數(shù)據(jù)分析、監(jiān)控系統(tǒng)、報表工具等領(lǐng)域。并且支持定制支持的圖表類型,可降低圖標(biāo)庫的體積和提升圖標(biāo)庫的加載速度。由于原生端并沒有類似的圖表庫,因次決定在 ROMA 中引入 ECharts 來承接復(fù)雜圖表的顯示需求 。

三、重構(gòu)過程分析

1、原理分析

ROMA 對外提供 echarts 標(biāo)簽,內(nèi)部依賴提前加載了 echarts.js 庫的 WebView,將圖表數(shù)據(jù)交給準(zhǔn)備好環(huán)境的 webveiw,達(dá)到渲染圖表的目的。這里有一個重要的前提就是成功加載了echarts.js 庫的 WebView 才具備快速渲染各類圖表的能力。并且需要提前打通 ROMA 與 Native,Native 與 WebView 之間的數(shù)據(jù)通訊,保證數(shù)據(jù)在三端之間的順暢流轉(zhuǎn)。

為此自定制了 JRTransEchartsWebView 專門用于渲染 echarts 數(shù)據(jù),JRTransEchartsComponent 作為標(biāo)簽實現(xiàn)在承接 webview 和 jue 環(huán)境的數(shù)據(jù)傳遞和業(yè)務(wù)邏輯處理。以下類圖展示了各主要類對象之間的相互關(guān)系。

wKgZO2j3IMGAJ7lAAAJipjadxGE594.jpg

首先打通 Native 和 WebView 的數(shù)據(jù)交互,原生端在創(chuàng)建 WebView 的時候就向其環(huán)境中注入 window 的 message 事件監(jiān)聽,攔截指定類型的事件,獲取從 WebView 環(huán)境中發(fā)來的數(shù)據(jù)。

NSString *jsStrring = @"window.addEventListener('message', (e) => { 
                        var customDict = {'function':'jdttransWindowEventDispatch', 
                                          'careParamDict':{'data': e.data, 'origin': e.origin}}; 
                        window.webkit.messageHandlers.JDTTransEchartsHandler.postMessage(customDict);})";
NSString *jscode = [NSString stringWithFormat:jsStrring];
WKUserScript *script = [[WKUserScript alloc]initWithSource:jscode injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
[webView.configuration.userContentController addUserScript:script];

Native 向 WebView 發(fā)送數(shù)據(jù)通過 evaluateJavaScript 的方式,向JS環(huán)境中輸入數(shù)據(jù):

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:@{@"type":@"message"}]; 
[dict jdd_setObjectCheck:message forKey:@"data"]; 
[dict jdd_setObjectCheck:@"*" forKey:@"origin"]; 
NSString *dictString = [dict jdd_JSONString]; 
NSString *jsString = [NSString stringWithFormat:@"javascript:(function (){ 
                                                  var event = new MessageEvent('message', %@); 
                                                  window.dispatchEvent(event);})()",dictString]; 
[webView evaluateJavaScript:jsString completionHandler:nil];

JUE 和 Native 之間的通訊通道在初始化 ROMA 的 SDK 時就已經(jīng)建立,Native 和 webview 的數(shù)據(jù)交互也通過 postMessage 的方式建立,如下圖所示:

wKgZPGj3IMKAUtK_AABqBd-ss88690.jpg

以上,JUE 通過調(diào)用 call native 將數(shù)據(jù)發(fā)送到 Native,Native 通過 window.dispatchEvent 的方式將數(shù)據(jù)傳遞給 WebView。而圖表上的手勢交互等事件 WebView 通過 postMessage 的方式發(fā)送,在 Native 監(jiān)聽指定類型的 message 獲取數(shù)據(jù),通過處理并通過 fire event 觸發(fā)到 JUE。

2、緩存的設(shè)計

對于 echarts 渲染圖表數(shù)據(jù),大致經(jīng)歷以下過程,創(chuàng)建 webview,加載 echarts.js 渲染庫,資源開始加載 ,資源成功加載,最后渲染圖表數(shù)據(jù),這幾個過程中,除了最后一步渲染數(shù)據(jù),前面的步驟都可以提前做,越早完成前面的工作,越能提升圖表渲染的效率。

wKgZO2j3IMOAfj05AAA7HIKfmzY261.jpg

為此,設(shè)計了可重復(fù)利用的并可自動擴(kuò)容的 WebView 緩存容器 JRTransEchartsCache。在App啟動階段緩存 min 個 WebView 保存至緩存列表 cacheArray 中,并持續(xù)跟蹤 WebView 加載 echarts.js 的階段,確保在成功加載了 echarts.js 資源后再開始渲染圖表數(shù)據(jù)。而對于過早的圖表渲染指令,則先保存至指定標(biāo)簽的指令緩存列表 eventArray 中,待成功加載后,再渲染 eventArray 中的數(shù)據(jù)。

而對于 WebView 加載 echarts.js 資源失敗的情況,也加入了失敗重試的邏輯,當(dāng)業(yè)務(wù)端發(fā)起數(shù)據(jù)渲染時會檢查環(huán)境狀態(tài),而觸發(fā) echarts.js 的重新加載。

隨著 WebView 使用,其狀態(tài)被標(biāo)記為 using,并根據(jù)使用的情況,自動觸發(fā) cacheArray 中的 WebView 擴(kuò)容,最大擴(kuò)容至 max 個。對于從詳情頁返回而釋放的圖表,其 WebView 將會被標(biāo)記為 free ,可提供為其他的圖表視圖使用。 當(dāng)使用圖表的業(yè)務(wù)持續(xù)增多,當(dāng) cacheArray 中的 WebView 都被使用后,則新創(chuàng)建的 WebView 不再加入 cacheArray,遵循當(dāng)次獲取,當(dāng)次創(chuàng)建,使用完成,就地銷毀的原則。

3、渲染流程

下圖記錄了從 App 啟動到業(yè)務(wù)創(chuàng)建 echarts 圖表,到業(yè)務(wù)退出,到 App 退出期間,融合了緩存的初始化以及自動擴(kuò)容,包括在 webview 加載 echarts.js 資源的不同階段對渲染指令的處理,以及視圖銷毀后的內(nèi)存處理等場景下的處理流程。

wKgZO2j3IMOAM9ZUAAMT5-fZGd0681.jpg

四、效果驗證

為了更直觀的展示圖表在業(yè)務(wù)上的使用場景,使用重構(gòu)后的圖表標(biāo)簽渲染柱狀圖、條形圖、折線圖、餅圖和組合圖表,渲染的效果和操作都很流暢(由于文檔的限制,對以下視頻做了降頻和清晰度的處理),效果如下:

wKgZPGj3IMqAcuXCAJXxyyZNU14523.gif

五、總結(jié)

通過此次圖表的重構(gòu),在App冷啟時,以 iPhoneXS Max 設(shè)備為例,首頁首屏渲染圖表數(shù)據(jù)的時間平均縮短了200ms;冷啟首頁首屏圖表的渲染成功率,由之前的平均90%提升至接近100%;非首頁首屏的圖表渲染幾乎零延遲;對于異常情況導(dǎo)致的環(huán)境初始化失敗的問題,也在接受渲染指令時自檢渲染環(huán)境并重啟環(huán)境初始化,自動恢復(fù)數(shù)據(jù)的渲染。如果你也對圖表渲染或者對跨端框架 ROMA 感興趣,可留言交流。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 渲染
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    11406
  • 京東
    +關(guān)注

    關(guān)注

    2

    文章

    1130

    瀏覽量

    50142
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    FBX/glTF 模型渲染與動畫技術(shù)解析 | 圖撲 HT 框架

    Web 3D 可視化開發(fā),模型動畫、材質(zhì)質(zhì)感、渲染擴(kuò)展性是提升產(chǎn)品體驗的關(guān)鍵,但其底層邏輯復(fù)雜,如骨骼蒙皮、光照計算,導(dǎo)致開發(fā)門檻高、效率低。圖撲軟件自研 HT for Web(簡稱 HT)高性能
    的頭像 發(fā)表于 04-21 11:31 ?84次閱讀
    FBX/glTF 模型<b class='flag-5'>渲染</b>與動畫技術(shù)解析 | 圖撲 HT 框架

    【CANopen實戰(zhàn)】如何實現(xiàn)PDO數(shù)據(jù)變化即刻發(fā)送(事件觸發(fā)模式詳解

    【CANopen實戰(zhàn)】如何實現(xiàn)PDO數(shù)據(jù)變化即刻發(fā)送(事件觸發(fā)模式詳解
    的頭像 發(fā)表于 04-09 14:39 ?202次閱讀
    【CANopen實戰(zhàn)】如何<b class='flag-5'>實現(xiàn)</b>PDO數(shù)據(jù)變化即刻發(fā)送(事件觸發(fā)模式<b class='flag-5'>詳解</b>)

    超大復(fù)雜場景優(yōu)化和渲染加速:12個實操技巧

    無論是在創(chuàng)建開放世界、茂密的森林還是擁擠的城市,平衡視覺細(xì)節(jié)與渲染性能始終是3D藝術(shù)家的核心挑戰(zhàn)。為了實現(xiàn)快速且穩(wěn)定的渲染輸出,以下是優(yōu)化大型3D場景的12個實戰(zhàn)技巧。1.早期遮擋(BlockOut
    的頭像 發(fā)表于 03-27 15:01 ?119次閱讀
    超大<b class='flag-5'>復(fù)雜</b>場景優(yōu)化和<b class='flag-5'>渲染</b>加速:12個實操技巧

    如何在單個圖表上繪制多個測量結(jié)果曲線

    多個設(shè)備的數(shù)據(jù)集繪制在同一個圖表上。1在導(dǎo)航器(Navigator)的“序列前步驟(Pre-SequenceSteps)”,勾選“設(shè)備ID提示(DeviceID
    的頭像 發(fā)表于 02-11 09:02 ?262次閱讀
    如何在單個<b class='flag-5'>圖表</b>上繪制多個測量結(jié)果曲線

    室內(nèi)外融合定位技術(shù)從核心架構(gòu)、技術(shù)原理到部署實施流程等詳解(三)

    本文詳解室內(nèi)外融合定位技術(shù)的工業(yè)級部署流程,涵蓋方案設(shè)計、設(shè)備安裝、調(diào)試優(yōu)化至驗收交付四大階段。針對化工、礦山等高危場景,結(jié)合北斗RTK與UWB技術(shù),實現(xiàn)厘米級高精度、無縫連續(xù)定位,解決復(fù)雜環(huán)境
    的頭像 發(fā)表于 12-27 16:31 ?425次閱讀

    工業(yè)智能制造,如何精準(zhǔn)測量復(fù)雜曲面?

    三坐標(biāo)測量機(jī)搭載CP500S掃描測頭,可實現(xiàn)平面、直線、圓、圓柱、圓錐、曲線、曲面等基本元素的高效掃描測量;配合PowerDMIS三坐標(biāo)測量軟件實現(xiàn)連續(xù)動態(tài)采集,可實現(xiàn)貼著表面掃描,實時捕捉曲面
    發(fā)表于 11-14 11:10

    復(fù)雜的軟件算法硬件IP核的實現(xiàn)

    轉(zhuǎn)移到硬件完成(起到類是圖像處理的顯卡 的作用),從而實現(xiàn)應(yīng)用處理的加速。 圖 1.2 ASP Mode 2.C to Hardware 工作流程 CHC 編譯器將 C 語言
    發(fā)表于 10-30 07:02

    【M-K1HSE開發(fā)板免費體驗】相關(guān)源碼之閱讀和分析1-使用XComponent + Vsync 實現(xiàn)自定義動畫

    ES 圖形接口的能力,繞過上層 UI 框架(如 ArkUI),實現(xiàn)高性能圖形渲染(如 3D 圖形、特效、游戲等)。 脫離 UI 主線程: 圖形渲染在獨立線程執(zhí)行,與 UI 主線程解
    發(fā)表于 09-03 16:05

    從 CPU 到 GPU,渲染技術(shù)如何重塑游戲、影視與設(shè)計?

    渲染技術(shù)是計算機(jī)圖形學(xué)的核心內(nèi)容之一,它是將三維場景轉(zhuǎn)換為二維圖像的過程。渲染技術(shù)一直在不斷演進(jìn),從最初的CPU渲染到后來的GPU渲染,性能和質(zhì)量都有了顯著提升。從CPU到GPU:技術(shù)
    的頭像 發(fā)表于 09-01 12:16 ?1159次閱讀
    從 CPU 到 GPU,<b class='flag-5'>渲染</b>技術(shù)如何重塑游戲、影視與設(shè)計?

    知乎開源“智能預(yù)渲染框架” 幾行代碼實現(xiàn)鴻蒙應(yīng)用頁面“秒開”

    ,交互延遲等核心痛點,通過智能預(yù)測用戶瀏覽目標(biāo)進(jìn)行提前渲染,只需幾行代碼即可顯著提升復(fù)雜頁面的加載性能,實現(xiàn)“頁面秒開”的高效體驗,為鴻蒙開發(fā)者帶來開發(fā)效率和用戶體驗的雙重飛躍。 隨著鴻蒙生態(tài)快速發(fā)展,應(yīng)用開發(fā)者難免會遇到一些性
    的頭像 發(fā)表于 08-29 14:32 ?728次閱讀
    知乎開源“智能預(yù)<b class='flag-5'>渲染</b>框架” 幾行代碼<b class='flag-5'>實現(xiàn)</b>鴻蒙應(yīng)用頁面“秒開”

    復(fù)雜裝備研發(fā)設(shè)計利用數(shù)據(jù)實現(xiàn)大規(guī)模個性化定制

    復(fù)雜裝備研發(fā)設(shè)計,利用數(shù)據(jù)實現(xiàn)大規(guī)模個性化定制已成為提升企業(yè)競爭力、滿足多樣化市場需求的關(guān)鍵路徑。其核心在于通過數(shù)據(jù)驅(qū)動的個性化需求識別、模塊化設(shè)計、柔性生產(chǎn)、智能決策及閉環(huán)反饋,實現(xiàn)
    的頭像 發(fā)表于 08-06 17:17 ?883次閱讀

    通道渲染:釋放渲染的全部潛能!通道渲染的作用、類型、技巧

    在3D圖形創(chuàng)作渲染通道(RenderPasses)是一項至關(guān)重要的技術(shù),它通過將復(fù)雜渲染圖像拆分為多個圖層,如陰影、光照、法線等,使藝術(shù)家能夠在后期制作
    的頭像 發(fā)表于 07-15 14:22 ?897次閱讀
    通道<b class='flag-5'>渲染</b>:釋放<b class='flag-5'>渲染</b>的全部潛能!通道<b class='flag-5'>渲染</b>的作用、類型、技巧

    飛書開源“RTV”富文本組件 重塑鴻蒙應(yīng)用富文本渲染體驗

    更高效的富文本解決方案。 富文本作為內(nèi)容展示和信息交互的重要形式,在內(nèi)容創(chuàng)作、辦公協(xié)作、教育學(xué)習(xí)、企業(yè)應(yīng)用等多種復(fù)雜業(yè)務(wù)場景扮演著重要角色。隨著鴻蒙生態(tài)應(yīng)用類型的不斷豐富,富文本渲染成為各類應(yīng)用開發(fā)過程
    的頭像 發(fā)表于 07-11 15:20 ?803次閱讀
    飛書開源“RTV”富文本組件 重塑鴻蒙應(yīng)用富文本<b class='flag-5'>渲染</b>體驗

    HarmonyOS NEXT應(yīng)用元服務(wù)布局優(yōu)化合理使用渲染控制語法

    控制的是元素在布局階段是否參與布局渲染。使用時如果使用的方式不當(dāng),將引起性能上的問題。 對于不同的場景下,需要選擇合適的手段,根據(jù)性能或者內(nèi)存要求選擇不同的實現(xiàn)方式: 只有初始的一次渲染或者交互次數(shù)
    發(fā)表于 06-24 16:21

    【HarmonyOS 5】鴻蒙的UIAbility詳解(三)

    【HarmonyOS 5】鴻蒙的UIAbility詳解(三) ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財# 一、前言 本文是鴻蒙的UIAbility
    的頭像 發(fā)表于 06-14 22:32 ?896次閱讀
    砀山县| 靖州| 利川市| 彝良县| 浪卡子县| 连江县| 大城县| 石棉县| 鄄城县| 巴青县| 青浦区| 海南省| 舒城县| 墨竹工卡县| 珲春市| 施甸县| 景宁| 襄汾县| 修武县| 安顺市| 墨玉县| 招远市| 额济纳旗| 寿光市| 宁化县| 南陵县| 永仁县| 轮台县| 屯门区| 会泽县| 陕西省| 罗田县| 峡江县| 临朐县| 崇明县| 永宁县| 九台市| 项城市| 赤水市| 通化县| 丰顺县|