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

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

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

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

如何用List組件減小JS運行內(nèi)存

HarmonyOS開發(fā)者 ? 來源:HarmonyOS開發(fā)者 ? 作者:tongshijia ? 2021-10-08 17:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

每種編程語言都有它的內(nèi)存管理機制,不同設(shè)備上可用內(nèi)存不同,分配給JS引擎可用的內(nèi)存范圍也不同。例如運行內(nèi)存在128MB以下的輕量設(shè)備,對應(yīng)JS引擎的可用內(nèi)存范圍為48-64KB。本文也將以此類設(shè)備為例進(jìn)行分析。

當(dāng)整個頁面渲染比較復(fù)雜時,JS運行內(nèi)存峰值就可能會超過JS引擎分配到的最大可用內(nèi)存,導(dǎo)致頁面無法渲染。

List組件是JS UI框架下最基本的容器組件之一,提供了一系列相同寬度的列表項。在應(yīng)用開發(fā)過程中,經(jīng)常會使用List容器組件來呈現(xiàn)大量的數(shù)據(jù)。所以,在List組件應(yīng)用的開發(fā)過程中,開發(fā)者應(yīng)充分考慮內(nèi)存優(yōu)化問題。

本期,我們將通過List組件開發(fā)一個通訊錄頁面,并采用list+for的方案對整個頁面進(jìn)行優(yōu)化,達(dá)到減小JS運行內(nèi)存的目的。

一、代碼實現(xiàn)

如下所示,是一張簡單的通訊錄頁面,包含了姓名、電話及對應(yīng)圖片。下面將通過兩種實現(xiàn)方式來對比代碼性能。

方法一:直接書寫對應(yīng)的組件頁面

使用HML直接撰寫整個組件頁面的內(nèi)容,代碼如下:

《div class=“container”》 《list class=“l(fā)ist”》 《list-item class=“l(fā)ist-item”》 《image class=“image” src=“/common/1.png”》《/image》 《div class=“info”》 《text class=“text”》張三《/text》 《marquee class=“detail”》電話:+86 130XXXXXXXX《/marquee》 《/div》 《/list-item》 《list-item class=“l(fā)ist-item”》

《image class=“image” src=“/common/1.png”》《/image》 《div class=“info”》 《text class=“text”》李四《/text》 《marquee class=“detail”》電話:027-6128XXXX《/marquee》

《/div》 《/list-item》 《list-item class=“l(fā)ist-item”》 《image class=“image” src=“/common/1.png”》《/image》

《div class=“info”》 《text class=“text”》王五《/text》 《marquee class=“detail”》電話:+86 150xxxxxx《/marquee》 《/div》 《/list-item》 《list-item class=“l(fā)ist-item”》 《image class=“image” src=“/common/1.png”》《/image》 《div class=“info”》

《text class=“text”》小明《/text》 《marquee class=“detail”》電話:+86 130XXXXXXXX《/marquee》

《/div》 《/list-item》 《list-item class=“l(fā)ist-item”》 《image class=“image” src=“/common/2.png”》《/image》 《div class=“info”》 《text class=“text”》小紅《/text》

《marquee class=“detail”》電話:+86 180XXXX 《/marquee》 《/div》 《/list-item》 。。. 《/list》 《input value=“非for” on:click=“changeNextPage” class=“button”》《/input》《/div》

方法二:通過for指令來書寫對應(yīng)的組件頁面

針對方法一中的實現(xiàn),采用for指令來改進(jìn),使對應(yīng)頁面更簡潔,對應(yīng)修改后代碼如下:

《div class=“container”》 《list class=“l(fā)ist” on:scrollend=“changeNextPage”》 《list-item class=“l(fā)ist-item” for = “{{listData}}”》 《image class = “image” src = “/common/{{$item.src}}”》《/image》 《div class = “info”》 《text class=“text”》{{$item.name}}《/text》

《marquee class = “detail”》電話: {{$item.phone}}《/marquee》 《/div》 《/list-item》 《/list》《/div》

對應(yīng)的for指令的渲染數(shù)組代碼如下:

export default { data: { listData:[] }, onInit() { for (var i = 0; i 《 10; i++) { this.listData.push({‘name’:‘張三’, src :‘1.png’, phone:“+86 130XXXXXX”}); this.listData.push({‘name’:‘李四’, src :‘2.png’, phone:“027-6128XXXX”});

this.listData.push({‘name’:‘王五’, src :‘1.png’, phone:“+ 86 150XXXXXX”}); this.listData.push({‘name’:‘小明’, src :‘1.png’, phone:‘+86 130XXXXXX’}); this.listData.push({‘name’:‘小紅’, src :‘2.png’, phone:‘+86 180XXXX’}); } }}

二、性能測試

這里,我們針對不同的item數(shù)量,分別測試了以上兩種實現(xiàn)方式的JS運行性能,JS運行內(nèi)存與JS運行內(nèi)存峰值如下圖所示:

88e90044-233d-11ec-82a8-dac502259ad0.png

圖2 兩種方法的內(nèi)存占用

由上表測試數(shù)據(jù)可以看出,采用方法二進(jìn)行渲染,JS運行內(nèi)存會出現(xiàn)比較大的浮動。但是使用方法一,對應(yīng)的JS運行內(nèi)存基本保持不變,這種差異是由兩種不同的頁面加載渲染機制造成的。

方法一的加載機制:對整個頁面一次性全部進(jìn)行加載,在加載完成后,會對List組件頁面占用的JS運行內(nèi)存進(jìn)行釋放。頁面后續(xù)滑動,并不會觸發(fā)組件的解析,從而不會影響JS運行時內(nèi)存數(shù)據(jù)。

方法二的加載機制:每次滑動屏幕會加載當(dāng)前顯示頁面以及緩存部分的item,超出屏幕之外的item會對其占用的JS內(nèi)存資源進(jìn)行回收。當(dāng)List組件頁面下滑到新的item時會重新創(chuàng)建請求,這種情況下會降低一部分的滑動性能,但是可以實現(xiàn)按需加載,降低JS運行內(nèi)存峰值。

三、優(yōu)缺點對比

方法一的優(yōu)缺點:

優(yōu)點:首次頁面顯示成功后,JS運行內(nèi)存比較穩(wěn)定,不會出現(xiàn)后續(xù)滑動崩潰的問題,且穩(wěn)定顯示后占用的JS運行內(nèi)存較小。

缺點:由于頁面會一次性全部進(jìn)行解析,在解析比較復(fù)雜的頁面時,會對JS運行內(nèi)存峰值造成比較大的壓力,甚至?xí)?dǎo)致對應(yīng)的頁面無法啟動。

方法二的優(yōu)缺點:

優(yōu)點:

1. 在頁面啟動時,只對顯示部分進(jìn)行加載,因此可以降低頁面啟動時JS運行內(nèi)存。

2. 由于整個頁面始終只保持對顯示界面的元素進(jìn)行渲染。因此,針對稍復(fù)雜的界面,相較于方法一JS運行內(nèi)存峰值更小。

缺點:

1. List組件的內(nèi)容,需要通過$item進(jìn)行訪問, item顯示時會創(chuàng)建對應(yīng)的數(shù)據(jù)監(jiān)聽對象來檢測數(shù)據(jù)的變化,比如上述界面中,一個item會創(chuàng)建3個數(shù)據(jù)監(jiān)聽,list中進(jìn)行繪制的item的數(shù)量為5,因此會創(chuàng)建15個數(shù)據(jù)監(jiān)聽,從而增加 15 * 200B(單個字節(jié)) = 3000B的數(shù)據(jù)監(jiān)聽開銷。

2. 隨著list組件向下滑動,會增加數(shù)組監(jiān)聽占用的內(nèi)存,從而增加對應(yīng)的JS運行內(nèi)存。因此使用方法二,JS運行內(nèi)存會一直上漲,直到最后一個item渲染。

四、使用建議

針對上述表現(xiàn),我們總結(jié)了如下使用場景供開發(fā)者參考:

88e90044-233d-11ec-82a8-dac502259ad0.png

圖3 使用建議

