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

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

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

Text元素、Image元素、模型視圖和視覺效果優(yōu)化規(guī)則和推薦實(shí)踐

倩倩 ? 來源:嵌入式小生 ? 作者:嵌入式小生 ? 2022-09-05 11:12 ? 次閱讀


開篇

性能優(yōu)化在行業(yè)里永遠(yuǎn)是一個常談的話題,該話題里的內(nèi)容無法用準(zhǔn)則來描述啦,而更多的是建議和規(guī)則。本文多數(shù)內(nèi)容、觀點(diǎn)和建議參考于Qt官方資料并結(jié)合自己的實(shí)際QML使用習(xí)慣總結(jié)而成。優(yōu)化規(guī)則并不是“黃金規(guī)則”,更不是“金標(biāo)準(zhǔn)”。對于QML應(yīng)用開發(fā)來說,將這些規(guī)則根據(jù)具體應(yīng)用場景能合理運(yùn)用即可啦。

本文內(nèi)容主要涉及到:Text元素、Image元素、模型視圖和視覺效果四個方面的一些優(yōu)化規(guī)則和推薦實(shí)踐。

性能優(yōu)化 | Text元素

計(jì)算文本的布局會是一個緩慢的操作。所以,在實(shí)際開發(fā)中盡可能優(yōu)先考慮使用明文格式,而不是StyledText,這可以減少布局引擎的工作量。如果不能使用明文(例如:需要嵌入圖像,或使用標(biāo)記來指定具有特定格式(粗體、斜體等)的字符范圍),那么才考慮使用StyledText。

應(yīng)該只在文本可能是StyledText的情況下使用AutoText,因?yàn)檫@種模式會導(dǎo)致很高的解析成本。除此之外,還不應(yīng)該使用RichText模式,因?yàn)镾tyledText幾乎提供了其所有的特性。

性能優(yōu)化 | Image元素

在任何軟件的用戶界面中,圖片都是重要組成部分。但是一般加載圖片所需的時間、消耗的內(nèi)存數(shù)量和使用方式,都會影響應(yīng)用程序的性能,在本小結(jié)中,描述在實(shí)際qml應(yīng)用開發(fā)中,在使用圖片時關(guān)于性能的幾條優(yōu)化點(diǎn)。

異步加載圖片

圖片通常非常大,所以最佳的做法是確保加載圖片不會阻塞UI線程。將Image元素的asynchronous屬性設(shè)置為true,用于允許從本地文件系統(tǒng)異步加載圖片(注:遠(yuǎn)程圖片總是異步加載的)。

注:當(dāng)asynchronous屬性設(shè)置為true時,圖片元素將在低優(yōu)先級的工作線程中加載。

顯式設(shè)置圖片源的屬性

如果在應(yīng)用程序中加載了一個大尺寸的圖片,但是卻在一個小尺寸的元素中顯示它,因此我們應(yīng)該設(shè)置圖片的sourceSize屬性為被呈現(xiàn)的元素的大小,以確保在內(nèi)存中保存的是小尺寸的圖片,而不是大尺寸的圖片。

注:更改sourceSize會導(dǎo)致圖像重新加載。

避免運(yùn)行時拼接

通過在應(yīng)用程序中提供預(yù)合成的圖片資源(例如,提供帶有陰影效果的元素),可以避免在運(yùn)行時進(jìn)行圖片合成。

避免平滑圖片

對于Image類型,image.smotth用于設(shè)置圖片的平滑參數(shù),我們在需要時才進(jìn)行平滑操作。因?yàn)樵谝恍┯布线M(jìn)行圖片平滑速度較慢,而且如果圖像以原圖大小顯示,則沒有視覺效果,因此也沒有意義且影響性能。

避免多次繪制

避免在一個區(qū)域多次繪制。在設(shè)計(jì)qml文件時,使用Item作為根元素,而不要使用Rectangle,以避免多次繪制背景。

性能優(yōu)化 | 使用Anchor定位元素

使用錨定位比使用綁定更有效率。例如下列代碼,

