在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

鴻蒙跨端實踐-長列表解決方案和性能優(yōu)化

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-09-23 15:26 ? 次閱讀

這是我參加創(chuàng)作者計劃的第一篇文章。

前言

長列表是前端和客戶端應(yīng)用中最常見的業(yè)務(wù)場景,比如商品瀑布流等,有成千上萬條數(shù)據(jù),因此長列表的渲染性能在iOSAndroidHarmony,Web等各大平臺都非常重要。HarmonyOS和iOS類似也提供了自己的解決方案。Roma(羅碼)作為跨端平臺,在此基礎(chǔ)上進行了具體的實踐。在實踐過程中,遇到了各種問題和挑戰(zhàn),經(jīng)歷了ArkTS+C++架構(gòu)向純C++架構(gòu)的轉(zhuǎn)變,本文將圍繞實踐中的各種問題和挑戰(zhàn),探討Roma的具體解決方案和優(yōu)化思路。

一、鴻蒙長列表解決方案及原理

鴻蒙系統(tǒng)為List,WaterFlow,Grid等容器組件的數(shù)據(jù)加載和渲染提供了一次性加載方案(ForEach)和按需加載方案(LazyForEach)兩種方式。

1. 一次性加載方案(ForEach)

?ForEach:一次性加載全量數(shù)據(jù)并循環(huán)渲染。原理如下:

wKgZombxGB6ABSp1AAFjOcKituY611.png

(圖片來自鴻蒙官網(wǎng))

缺點:

1) 因為要一次性加載所有的列表數(shù)據(jù),創(chuàng)建所有組件節(jié)點并完成組件樹的構(gòu)建,在數(shù)據(jù)量大時會非常耗時,從而導(dǎo)致頁面加載渲染時間過長

2) 屏幕可視區(qū)外的組件雖然不會顯示在屏幕上,但是仍然會占用內(nèi)存。在系統(tǒng)處于高負載的情況下,更容易出現(xiàn)性能問題,極限情況下甚至?xí)?dǎo)致應(yīng)用異常退出。

實際業(yè)務(wù)中數(shù)據(jù)條數(shù)非常多,該方案存在很嚴重的性能問題。為了解決這個性能問題,HarmonyOS提供了性能更好的解決方案

2. 按需加載方案(LazyForEach)

?LazyForEach: 實現(xiàn)延遲加載數(shù)據(jù)并按需渲染。原理如下:

1) 根據(jù)屏幕可視區(qū)能夠容納顯示的組件數(shù)量按需加載數(shù)據(jù)。

2) 根據(jù)加載的數(shù)據(jù)量創(chuàng)建組件,掛載在組件樹上,屏幕可以展示多少列表項組件,就按需創(chuàng)建多少個ListItem組件節(jié)點掛載在List組件樹根節(jié)點上。

3) 當(dāng)組件滑出可視區(qū)域外時,框架會進行組件銷毀以降低內(nèi)存占用;當(dāng)組件滑入可視區(qū)域時,需要從頭完成數(shù)據(jù)加載、組件創(chuàng)建、掛載組件樹這一過程,直至渲染到屏幕上。

wKgaombxGCGAH0QmAAFAgYb_Lqw228.png

(圖片來自鴻蒙官網(wǎng))

LazyForEach實現(xiàn)了按需加載,針對列表數(shù)據(jù)量大、列表組件復(fù)雜的場景,減少了頁面首次啟動時一次性加載數(shù)據(jù)的時間消耗,減少了內(nèi)存峰值。可以顯著提升頁面的能效比和用戶體驗。提升性能,HarmonyOS又給出了兩種優(yōu)化手段:緩存列表項(CacheCount)+組件復(fù)用(@Reusable)。

2.1 緩存列表項CacheCount

