国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解ROMA中復雜圖表的渲染實現

開發 前端
ROMA 對外提供echarts標簽,內部依賴提前加載了echarts.js庫的WebView,將圖表數據交給準備好環境的WebView,達到渲染圖表的目的。這里有一個重要的前提就是成功加載了echarts.js 庫的WebView才具備快速渲染各類圖表的能力。

一、背景

ROMA長期負責多種復雜圖表的渲染任務,尤其在京東金融APP中首頁首屏等關鍵位置,對渲染的及時性與穩定性有極高要求。近期業務反饋,在APP頻繁重啟的場景下,首頁圖表偶現渲染失敗的情況。為此,我們系統梳理了圖表的完整渲染流程,并對緩存策略、視圖加載與渲染鏈路進行了整體重構。在保障渲染成功率的基礎上,進一步提升了渲染速度,并新增了異常狀態下的自動重試機制。

二、使用場景分析

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

圖片圖片

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

三、重構分析過程

1. 原理分析

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

為此自定制JRTransEchartsWebView專門用于渲染echarts數據,JRTransEchartsComponent作為標簽實現在承接WebView和JUE環境的數據傳遞和業務邏輯處理。以下類圖展示了各主要類對象之間的相互關系。

圖片圖片

首先打通Native和WebView的數據交互,原生端在創建WebView的時候就向其環境中注入window的message事件監聽,攔截指定類型的事件,獲取從WebView環境中發來的數據。

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];

Native向WebView發送數據通過evaluateJavaScript的方式,向JS環境中輸入數據:

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時就已經建立,Native和WebView的數據交互也通過postMessage的方式建立,如下圖所示:

圖片圖片

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

2. 緩存的設計

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

圖片圖片

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

而對于WebView加載echarts.js資源失敗的情況,也加入了失敗重試的邏輯,當業務端發起數據渲染時會檢查環境狀態,而觸發echarts.js的重新加載。

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

3. 渲染流程

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

圖片圖片

四、效果驗證

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

圖片圖片

五、總結

通過此次圖表的重構,以iPhoneXS Max設備為例,在App冷啟時的首頁首屏渲染圖表數據的時間平均縮短了200ms;冷啟首頁首屏圖表的渲染成功率由之前的平均90%提升至近100%;非首頁首屏的圖表渲染幾乎零延遲;對于異常情況導致的環境初始化失敗的問題,也在接受渲染指令時自檢渲染環境并重啟環境初始化,自動恢復數據的渲染。


責任編輯:武曉燕 來源: 京東技術
相關推薦

2010-02-23 09:02:00

Visual Stud

2012-09-21 09:55:35

WordOffice 2013

2023-11-20 09:55:34

音頻圖表SwiftUI

2017-12-12 08:20:54

圖表視覺暗示可視化

2023-12-05 15:58:06

React開發

2025-10-10 03:00:00

2023-08-01 16:01:59

可視化Seaborn

2009-11-16 14:31:26

原型開發

2009-10-30 09:54:52

Internet接入

2022-05-24 14:37:49

React條件渲染

2022-09-06 07:02:17

棋盤布局CSS

2011-09-09 19:05:28

Widget

2024-01-16 08:05:53

2022-10-08 00:01:00

ssrvuereact

2015-03-18 09:59:14

CSSCSS提高渲染性

2025-04-25 08:50:00

JavaScript代碼開發

2025-04-27 03:44:00

JavaScript代碼函數

2024-10-15 15:18:01

JavaScript開發

2024-10-07 12:23:03

字符串Map對象

2009-11-12 11:30:13

Scrum
點贊
收藏

51CTO技術棧公眾號