Rectangle{
id:rect1
x:20
width:200;height:200
}
Rectangle{
id:rect2
x:rect1.x
y:rect1.y+rect1.height
width:rect1.width-20
height:200
}

在上述代碼中,是使用使用綁定來定位rect2相對于rect1的位置。從性能角度來看,更高效的做法是:

Rectangle{
id:rect1
x:20
width:200;height:200
}
Rectangle{
id:rect2
height:200
anchors.left:rect1.left
anchors.top:rect1.bottom
anchors.right:rect1.right
anchors.rightMargin:20
}

使用綁定定位(通過將綁定表達(dá)式賦值給可視對象的x、y、widht和height屬性)相對較慢,但是這種方式具有靈活性的優(yōu)點(diǎn)。

如果布局不是動態(tài)的,指定布局最有效的方法是靜態(tài)初始化x, y, width和height屬性。Item坐標(biāo)總是相對于它們的父節(jié)點(diǎn),所以如果想要與父節(jié)點(diǎn)的(0,0)坐標(biāo)保持固定的偏移,就不能使用anchor。如下面的例子,子矩形對象位于相同的位置,但錨代碼顯示的效率不如通過靜態(tài)初始化使用固定定位的代碼:

Rectangle{
width:60
height:60
Rectangle{
id:fixedPositioning
x:20
y:20
width:20
height:20
}
Rectangle{
id:anchorPositioning
anchors.fill:parent
anchors.margins:20
}
}

性能優(yōu)化 | 模型和視圖

絕大多數(shù)的應(yīng)用程序至少包含一個向視圖提供數(shù)據(jù)的模型。但是如果數(shù)據(jù)量較大,將會影響性能,所以我們需要知道在實(shí)際開發(fā)中如何優(yōu)化性能,本小節(jié)提供幾條方法:

自定義C++模型

用C++編寫我們的自定義模型,以便在QML中與視圖一起使用。此類模型的最佳實(shí)現(xiàn)將在很大程度上取決于實(shí)際的應(yīng)用場景,以下是幾點(diǎn)準(zhǔn)則:

(1)盡可能保持異步。

(2)保證所有的處理都在一個(低優(yōu)先級)的工作線程中進(jìn)行。

(3)盡可能在后臺批處理操作,以減少I/O和IPC。

注意:建議使用低優(yōu)先級的工作線程,以將GUI線程被饑餓的風(fēng)險降到最低(因?yàn)檫@可能會極大程度上影響GUI體驗(yàn)效果)。除此之外,同步和鎖機(jī)制可能是導(dǎo)致性能變慢的一個重要原因,因此應(yīng)避免不必要的鎖定。

ListModel QML類型

在QML中,優(yōu)先使用ListModel類型,用于向ListView視圖提供數(shù)據(jù)。該類型足以滿足大多數(shù)的使用場景了,只要使用正確,ListMode性能也相對較好。在使用中,應(yīng)注意以下兩點(diǎn):

(1)在工作線程中填充

JavaScript中,ListModel元素可以被填充到一個(低優(yōu)先級)的工作線程中。我們必須在WorkerScript中顯式調(diào)用ListModel上的sync(),以便將更改同步到主線程。

注,使用WorkerScript元素將導(dǎo)致創(chuàng)建一個單獨(dú)的JavaScript引擎(因?yàn)镴avaScript引擎是屬于單個線程),這一點(diǎn)將增加內(nèi)存使用量。然而,多個WorkerScript元素將使用同一個工作線程,因此一旦應(yīng)用程序已經(jīng)使用了一個WorkerScript元素,那么使用第二個或第三個WorkerScript元素對內(nèi)存的影響就可以忽略不計(jì)了。

(2)不要使用動態(tài)元素

Qt Quick 2 ListModel中的性能優(yōu)化主要來自:假定了對給定模型中單個元素中的類型不會更改,因此緩存性能將顯著提高。如果類型可以從一個元素到另一個元素的動態(tài)變化,則不滿足Qt Quick 2對ListModel的優(yōu)化,而且模型的性能將會差一個數(shù)量級。