如果只有懶加載,滑動速度過快時,則會導(dǎo)致數(shù)據(jù)來不及加載而出現(xiàn)“白塊現(xiàn)象”。為了解決這一問題,LazyForEach懶加載可以通過設(shè)置cachedCount屬性來指定緩存數(shù)量。在設(shè)置cachedCount后,除屏幕內(nèi)顯示的ListItem組件外,還會預(yù)先將屏幕可視區(qū)外指定數(shù)量的列表項數(shù)據(jù)緩存起來。這樣當(dāng)緩存列表項需要從屏幕可視區(qū)外進入可視區(qū)內(nèi)時,只用創(chuàng)建、渲染組件即可,相比不設(shè)置cachedCount提升了顯示效率。(cacheCount具體設(shè)置多少,這里依然不詳細展開,詳見后續(xù)文章。)

原理如下:

wKgZombxGCKAQ270AAE0xU-FYYU215.png

(圖片來自鴻蒙官網(wǎng))

2.2 組件復(fù)用@Reusable

由上文可知LazyForEach+cacheCount方案中,當(dāng)組件滑出可視區(qū)域外時,框架會進行組件銷毀以降低內(nèi)存占用;當(dāng)組件滑入可視區(qū)域時,需要從頭完成組件創(chuàng)建、掛載組件樹這一過程,直至渲染到屏幕上。而且列表頁面很多列表項的UI樣式完全相同,只有數(shù)據(jù)上的差異,如果能組件復(fù)用,就能節(jié)省組件創(chuàng)建的時間,因此就可以進一步提高列表頁面的加載速度和響應(yīng)速度。

框架為我們提供了組件復(fù)用的能力,機制如下:

1)標(biāo)記為@Reusable的組件從組件樹上被移除時,組件和其對應(yīng)的JSView對象都會被放入復(fù)用緩存中,復(fù)用緩存可以通過reuseId標(biāo)記為不同的緩存池。

2)當(dāng)列表滑動新的ListItem將要被顯示,List組件樹上需要新建節(jié)點時,將會從相應(yīng)的復(fù)用緩存池中查找可復(fù)用的組件節(jié)點。

3)找到可復(fù)用節(jié)點并對其進行更新后添加到組件樹中。從而節(jié)省了組件節(jié)點和JSView對象的創(chuàng)建時間。

wKgaombxGCOAUUnKAAFe0mqXki4701.png

(圖片來自鴻蒙官網(wǎng))


二、動態(tài)化的長列表解決方案

結(jié)合上文HarmonyOS提供的解決方案,開始考慮動態(tài)化的長列表方案。通過前面鴻蒙跨端方案介紹文章,我們知道,跨平臺框架的核心原理是通過JavaScript在JS引擎上執(zhí)行時,對虛擬DOM進行操作,通過橋接或JSI與原生端進行通信,同時通過組件抽象,這些組件在不同平臺上映射到相應(yīng)的原生組件。運行時我們會有相應(yīng)的節(jié)點樹:JS虛擬DOM節(jié)點樹->原生端組件節(jié)點樹->原生端渲染節(jié)點樹。長列表的渲染同樣會涉及這三棵樹,并且過程比較復(fù)雜。

1. 移植iOS、Android方案到鴻蒙

1.1 其他兩端的方案原理

?緩存池大小設(shè)置為最大N頁,每個方向N/2頁(這里的N和摩擦系數(shù)等因素有關(guān),這里暫時不詳細展開,后面有機會專門寫文章分享)

?當(dāng)組件滑出緩存區(qū)域外時,操作虛擬DOM樹刪除列表項節(jié)點,同時通過bridge在原生端進行相應(yīng)列表項組件的銷毀以降低內(nèi)存占用;當(dāng)組件滑入緩存區(qū)域時,操作虛擬DOM樹添加列表項節(jié)點,同時通過bridge在原生端進行相應(yīng)列表項組件的添加,這里從虛擬DOM節(jié)點到原生端的組件,都需要從頭完成組件創(chuàng)建、掛載組件樹這一過程,直至渲染到屏幕上。