總而言之,采用方法二開發(fā)List組件可以降低JS運行內(nèi)存峰值,但是會增加JS運行時內(nèi)存。當(dāng)頁面比較簡單,item數(shù)量低于20個,建議采用方法一。當(dāng)頁面item超過20個,或者頁面占用JS內(nèi)存峰值比較大,建議采用方法二。

責(zé)任編輯:haq

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

    關(guān)注

    90

    文章

    3724

    瀏覽量

    97458
  • JS
    JS
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    19109
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4977

    瀏覽量

    74420

原文標(biāo)題:JS UI框架下,List組件運行時的內(nèi)存優(yōu)化

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    LuatOS的內(nèi)存分配機制

    不同 LuatOS 硬件平臺在內(nèi)存布局上存在差異,Lua 運行內(nèi)存、系統(tǒng)內(nèi)存與 PSRAM 擴展內(nèi)存的分配方式各有區(qū)別。部分型號將系統(tǒng)與腳本內(nèi)存
    的頭像 發(fā)表于 04-16 12:37 ?135次閱讀
    LuatOS的<b class='flag-5'>內(nèi)存</b>分配機制

    MangoTree Halo Ultra「全新PXI」,標(biāo)配自動糾錯內(nèi)存#

    內(nèi)存
    芒果樹數(shù)字
    發(fā)布于 :2026年03月06日 15:59:34

    KeepAlive:組件緩存實現(xiàn)深度解析

    個簡易實現(xiàn)。 KeepAlive 組件概述 什么是 KeepAlive KeepAlive 是 Vue 的內(nèi)置組件,它能夠在組件切換時,自動將組件實例保存在
    發(fā)表于 03-05 19:17

    皮皮蝦,我們走!9.9刀RISC-V開發(fā)板打造OpenClaw肉身,3小時AI自主構(gòu)建

    ,使用Go語言在10MB內(nèi)存下實現(xiàn)OpenClaw幾乎所有的核心智能助手功能,僅需9.9$的RISC-V板卡(內(nèi)置算能SG2002)即可運行!PicoClaw運行內(nèi)存
    的頭像 發(fā)表于 02-12 08:44 ?1724次閱讀
    皮皮蝦,我們走!9.9刀RISC-V開發(fā)板打造OpenClaw肉身,3小時AI自主構(gòu)建

    曙光云發(fā)布“HME內(nèi)存聚變技術(shù)”

    當(dāng)下,內(nèi)存市場價格迎來狂飆式上漲,這讓無數(shù)數(shù)字化項目陷入“預(yù)算超支”與“配置縮水”的兩難境地。在硬件成本居高不下的當(dāng)下,如何用有限預(yù)算交付達(dá)標(biāo)的算力,成為眾多企業(yè)亟待解決的難題。 對此,曙光云給出
    的頭像 發(fā)表于 02-08 16:26 ?6.1w次閱讀

    行業(yè)資訊 I 火爆的“內(nèi)存接口芯片”

    大模型訓(xùn)練與推理需求的爆發(fā),點燃了AI數(shù)據(jù)中心的建設(shè)熱潮。AI服務(wù)器的需求增長不僅掀起了GPU/ASIC算力芯片、光模塊等組件的迭代狂潮,同時也推動了對更大容量、更高帶寬系統(tǒng)主內(nèi)存的需求。在此背景下
    的頭像 發(fā)表于 10-31 16:28 ?3756次閱讀
    行業(yè)資訊 I 火爆的“<b class='flag-5'>內(nèi)存</b>接口芯片”

    WebGL/Canvas 內(nèi)存泄露分析

    在構(gòu)建高性能、長周期運行的 WebGL/Canvas 應(yīng)用(如 3D 編輯器、數(shù)據(jù)可視化平臺)時,內(nèi)存管理是一個至關(guān)重要且極具挑戰(zhàn)性的課題。 開發(fā)者通常面臨的內(nèi)存泄漏問題,其根源遠(yuǎn)比簡單
    的頭像 發(fā)表于 10-21 11:40 ?560次閱讀
    WebGL/Canvas <b class='flag-5'>內(nèi)存</b>泄露分析

    串口DMA發(fā)送丟失數(shù)據(jù)的原因?怎么解決?

    了,于是在4條發(fā)送語句之間加了3s延時,還是這個情況。 create_js_com1(list); rt_thread_mdelay(3000); create_js_com2(list
    發(fā)表于 09-24 07:09

    工業(yè)網(wǎng)關(guān)的內(nèi)存有什么功能

    工業(yè)網(wǎng)關(guān)的內(nèi)存是其核心硬件組件之一,承擔(dān)著保障設(shè)備高效、穩(wěn)定運行的關(guān)鍵作用,具體功能可從以下幾個方面詳細(xì)說明: 一、臨時數(shù)據(jù)存儲與處理 實時數(shù)據(jù)緩存:工業(yè)網(wǎng)關(guān)需要實時采集來自傳感器、PLC(可編程
    的頭像 發(fā)表于 08-15 10:15 ?699次閱讀

    HarmonyOS NEXT應(yīng)用元服務(wù)布局優(yōu)化長列表使用懶加載與組件復(fù)用

    在列表場景下會采用List、Grid、WaterFlow等組件配合ForEach或者LazyForEach來實現(xiàn),F(xiàn)orEach適合內(nèi)容長度確定,內(nèi)容在兩屏以內(nèi)的列表。LazyForEach適合長度
    發(fā)表于 06-27 16:08

    HarmonyOS NEXT應(yīng)用元服務(wù)布局合理使用布局組件

    布的組件是按照特定的方向線性放置,如橫向/縱向/Z序方向。除上述布局類型外,還有一些復(fù)雜布局能力,如Flex、List、Grid、RelativeContainer和自定義布局等。 使用Flex構(gòu)建彈性
    發(fā)表于 06-20 15:48

    曝華為Mate80系列定制超大內(nèi)存 王炸是大內(nèi)存與麒麟9030通過SiP封裝技術(shù)集成

    超過20GB,要知道目前在售的華為機型最大配備的內(nèi)存也只有16GB。華為Mate 80系列手機將一舉成為華為手機史上內(nèi)存最大的機型。 運行內(nèi)存的響應(yīng)速度比硬盤快得多,在端側(cè)AI大模型越加普及的現(xiàn)在,若想實現(xiàn)手機快速調(diào)用AI能力,
    的頭像 發(fā)表于 06-17 11:50 ?3888次閱讀

    鴻蒙5開發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實戰(zhàn)

    所有頁面(內(nèi)存爆炸!) Swiper() { ForEach(this.list, (item: number) => { SwiperItem().height(\'100
    發(fā)表于 06-12 17:53

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化四

    (一)原理介紹 應(yīng)用在定義界面時,對于使用不同類型的組件,需要繪制不同的內(nèi)容。圖片組件主要用來加載和顯示圖片,而組件本身也需要占用內(nèi)存。ArkTS目前采用引用計數(shù)的機制來管理
    發(fā)表于 05-24 17:20

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化一

    一、 概述 用戶功能的不斷增強,應(yīng)用越來越復(fù)雜,占用的內(nèi)存也在不斷膨脹,而內(nèi)存作為系統(tǒng)的稀缺資源比較有限,當(dāng)應(yīng)用程序占用過多內(nèi)存時,系統(tǒng)可能會頻繁進(jìn)行內(nèi)存回收和重新分配,導(dǎo)致應(yīng)用程序的
    發(fā)表于 05-21 11:27
    黄浦区| 威信县| 新闻| 家居| 德清县| 绥德县| 台山市| 无为县| 汉沽区| 铅山县| 安顺市| 柯坪县| 阿巴嘎旗| 中江县| 古丈县| 吉木乃县| 奇台县| 宣汉县| 应城市| 莎车县| 镇平县| 遂平县| 宣武区| 水富县| 宣城市| 嫩江县| 衡阳市| 中超| 平湖市| 龙州县| 扎兰屯市| 岑巩县| 府谷县| 仙居县| 乳山市| 麻城市| 景东| 高密市| 门头沟区| 驻马店市| 太仆寺旗|