激情丁香综合| 国产高清不卡| 午夜精品蜜臀一区二区三区免费 | 亚洲va久久久噜噜噜| 亚洲影视在线播放| 婷婷综合激情| 成年人视频网站在线| 久久久久久九九九九| 欧美日韩国产精选| 秋霞电影一区二区| 亚洲第一二三四区| 久久久久久久久久久免费视频| 久久99精品国产99久久6尤物| 国产蜜臀av在线一区二区三区| 国产厕拍一区| 中文字幕视频在线| 精品国产第一页| 亚洲国产黄色片| 91麻豆国产自产在线观看| 牛牛影视久久网| 日本在线中文电影| 国产传媒一区| 日韩精品在线视频| 国产日韩三级在线| 91亚洲一区| 色呦呦在线资源| 国产69精品久久久久999小说| 欧美黄色www| 日韩欧美中文第一页| 乱码第一页成人| 69堂免费精品视频在线播放| 天天爽人人爽夜夜爽| 91久久久久久久久| 亚洲电影免费观看高清| 久久久亚洲综合| 91亚洲自偷观看高清| 18av在线视频| 欧美精品色婷婷五月综合| 国产精品美女免费视频| 日韩欧美在线一区二区三区| 国产不卡高清在线观看视频| 亚洲精品亚洲人成在线| av在线电影观看| 日本a在线天堂| 97av在线视频免费播放| 91精品午夜视频| 久久精品一区八戒影视| 中文无码久久精品| 三级成人黄色影院| 成人a视频在线| 日韩 欧美 自拍| 国产精品wwwwww| 亚洲国产精品推荐| 亚洲综合在线免费观看| 久久精品久久久精品美女| 性人久久久久| 日韩在线观看www| 无人在线观看的免费高清视频| 国产精品美女诱惑| 欧美激情xxxx| 欧美电影精品一区二区| 18涩涩午夜精品.www| 日本欧美久久久久免费播放网| 欧美黄色录像| 丝袜诱惑一区二区| 午夜视频在线观看韩国| 成熟了的熟妇毛茸茸| 国产一区二区三区高清视频| 欧美—级高清免费播放| 日韩三级电影网址| 亚洲精品国产成人久久av盗摄| 麻豆精品视频在线观看| 日韩欧美三级| 欧美成人xxxx| 免费黄色电影在线观看| gay网站在线| 蜜桃视频一区二区在线观看| 波多野结衣精品久久| 欧美日韩xxx| 日韩av网站在线| 在线观看成人免费视频| 国产精品成人在线观看| 国产一区二区三区在线观看免费视频| 亚洲h色精品| 成人爽a毛片免费啪啪红桃视频| 青春草视频在线| 日本一区高清| 99热在线观看免费| 国产欧美日韩网站| 色噜噜狠狠色综合网| 国产日韩欧美另类| 久久久久久久久国产精品| 亚洲欧美www| 在线综合+亚洲+欧美中文字幕| 亚洲一区在线观看网站| 久久伊人蜜桃av一区二区| 日韩中文字幕麻豆| 国产精品分类| 欧美色图国产精品| 91麻豆精品国产91久久久久推荐资源| 精品众筹模特私拍视频| 亚洲乱亚洲乱妇| 中文字幕一二三区在线观看| 91插插插插插插插插| 成年丰满熟妇午夜免费视频| 精品乱码一区二区三区| 91在线观看免费观看| 日本欧美在线视频| 韩国一区二区电影| 九九热精品在线| 日韩在线视频播放| 亚洲男人第一av网站| 欧美一级久久久| 欧美日韩一级二级| 欧美日韩免费网站| 亚洲国产色一区| ㊣最新国产の精品bt伙计久久| 久久综合九色综合97_久久久| 国产一区二区女| 久久亚洲视频| 免费看的黄色欧美网站| 在线观看污网站| 裸体网站视频| 成人午夜天堂| 国产1区2区视频| 美女xx视频| 污版视频在线观看| 日韩一级理论片| 男女无套免费视频网站动漫| 无码人妻精品一区二区三区在线| 激情小视频网站| 全黄性性激高免费视频| youjizz.com在线观看| 熟女熟妇伦久久影院毛片一区二区| 少妇免费毛片久久久久久久久 | 国产精品久久一区二区三区不卡| 亚洲电影小说图| 中文字幕在线一二| 91在线最新| 在线观看免费观看在线91| 亚洲天堂2017| 第一福利在线| 午夜在线免费观看视频| 香蕉视频国产在线观看| 呦呦在线视频| 瑟瑟视频在线看| 久久av影院| 高清欧美性猛交xxxx黑人猛| 亚洲v天堂v手机在线| 久久精品99久久无色码中文字幕| 一本一道久久a久久精品蜜桃| 在线日韩视频| 日韩中文字幕一区二区三区| 精品制服美女丁香| 91在线丨porny丨国产| 中文字幕一区二区三区精华液 | 日韩资源在线观看| 欧美高清视频在线观看| 欧美一级在线亚洲天堂| 国产九九精品视频| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 中文字幕在线免费专区| 日韩欧美亚洲系列| 国产激情视频在线| 免费在线国产视频| 免费在线成人激情电影| 伊人www22综合色| 日韩av久操| 老司机亚洲精品| 91蜜桃网址入口| 亚洲国产精品影院| 欧美一区二区三区在| 亚洲美女激情视频| 美女福利精品视频| 国产精品香蕉国产| 久久久久成人精品免费播放动漫| youjizz.com亚洲| 永久免费的av网站| 成人影视在线播放| 午夜欧美激情| 蜜桃一区av| 精品电影一区| 成人一区二区视频| 亚洲一区二区偷拍精品| 日韩一区二区影院| 色综合久久久888| 精品国产乱码久久久久久久 | 韩国久久久久| 香蕉久久夜色精品国产| 国产福利一区二区三区视频在线 | 天涯成人国产亚洲精品一区av| 欧美午夜片在线观看| 国产丝袜一区视频在线观看| 国产乱码精品一区二区三区四区| 久久久久久久999| 国产99久久久久久免费看农村| 2020国产精品久久精品美国| 欧美日韩一区免费| 亚洲视频在线视频| 国产精品爱久久久久久久|