?原生端列表的reuseId是一個不會重復(fù)的唯一值

wKgZombxGCiAe0D7AA_8pu0GXX8174.png

該方案已經(jīng)被京東金融業(yè)務(wù)100+頁面使用,在復(fù)雜的列表頁面性能表現(xiàn)也非常好。優(yōu)點也是顯而易見,由于跨端的核心原理決定了我們必須操作VDOM節(jié)點樹和組件樹,過程中涉及JS線程和UI線程的頻繁通信,最終行為是否一致,是否能達到我們想要的結(jié)果,這個過程涉及的細節(jié)非常多,因此一個簡單的邏輯是保證正確性的比較好的手段。這當(dāng)然也得益于iOS和Android系統(tǒng)本身性能的優(yōu)越。從上文可知我們其實無論在VDOM節(jié)點樹中,還是原生端組件樹中,新的VDOM節(jié)點/列表項組件創(chuàng)建或刪除的時候,都沒有復(fù)用節(jié)點或者利用系統(tǒng)本身的組件復(fù)用的能力,只有新創(chuàng)建和真刪除,這種邏輯就非常簡單明了,不容易產(chǎn)生bug。但是從頭創(chuàng)建的過程會依賴系統(tǒng)本身的性能。

1.2 移植后存在的問題

然而,當(dāng)我們把同樣的方案移植到HarmonyOS上之后,使用ArkUI框架開發(fā),發(fā)現(xiàn)肉眼可見的卡頓,抖動等掉幀現(xiàn)象非常嚴重,因此我們開始排查原因。并與iOS和Android系統(tǒng)進行對比分析,經(jīng)過分析我們發(fā)現(xiàn)主要存在以下3個問題:

?UI層級過多。在ArkUI框架實現(xiàn)下,自定義組件本身必須增加一個包裹的容器,比如一個類似RomaDiv這樣的業(yè)務(wù)里最常使用的,數(shù)量最多的自定義容器組件,里面必須有個類似Stack/Flex這樣的容器組件才合法,因此這個組件本身就已經(jīng)是兩層了,比其他系統(tǒng)就多了一層。另外有些容器組件還有系統(tǒng)本身生成的類似__common__ 這種層級,也會導(dǎo)致層級變多。層級過多,每次創(chuàng)建,渲染過程中的計算就更多,耗時自然就更長。

?跨語言通信鏈路長。原生組件的UI是基于ArkUI實現(xiàn)的,運行在方舟虛擬機中。JS代碼運行在系統(tǒng)的JSVM中,在C++端,兩種語言通過系統(tǒng)提供的NAPI通信,其中涉及各種數(shù)據(jù)類型轉(zhuǎn)換,成本自然比其他系統(tǒng)要高。尤其在UI層級多的情況下,成本就更高了。

?系統(tǒng)二次布局的問題。動態(tài)化系統(tǒng)架構(gòu)中有三個核心線程:UI主線程,JS線程和布局計算的線程。布局方案采用的是yoga布局,可以高效地進行組件的大小,位置的計算。但是系統(tǒng)在此布局之后還會重新進行布局一次,這個開銷就完全沒有必要,但是卻增加了耗時,影響了性能。

針對這幾個問題,經(jīng)過和華為專家溝通以后,建議我們直接使用C-API開發(fā),但是經(jīng)過深入開發(fā)和溝通之后,發(fā)現(xiàn)C-API目前尚有功能欠缺,而且文檔不完善,不能滿足我們當(dāng)下的所有需求,因此我們決定支持ArkTS版本和C-API版本兩個版本,Q3先上線ArkTS版本,同時開發(fā)完CAPI版本,待華為進一步完善C-API后,Q4上線。


2. ArkTS版本解決方案

在已經(jīng)存在以上問題的前提下,我們需要盡可能的提高列表性能,創(chuàng)建慢的問題,首先考慮到的就是reuse的思路。

2.1 ArkTS方案原理