因此,在默認(rèn)情況下動態(tài)類型是禁用的。必須專門設(shè)置模型的dynamicRoles屬性,才能啟用動態(tài)類型(并承受隨之而來的性能下降)。因此,如果可以重新設(shè)計(jì)應(yīng)用程序來避免使用動態(tài)類型,則推薦不要使用動態(tài)類型而是去重新設(shè)計(jì)程序。

視圖(View)

視圖代理應(yīng)盡可能簡單。在代理中只放置需要QML來顯示的必要信息,不是立即需要的附加信息和操作(例如:如果在單擊時顯示更多信息)應(yīng)該在需要的時候才創(chuàng)建(即:延遲創(chuàng)建

在設(shè)計(jì)視圖代理時需要注意以下幾點(diǎn):

(1)代理中的元素越少,在視圖中創(chuàng)建的速度就越快,因此視圖滾動的速度就越快,效果越好。

(2)減少代理中綁定的數(shù)量。推薦在代理中使用Anchor而不是綁定來進(jìn)行相對定位。

(3)避免在代理中使用ShaderEffect元素。

(4)不要在代理中啟動Clipping。

可以設(shè)置一個視圖的cacheBuffer屬性來允許異步創(chuàng)建和在可見區(qū)域外緩存代理。對于不簡單且不太可能在單幀內(nèi)創(chuàng)建的視圖代理,推薦使用cacheBuffer

注:cacheBuffer是在內(nèi)存中保留額外的代理。因此,利用cacheBuffer獲得的值必須與內(nèi)存使用相平衡。應(yīng)使用基準(zhǔn)測試來找到用例的最佳值,因?yàn)槭褂胏acheBuffer會增加內(nèi)存壓力,在極端情況下,會導(dǎo)致視圖滾動幀率降低,出現(xiàn)卡頓現(xiàn)象!

性能優(yōu)化 | 視覺效果

Qt Quick 2允許開發(fā)人員和設(shè)計(jì)人員創(chuàng)建高端的用戶界面。因此流動性、動態(tài)轉(zhuǎn)換和視覺效果等特性可以在應(yīng)用程序中發(fā)揮巨大作用,但在QML中使用這些特性時必須謹(jǐn)慎,因?yàn)榭赡軙绊懶阅堋?/p>

動畫

通常,動畫化一個Item的屬性會導(dǎo)致引用該屬性的所有綁定都被重新計(jì)算。在屬性動畫過程中的屬性綁定被重新計(jì)算在實(shí)際開發(fā)中是必須的;但在一些情況下,可以考慮最好在執(zhí)行動畫之前禁用綁定,然后在動畫完成后重新分配綁定。

避免在動畫期間運(yùn)行JavaScript。例如:避免為x屬性的動畫運(yùn)行復(fù)雜的JavaScript表達(dá)式。

在使用腳本動畫時應(yīng)注意,因?yàn)檫@些動畫是在主線程中運(yùn)行的(因此如果它們需要很長時間才能完成,就可能會導(dǎo)致一些動畫幀缺失)。

粒子效果

在Qt Quick Particles模塊中允許粒子效果無縫集成到用戶界面中。每個平臺都有不同的圖形硬件功能,Particles模塊無法將參數(shù)限制為硬件能夠很好支持的情況。

如果渲染的粒子越多(它們越大),圖形硬件就需要越快,才能以60幀/秒的速度渲染,更快的CPU速度才能渲染更多的粒子效果。

因此,在目標(biāo)平臺上測試所有的粒子效果就變得很重要了,用于評估在60fps下渲染的粒子數(shù)量和大小。

審核編輯 :李倩


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

    關(guān)注

    2

    文章

    1088

    瀏覽量

    40515
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3279

    瀏覽量

    48976
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    505

    瀏覽量

    19715