?原生端UI完全依賴系統(tǒng)提供的懶加載LazyForEach+緩存列表項CacheCount+組件復(fù)用@Reusable,其中復(fù)用的reuseId設(shè)置為具體緩存池的類別。

?虛擬DOM節(jié)點的創(chuàng)建,復(fù)用,回收和銷毀的時機完全與原生端UI相對應(yīng)的時機同步。由于ArkUI是聲明式語法,因此整個過程是先由原生端觸發(fā)UI占位,然后在對應(yīng)的生命周期上相應(yīng)的操作VDOM,再通過JSI&NAPI與原生端通信,更新原生端組件。


wKgaombxGCqAbym-AAmey3Jvn3U853.png


這個方案是真正做到了reuse/recycle的長列表,做到了比較絲滑的體驗。但是由于有了recycle/reuse的過程,也增加了更多的復(fù)雜性,有很多細節(jié)需要處理。

2.2 重點優(yōu)化點

1)更新數(shù)據(jù)后UI“閃”的問題 - 不要改變鍵值key + @ObjectLink + @Observed

這個問題的根本原因是lazyForEach的迭代器key generator的鍵值key發(fā)生了變化。如果鍵值key發(fā)生了變化,框架會將這個變化的組件整體先回收,然后再重新創(chuàng)建。經(jīng)歷這一個過程就會出現(xiàn)“閃”的問題。

而且,改變鍵值key去刷新UI的方式代價很大,同一類別的列表項的結(jié)構(gòu)非常類似,只是顯示的文本和圖片等不一樣,不變化的組件不需要重新創(chuàng)建,只需要更新變化的部分即可。這種情況框架提供了裝飾器@Observed和@ObjectLink,可以監(jiān)聽變化的部進行局部更新。同時,復(fù)雜列表情況下,數(shù)據(jù)源大多都是多層嵌套的對象結(jié)構(gòu),建議使用@ObjectLink而不要用@Prop,因為@Prop會進行深拷貝,會增加創(chuàng)建時間及內(nèi)存的消耗,開銷較大,而@ObjectLink指向數(shù)據(jù)源的指針,雙向同步數(shù)據(jù),因此這種情況下性能更優(yōu)。

2)刷新/更新數(shù)據(jù)后,數(shù)據(jù)先展示其他的數(shù)據(jù)然后快速再刷成最終結(jié)果

?不要更新(可見+cacheCount)范圍內(nèi)的組件的鍵值key,此范圍外的部分改變鍵值key

?手動調(diào)用列表組件的方法只更新(可見+cacheCount)范圍內(nèi)的組件和對應(yīng)的VDOM節(jié)點

首先產(chǎn)生這個問題的原因還是由于key發(fā)生了變化,每次重新創(chuàng)建的時候,如果當(dāng)前類型的緩存池有數(shù)據(jù),就從緩存池取出復(fù)用,然后再更新變化的部分。這個從緩存池取出的組件仍然帶有原來的數(shù)據(jù)信息,因此我們會看到先展示其他數(shù)據(jù)然后再被刷成最終結(jié)果。為了避免這個現(xiàn)象,首先還是不要改變key。在UI上就是已經(jīng)渲染了的那些組件,也即可視加上cacheCount范圍內(nèi)的組件。同時對此范圍內(nèi)的組件手動調(diào)用組件的更新方法,更新組件,這時JS引擎會對這個節(jié)點進行diff,把變化的部分通過JSI與原生端通信,原生端完成最終UI的更新。范圍外的部分就按需更新key和數(shù)據(jù)源。


3)有些列表滑動過程中仍有卡頓現(xiàn)象

?沒有正確使用組件復(fù)用 - 使用了組件復(fù)用,實際上是無效的復(fù)用,reuseId設(shè)置一定要正確,且必須為字符串類型

復(fù)用類型 描述 復(fù)用思路
標(biāo)準(zhǔn)型 復(fù)用組件之間布局完全相同 標(biāo)準(zhǔn)復(fù)用
有限變化型 復(fù)用組件之間有不同,但是類型有限 使用reuseId或者獨立成兩個自定義組件
組合型 復(fù)用組件之間有不同,情況非常多,但是擁有共同的子組件 將復(fù)用組件改為Builder,讓內(nèi)部子組件相互之間復(fù)用
全局型 組件可在不同的父組件中復(fù)用,并且不適合使用@Builder 使用BuilderNode自定義復(fù)用組件池,在整個應(yīng)用中自由流轉(zhuǎn)
嵌套型 復(fù)用組件的子組件的子組件存在差異 采用化歸思想將嵌套問題轉(zhuǎn)化為上面四種標(biāo)準(zhǔn)類型來解決
無法復(fù)用型 組件之間差別很大,規(guī)律性不強,子組件也不相同 不建議使用組件復(fù)用

wKgaombxGC2AdNdAAAGiKs3Fud8318.png

標(biāo)準(zhǔn)型

wKgZombxGC6ATCBBAAGGt9OFEqs739.png

有限變化型

wKgaombxGC-Af3S7AANF-M99znw689.png

組合型

wKgZombxGDGAb9g5AANoaNcqR7Q094.png

全局型

wKgZombxGDKAe2RvAALAO1NMTPY928.png

嵌套型

此外,如果使用if/else條件語句來控制布局的結(jié)構(gòu),會導(dǎo)致在不同邏輯創(chuàng)建不同布局結(jié)構(gòu)嵌套的組件,此時我們應(yīng)該使用reuseId將if/else條件語句拆分為不同結(jié)構(gòu)的組件

?優(yōu)先使用@Builder替代自定義組件@Component,減少嵌套層級

ArkUI中使用自定義組件時,在build階段將在在后端FrameNode樹創(chuàng)建一個相應(yīng)的CustomNode節(jié)點,在渲染階段時也會創(chuàng)建對應(yīng)的RenderNode節(jié)點。會造成組件復(fù)用下,CustomNode創(chuàng)建和和RenderNod渲染的耗時,因此應(yīng)該優(yōu)先使用@Builder。同時減少一個自定義組件,也就是減少一次aboutToReuse的回調(diào),也會節(jié)省耗時。

?避免不必要的狀態(tài)變量刷新,使用AttributeUpdater更新組件屬性

?避免對@Link/@ObjectLink/@Prop等自動更新的狀態(tài)變量,在aboutToReuse方法中再進行更新

?避免使用函數(shù)/方法作為復(fù)用組件創(chuàng)建時的入?yún)?/p>

?避免在列表滑動過程中做大量計算或者耗時長的操作

?可以結(jié)合列表預(yù)加載,布局優(yōu)化等其他常規(guī)手段進一步優(yōu)化體驗

3. C-API版本解決方案

上文中我們已經(jīng)提到CAPI的方案能解決UI層級過多,跨語言通信鏈路長兩個核心問題,同時也減少了狀態(tài)變量維護相應(yīng)的耗時,是我們最終的解決方案。C++端我們還是采用了recycle/reuse的方案,C-API實現(xiàn)上我們需要自己實現(xiàn)類似lazyForEach的能力。

3.1 C-API方案原理

?系統(tǒng)提供了一個ArkUI_NodeAdapter對象來管理容器的子組件,這個對象類似事件的機制,通過相關(guān)事件通知按需生成組件。

wKgZombxGDOAcXEdAAH4PwqnZ3A821.png

(圖片來自鴻蒙官網(wǎng))


?在監(jiān)聽事件的回調(diào)中處理創(chuàng)建,回收,復(fù)用,刪除等邏輯。

wKgaombxGDaAZ7ttAA66TlWHy7E258.png


3.2 部分核心代碼

有興趣的同學(xué)可以私下聯(lián)系我。

4. 性能對比分析