原文標(biāo)題:QML性能優(yōu)化 | 常見界面元素優(yōu)化

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    借助谷歌Gemini和Imagen模型生成高質(zhì)量圖像

    以獲得卓越的視覺效果。這個過程并不止于此;一旦圖像生成,Imagen 2 可以進(jìn)一步優(yōu)化以滿足特定需求,從而創(chuàng)建一個強(qiáng)大的工作流程,用于制作頂級視覺內(nèi)容。
    的頭像 發(fā)表于 01-03 10:38 ?372次閱讀
    借助谷歌Gemini和Imagen<b class='flag-5'>模型</b>生成高質(zhì)量圖像

    X熒光元素能譜分析與掃描電鏡能譜元素的共性及差異

    X熒光元素分析原理是青年科學(xué)家布拉格(獲諾貝爾物理學(xué)獎時僅25歲)創(chuàng)建的?,F(xiàn)以創(chuàng)想儀器的第二代EDX-9000型X射線熒光元素分析儀為例,介紹其工作原理與技術(shù)性能。 工作原理:高速電子轟擊靶材(通常
    的頭像 發(fā)表于 12-21 16:40 ?211次閱讀
    X熒光<b class='flag-5'>元素</b>能譜分析與掃描電鏡能譜<b class='flag-5'>元素</b>的共性及差異

    錫鉛焊料中的金屬元素分析

    錫鉛焊料:電子制造中的關(guān)鍵材料在電子和電氣設(shè)備的制造過程中,錫鉛焊料因其出色的導(dǎo)電性、導(dǎo)熱性和抗腐蝕性而成為連接元件的首選材料。為了確保焊料的質(zhì)量和性能,金鑒實(shí)驗(yàn)室提供專業(yè)的金屬元素分析測試服務(wù)
    的頭像 發(fā)表于 12-14 19:40 ?242次閱讀
    錫鉛焊料中的金屬<b class='flag-5'>元素</b>分析

    ICP元素分析

    叫做ICP-OES。一、工作原理待測試樣經(jīng)噴霧器形成氣溶膠進(jìn)入石英炬管等離子體中心通道中,經(jīng)光源激發(fā)以后所輻射的譜線,經(jīng)入射狹縫到色散系統(tǒng)光柵,分光后的待測元素
    的頭像 發(fā)表于 11-18 17:46 ?301次閱讀
    ICP<b class='flag-5'>元素</b>分析

    《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素繪制實(shí)驗(yàn)

    第三十三章 image元素繪制實(shí)驗(yàn) 在前面的章節(jié)中已經(jīng)陸續(xù)提到了image模塊的一些基本使用,從本章開始將通過幾個章節(jié)詳細(xì)地介紹image模塊的使用,本章將講解
    發(fā)表于 11-04 14:22

    基于LIBS的馬鈴薯中鉻元素定量分析方法研究

    樣品,并調(diào)整實(shí)驗(yàn)參數(shù)采集馬鈴薯光譜數(shù)據(jù);然后針對光譜數(shù)據(jù)中的噪聲和基線漂移的問題對光譜數(shù)據(jù)進(jìn)行前期處理;最后采用絕對強(qiáng)度法定量分析Cr元素,同時,計(jì)算模型評價指標(biāo)以評估定量性能。通過實(shí)驗(yàn)和數(shù)據(jù)分析,驗(yàn)證LIBS技術(shù)的可行性。 二、
    的頭像 發(fā)表于 10-30 18:11 ?227次閱讀
    基于LIBS的馬鈴薯中鉻<b class='flag-5'>元素</b>定量分析方法研究

    基于LIBS的土壤中銅元素和鉛元素定量分析

    利用激光誘導(dǎo)擊穿光譜技術(shù)對摻雜Cu、Pb元素的土壤樣品進(jìn)行定量分析,尋找最優(yōu)實(shí)驗(yàn)條件。實(shí)驗(yàn)使用直接定標(biāo)法和內(nèi)標(biāo)法對元素特征譜線進(jìn)行擬合,根據(jù)計(jì)算相關(guān)系數(shù)及檢出限選擇合適的數(shù)據(jù)處理方法。
    的頭像 發(fā)表于 08-27 14:54 ?321次閱讀
    基于LIBS的土壤中銅<b class='flag-5'>元素</b>和鉛<b class='flag-5'>元素</b>定量分析

    TINA-TI導(dǎo)入spice模型失敗,提示語法元素錯誤是哪里出了問題?

    在使用TINA-TI 導(dǎo)入器件的Spice模型時,提示錯誤語法元素錯誤,不能導(dǎo)入器件,其spice內(nèi)容如下:煩請知道,非常感謝! * DRB501VM-40 D model * PKG: UMD2
    發(fā)表于 08-09 07:51

    LED機(jī)械矩陣屏:打造獨(dú)特視覺效果視覺盛宴

    一、引言 隨著科技的不斷發(fā)展,LED顯示技術(shù)也在不斷更新和升級。其中,LED機(jī)械矩陣屏憑借其獨(dú)特的視覺效果和靈活的應(yīng)用場景,成為了新一代的顯示設(shè)備。本文將為您介紹LED機(jī)械矩陣屏的相關(guān)知識,幫助
    的頭像 發(fā)表于 07-29 09:30 ?491次閱讀

    【大語言模型:原理與工程實(shí)踐】探索《大語言模型原理與工程實(shí)踐》2.0

    《大語言模型“原理與工程實(shí)踐”》是關(guān)于大語言模型內(nèi)在機(jī)理和應(yīng)用實(shí)踐的一次深入探索。作者不僅深入討論了理論,還提供了豐富的實(shí)踐案例,幫助讀者理
    發(fā)表于 05-07 10:30

    焊錫膏中的金屬元素有什么作用?

    焊錫膏是伴隨著SMT應(yīng)運(yùn)而生的一種新型焊接材料,也是是一種由焊料粉末、助焊劑和其他添加劑混合而成的復(fù)雜系統(tǒng),一般根據(jù)用途的不同,焊錫膏中也會加入不同的金屬元素,那么不同的金屬元素在焊錫膏中有什么作用
    的頭像 發(fā)表于 04-23 16:36 ?609次閱讀
    焊錫膏中的金屬<b class='flag-5'>元素</b>有什么作用?

    日產(chǎn)2025款逍客中期改款車型上市,內(nèi)外全面升級

    首先,全新前臉設(shè)計(jì)引人注目,尺寸巨大的進(jìn)氣格柵采用亮黑色“逗號形元素”,靈感源自“古代日本盔甲的鱗片”,搭配全新下保險杠,視覺效果更佳。
    的頭像 發(fā)表于 04-17 15:44 ?1151次閱讀

    揭秘第96屆奧斯卡最佳視覺效果獎提名影片背后的“魔法”

    第 96 屆奧斯卡最佳視覺效果獎提名影片證明了技術(shù)的驚人進(jìn)步正在不斷打破電影發(fā)展的桎梏。
    的頭像 發(fā)表于 04-10 10:16 ?435次閱讀

    隨機(jī)抽取SV數(shù)組中的一個元素方法實(shí)現(xiàn)

    如果想從一個關(guān)聯(lián)數(shù)組中隨機(jī)選取一個元素,需要逐個訪問它之前的元素,原因是沒辦法能夠直接訪問到第N個元素。上面的程序示范了如何從一個以整數(shù)值作為索引**的關(guān)聯(lián)數(shù)組中隨機(jī)選取一個元素。
    的頭像 發(fā)表于 03-21 10:11 ?1074次閱讀
    隨機(jī)抽取SV數(shù)組中的一個<b class='flag-5'>元素</b>方法實(shí)現(xiàn)

    請問AD軟件中怎么添加不同元素之間的間距規(guī)則呢?

    AD軟件提供了某一個元素針對其他元素之間的間距規(guī)則的設(shè)置。
    的頭像 發(fā)表于 03-21 09:09 ?1401次閱讀
    請問AD軟件中怎么添加不同<b class='flag-5'>元素</b>之間的間距<b class='flag-5'>規(guī)則</b>呢?