使用JR APP購物車頁面(頁面結(jié)構(gòu)較復(fù)雜),400條數(shù)據(jù),分別用三種方案以及優(yōu)化后測試,測試結(jié)果如下:

方案 ArkTS Create ArkTS Reuse C++ Reuse
完全顯示所用時間 1s 804ms 1s 321ms 977ms
丟幀率 12.1% 0.0% 0.0%
獨占內(nèi)存 45.1M 42.3M 40.2M

測試結(jié)果表明,lazyForEach,組件復(fù)用,cacheCount,預(yù)加載等等這些方法的確提高了性能,尤其是滑動過程中出現(xiàn)的明顯卡頓現(xiàn)象,同時減少UI層級,不跨語言通信能進一步提高性能,帶來更好的體驗。


三、總結(jié)

本文通過圖文的方式介紹了HarmonyOS的長列表ArkTS解決方案以及原理,同時結(jié)合實際的實現(xiàn)過程介紹了ROMA動態(tài)化長列表的ArkTS和C++解決方案,相應(yīng)的重點優(yōu)化細節(jié)以及部分核心源碼,最后對兩者進行了性能對比分析。

如果大家覺得有幫助,千萬別忘了點贊+收藏,方便以后隨時閱讀!

動態(tài)化是一個涉及JavaScript、C++、iOS、Android、Java、Harmony、Vue、Node、Webpack、Shell等眾多領(lǐng)域的綜合解決方案,我們有各個領(lǐng)域優(yōu)秀的小伙伴共同前行,大家如果想深入了解某個領(lǐng)域的具體實現(xiàn)或者提出寶貴意見,可以在評論中給我留言,隨時交流~!

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    78

    瀏覽量

    18106
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2634

    瀏覽量

    66344
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2352

    瀏覽量

    42856
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1975

    瀏覽量

    30194
收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙原生開源庫ViewPool在OpenHarmony社區(qū)正式上線

    方面的實踐經(jīng)驗。它為鴻蒙生態(tài)的開發(fā)者和應(yīng)用廠商提供了一套靈活高效的組件管理方案,有助于顯著提升開發(fā)效率和應(yīng)用
    的頭像 發(fā)表于 12-20 14:44 ?217次閱讀

    ShiMeta鴻蒙門禁考勤解決方案

    方案介紹ShiMeta鴻蒙門禁考勤解決方案由ShiMeta智慧通行管理系統(tǒng)、鴻蒙人臉識別門禁設(shè)備等軟硬件組成,可提供穩(wěn)定可靠的門禁、考勤和訪客預(yù)約功能。
    的頭像 發(fā)表于 12-13 16:45 ?126次閱讀
    ShiMeta<b class='flag-5'>鴻蒙</b>門禁考勤<b class='flag-5'>解決方案</b>

    ShiMeta鴻蒙多屏同步拼接解決方案

    ???方案概述鴻蒙多屏同步解決方案在ShiMeta鴻蒙數(shù)字標(biāo)牌系統(tǒng)的基礎(chǔ)上,通過信號處理器,實現(xiàn)多個顯示屏幕之間的內(nèi)容同步顯示,以提升信息傳達的效率和視覺體驗。
    的頭像 發(fā)表于 12-13 16:45 ?129次閱讀
    ShiMeta<b class='flag-5'>鴻蒙</b>多屏同步拼接<b class='flag-5'>解決方案</b>

    軟通動力榮獲華為鴻蒙生態(tài)“行業(yè)解決方案創(chuàng)新獎”

    華為開發(fā)者大會2024中,華為以“攜手鴻蒙生態(tài)開發(fā)服務(wù)商,推動千行百業(yè)數(shù)智變革”為主題舉辦開發(fā)服務(wù)商專題論壇,展示鴻蒙生態(tài)最新進展及服務(wù)商合作模式,邀請優(yōu)秀伙伴分享實踐經(jīng)驗,并對在行業(yè)解決方案
    的頭像 發(fā)表于 10-10 10:47 ?759次閱讀

    揭秘動態(tài)化框架在鴻蒙系統(tǒng)下的高性能解決方案

    平臺解決方案。 在研發(fā)團隊使用后可大幅降低研發(fā)人力成本;為業(yè)務(wù)提供實時觸達、A/B觸達等能力以提升業(yè)務(wù)投放效率;同時保障了C用戶優(yōu)秀的用戶體驗。 一、動態(tài)化框架原理介紹 ? ?
    的頭像 發(fā)表于 10-08 13:46 ?823次閱讀
    揭秘動態(tài)化<b class='flag-5'>跨</b><b class='flag-5'>端</b>框架在<b class='flag-5'>鴻蒙</b>系統(tǒng)下的高<b class='flag-5'>性能解決方案</b>

    鴻蒙實踐-JS虛擬機架構(gòu)實現(xiàn)

    在Roma方案中,JS虛擬機是框架的核心,負責(zé)執(zhí)行動態(tài)化的JS代碼。在Android平臺采用了基于V8的J2V8,iOS平臺則使用了系統(tǒng)自帶的JSCore,而在HarmonyOS中,由于業(yè)界無
    的頭像 發(fā)表于 09-30 14:42 ?2415次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>跨</b><b class='flag-5'>端</b><b class='flag-5'>實踐</b>-JS虛擬機架構(gòu)實現(xiàn)

    基于TPS61094的長壽命、低成本智能電表解決方案

    電子發(fā)燒友網(wǎng)站提供《基于TPS61094的長壽命、低成本智能電表解決方案.pdf》資料免費下載
    發(fā)表于 09-24 10:47 ?9次下載
    基于TPS61094的長壽命、低成本智能電<b class='flag-5'>表解決方案</b>

    鴻蒙實踐-布局方案介紹

    封裝到標(biāo)簽中實現(xiàn),業(yè)務(wù)只需要針對標(biāo)簽簡單地設(shè)置相關(guān)屬性,即可實現(xiàn)列表類布局,大幅提升研發(fā)效率。同時動態(tài)化也支持絕對布局以及控制視圖的顯示和隱藏等功能,使之能勝任絕大多數(shù)業(yè)務(wù)布局場景。 在京東金融App使用動態(tài)化方案適配鴻蒙系統(tǒng)的
    的頭像 發(fā)表于 09-18 10:26 ?907次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>跨</b><b class='flag-5'>端</b><b class='flag-5'>實踐</b>-布局<b class='flag-5'>方案</b>介紹

    MSPM0 L1測量儀表解決方案指南

    電子發(fā)燒友網(wǎng)站提供《MSPM0 L1測量儀表解決方案指南.pdf》資料免費下載
    發(fā)表于 09-04 10:47 ?1次下載
    MSPM0 L1測量儀<b class='flag-5'>表解決方案</b>指南

    恩智浦完整的Matter解決方案

    恩智浦為打造Matter設(shè)備,提供了完整的解決方案,從連接和安全解決方案到處理器和軟件,應(yīng)有盡有,為Matter標(biāo)準(zhǔn)的規(guī)模化商用提供有力支撐。
    的頭像 發(fā)表于 08-26 18:04 ?2573次閱讀
    恩智浦完整的Matter<b class='flag-5'>端</b>到<b class='flag-5'>端</b><b class='flag-5'>解決方案</b>

    廣和通側(cè)AI解決方案驅(qū)動性能密集型場景商用型場景商用

    2024世界機器人大會期間,廣和通宣布:基于高通QCS8550平臺的廣和通側(cè)AI解決方案高效使能性能密集型場景。該側(cè)AI解決方案整合強大
    的頭像 發(fā)表于 08-23 16:05 ?667次閱讀
    廣和通<b class='flag-5'>端</b>側(cè)AI<b class='flag-5'>解決方案</b>驅(qū)動<b class='flag-5'>性能</b>密集型場景商用型場景商用

    基于GD32L233的物聯(lián)網(wǎng)水表解決方案

    基于GD32L233的物聯(lián)網(wǎng)水表解決方案采用了目前業(yè)界先進的窄帶蜂窩通信技術(shù),具有網(wǎng)絡(luò)深覆蓋、廣鏈接、低功耗等優(yōu)勢,通信穩(wěn)定、可靠、安全;采用工業(yè)級 NB-IoT模塊和工業(yè)級 M2M 物聯(lián)網(wǎng)卡,擁有攻擊報警、電池低電報警,余額不足報警,欠費報警;可以實時顯示水表用量、信號強度等數(shù)據(jù)信息。
    的頭像 發(fā)表于 08-22 09:35 ?2024次閱讀
    基于GD32L233的物聯(lián)網(wǎng)水<b class='flag-5'>表解決方案</b>

    鴻蒙開發(fā):應(yīng)用組件設(shè)備交互(流轉(zhuǎn))【遷移】

    遷移的核心任務(wù)是將應(yīng)用的當(dāng)前狀態(tài)(包括頁面控件、狀態(tài)變量等)無縫遷移到另一設(shè)備,從而在新設(shè)備上無縫接續(xù)應(yīng)用體驗。這意味著用戶在一臺設(shè)備上進行的操作可以在另一臺設(shè)備的相同應(yīng)用中快速切換并無縫銜接。
    的頭像 發(fā)表于 06-11 17:10 ?1260次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā):應(yīng)用組件<b class='flag-5'>跨</b>設(shè)備交互(流轉(zhuǎn))【<b class='flag-5'>跨</b><b class='flag-5'>端</b>遷移】

    鴻蒙ArkUI開發(fā):常用布局【 創(chuàng)建列表(List)】

    列表容器是為了高效處理長列表的容器,能支持橫向、豎向滾動,數(shù)據(jù)分組,分組頭懸浮等功能
    的頭像 發(fā)表于 05-15 15:30 ?789次閱讀
    <b class='flag-5'>鴻蒙</b>ArkUI開發(fā):常用布局【 創(chuàng)建<b class='flag-5'>列表</b>(List)】

    時鐘域的解決方案

    在很久之前便陸續(xù)談過亞穩(wěn)態(tài),F(xiàn)IFO,復(fù)位的設(shè)計。本次亦安做一個簡單的總結(jié),從宏觀上給大家展示時鐘域的解決方案
    的頭像 發(fā)表于 01-08 09:42 ?907次閱讀
    <b class='flag-5'>跨</b>時鐘域的<b class='flag-5'>解決方案</b>
    主站蜘蛛池模板: 狠狠干天天射| 欧美区一区| 亚洲无线视频| 久久久亚洲欧美综合| 天天爽夜夜爽天天做夜夜做| caoporn成人免费公开| 婷婷综合久久中文字幕蜜桃三| 国产网站在线免费观看| 欧美一级在线全免费| 激情婷婷色| 看真人一级毛片| 黄色录像大全| 亚洲国产精品第一区二区| 国产又色| a一级视频| 四虎成人免费网站在线| 伊人狼人在线| 日本一区不卡在线观看| 欧美日韩中文字幕| 两性色午夜视频免费老司机| 99久久免费精品国产免费高清| 九九99视频在线观看视频观看| 久久亚洲国产午夜精品理论片| 在线久综合色手机在线播放| 国模人体一区二区三区| 亚洲国产七七久久桃花| 黄黄网| 曰本女人色黄网站| 成人欧美一区二区三区小说| 欧美性区| 欧美大片xxxxbbbb| 黄色福利站| 日本在线黄| 欧美福利在线播放| 特一级毛片| 久久久久免费精品国产小说| 国产一级一级片| 色多多在线看| 人人爱人人爽| 四虎永久在线精品网址| 国产精品嫩草影院一二三区 |