日韩高清亚洲日韩精品一区二区三区,成熟人妻av无码专区,国产又A又黄又潮娇喘视频,男女猛烈无遮挡免费视频在线观看

「Z站推薦」GUI 引擎評(píng)價(jià)指標(biāo)

評(píng)價(jià)一個(gè)GUI引擎很難,本文提供了一些重要的評(píng)價(jià)指標(biāo),這些指標(biāo)可以幫助大家選擇適合自己的GUI,也歡迎大家對(duì)AWTK和其它GUI進(jìn)行對(duì)比評(píng)估。

github上的開(kāi)源 GUI 引擎至少有數(shù)十個(gè),如何去評(píng)估它們的優(yōu)劣,如何選擇你需要的GUI引擎?這個(gè)是艱巨的任務(wù),每個(gè)人的需求不一樣,GUI開(kāi)發(fā)者的意圖也不同,很難找到統(tǒng)一的標(biāo)準(zhǔn)去選出最好的GUI。

QT是最強(qiáng)大的,沒(méi)有之一,但也不一定適合你。在這篇文章有句話:“商業(yè)引擎看起來(lái)功能很齊全,但是實(shí)際使用起來(lái)你就知道有多少坑?!?這句話挺有意思,它即適合游戲引擎,也適合GUI引擎。demo看起來(lái)很好,技術(shù)看起來(lái)很先進(jìn),用起來(lái)才知道有多少坑!所以事先做一個(gè)完整的評(píng)估是很有必要的。

雖然客觀的評(píng)價(jià)一個(gè)GUI引擎很難,但不管怎么樣,總有些指標(biāo)可以提供有價(jià)值的參考,盡管這些指標(biāo)在遇到不同使用的場(chǎng)景,不同的公司背景,不同的個(gè)人喜好,它們所占的權(quán)重也大不相同。但是并不能抹殺這些指標(biāo)的價(jià)值,關(guān)鍵在于如何根據(jù)自己的需要調(diào)整它們的比重。

在這篇《這個(gè)開(kāi)源的6千行UI框架,能打敗QT,MFC嗎?》文章里,諸葛不亮的37問(wèn)給了我極大的啟發(fā),在開(kāi)發(fā)AWTK的過(guò)程中,多次重讀這篇文章,這篇文章堪稱是GUI引擎開(kāi)發(fā)者的指路明燈。

如果諸葛大俠不介意,為了活躍氣氛,我就把本文提到的指標(biāo)稱為《諸葛不亮-李先靜 GUI 引擎評(píng)價(jià)指標(biāo)》,把諸葛大俠放在前面,是表示對(duì)他的感謝,把我的名字放在里面,是由我承擔(dān)一些人的指責(zé)。

基本指標(biāo)

1. 開(kāi)發(fā)者的心態(tài)
當(dāng)你用他們的 GUI 時(shí),他們是感謝你的支持,還在覺(jué)得你欠他們的呢?如果他們沒(méi)有心存感謝,你最好別用。否則,遇到問(wèn)題時(shí),你怎么能指望他們幫你解決呢?

2. 幫助文檔
是否有《API 手冊(cè)》、《使用手冊(cè)》、《常見(jiàn)問(wèn)題》、《移植文檔》和《HowTo》,文檔是否在定期更新?

3. 示例代碼
是否有簡(jiǎn)單的入門(mén)示例、各種控件的的用法、完整功能的示例?

4. 代碼風(fēng)格
目錄名、文件名、類名、函數(shù)名、函數(shù)參數(shù)、局部變量名、全局變量名、注釋和縮進(jìn)是否一致。

5. 編程語(yǔ)言
目前支持哪些開(kāi)發(fā)語(yǔ)言?支持新的開(kāi)發(fā)語(yǔ)言是否容易?編程風(fēng)格是否與對(duì)應(yīng)的語(yǔ)言相符?不同語(yǔ)言綁定的代碼能否同步更新(否則很容易落后于核心引擎)?

對(duì)于 GUI 引擎來(lái)說(shuō),支持多種編程語(yǔ)言是重要的,可以滿足不同的開(kāi)發(fā)者的需要。對(duì)于使用者來(lái)說(shuō),GUI 是否提供了你需要的編程語(yǔ)言才是最重要的。

6. 支持的平臺(tái)
對(duì)于 GUI 引擎來(lái)說(shuō),支持多種平臺(tái)是重要的,可以滿足不同的開(kāi)發(fā)者的需要。對(duì)于使用者來(lái)說(shuō),支持多種平臺(tái)也是重要的,你現(xiàn)在開(kāi)發(fā)嵌入式系統(tǒng),過(guò)段時(shí)間你可能要開(kāi)發(fā)一個(gè) APP 控制你設(shè)備,沒(méi)有必要浪費(fèi)時(shí)間去學(xué)習(xí)不同的 GUI。
GUI 是否支持目標(biāo)平臺(tái)的界面風(fēng)格,是否提供跨平臺(tái)的運(yùn)行庫(kù),是否對(duì)平臺(tái)基本的原生功能進(jìn)行了包裝,能否擴(kuò)展新的功能。是否支持平臺(tái)原生輸入法?

7. 可視化的界面設(shè)計(jì)工具

所見(jiàn)即所得方式開(kāi)發(fā)界面可以降低學(xué)習(xí)門(mén)檻,提高開(kāi)發(fā)效率。

8. 可視化的界面設(shè)計(jì)工具是否是用該 GUI 本身開(kāi)發(fā)的
用該 GUI 本身開(kāi)發(fā)的界面設(shè)計(jì)工具,可以驗(yàn)證該 GUI 本身的功能是否強(qiáng)大和穩(wěn)定。
另外用該 GUI 本身開(kāi)發(fā)的界面設(shè)計(jì)工具,才能把界面設(shè)計(jì)工具做得易用。比如 TabControl 控件,在設(shè)計(jì)時(shí)可以切換頁(yè)面,只有用該 GUI 本身開(kāi)發(fā)的界面設(shè)計(jì)工具才容易實(shí)現(xiàn)。

9. 在開(kāi)發(fā)環(huán)境模擬運(yùn)行
運(yùn)行環(huán)境和開(kāi)發(fā)環(huán)境往往不同, 如果每次都要部署一下才能看到效果,那開(kāi)發(fā)速度一定上不來(lái)。

10. 用 XML/JSON 等數(shù)據(jù)來(lái)描述界面
XML/JSON 是聲明式的語(yǔ)法,不但手工編寫(xiě)比寫(xiě)程序容易,也方便借助工具的支持。
對(duì)于嵌入低端嵌入式系統(tǒng)來(lái)說(shuō),XML/JSON 效率不高,最好的辦法是運(yùn)行時(shí)轉(zhuǎn)換成高效的二進(jìn)制格式。就像代碼一樣,編譯之前的代碼給人看,編譯之后的代碼給機(jī)器看。

11. 用 XML/CSS 等數(shù)據(jù)來(lái)描述界面的風(fēng)格
XML/JSON 是聲明式的語(yǔ)法,不但手工編寫(xiě)比寫(xiě)程序容易,也方便借助工具的支持。
把界面風(fēng)格從 UI 描述文件和代碼中剝離出來(lái),也有利于后期的維護(hù),畢竟界面效果是最容易變化的。
對(duì)于嵌入低端嵌入式系統(tǒng)來(lái)說(shuō),XML/JSON 效率不高,最好的辦法是運(yùn)行時(shí)轉(zhuǎn)換成高效的二進(jìn)制格式。就像代碼一樣,編譯之前的代碼給人看,編譯之后的代碼給機(jī)器看。

12. 字體格式
支持點(diǎn)陣字體嗎?支持矢量字體嗎?支持自定義字體格式嗎?支持只加載部分字體到內(nèi)存嗎?配套工具完善嗎?

13. 圖片格式
支持常見(jiàn)的 png/jpg/gif/bmp 格式嗎?支持 SVG 等矢量圖形嗎?能擴(kuò)展支持新的格式嗎?

14. 輸入法

支持拼音輸入法嗎?支持軟鍵盤(pán)的 T9 輸入法嗎?支持硬鍵盤(pán)的 T9 輸入法嗎?支持語(yǔ)音輸入法嗎?支持手寫(xiě)輸入法嗎?可以擴(kuò)展支持新的輸入嗎?是否支持平臺(tái)原生輸入法?

15. 基本架構(gòu)模式
是否內(nèi)置提供支持 MVC、MVP 和 MVVM 等架構(gòu)模式?是否支持 Vue、React 和小程序類似的開(kāi)發(fā)方式?

功能指標(biāo)

1. 高清屏

是否支持高清屏?在 PC 上運(yùn)行時(shí)界面變糊了,在手機(jī)上運(yùn)行時(shí)字體變小了,都是不支持高清屏的特征。不支持高清屏就不用談什么跨平臺(tái)了。

2. 矢量圖 API
矢量圖 API 是非常重要的,強(qiáng)大矢量圖 API 能實(shí)現(xiàn)很多神奇的效果。個(gè)人覺(jué)得 html5 Canvas 2D API 是最好的矢量圖 API。用 cairo、skia、agge 和 nanovg 這些開(kāi)源的庫(kù)很容易實(shí)現(xiàn)類似的 API。
GUI 一定要提供一個(gè)抽象的接口,在不同的情況下,可以無(wú)縫的切換到最優(yōu)的實(shí)現(xiàn)方案上。比如在嵌入式平臺(tái)用 agge,在嵌入式 linux 平臺(tái)用 cairo,在 PC 上用 skia 或 nanovg。

3. 窗口動(dòng)畫(huà)
是否支持窗口動(dòng)畫(huà)?窗口動(dòng)畫(huà)的種類是否夠用?是否可以擴(kuò)展自己的窗口動(dòng)畫(huà)。窗口動(dòng)畫(huà)的效率如何?窗口動(dòng)畫(huà)使用是否方便?

4. 控件動(dòng)畫(huà)
是否支持控件動(dòng)畫(huà)?支持那些控件動(dòng)畫(huà)?是否支持自定義的控件動(dòng)畫(huà)?控件動(dòng)畫(huà)使用是否方便?控件動(dòng)畫(huà)的參數(shù)有哪些?是否可以停止、暫停和播放控件動(dòng)畫(huà)。

5. 內(nèi)置控件是否豐富
是否有日歷選擇控件?是否有文件選擇控件?是否有顏色選擇控件?是否有 RichText 控件?是否有你目前需要的控件和將來(lái)可能用到的控件?

6. 控件組合是否方便
有的 GUI 把控件分成葉子節(jié)點(diǎn)控件和容器控件,label、image、edit 和 button 都是葉子節(jié)點(diǎn)控件。這樣做靈活性很差,往 button 放個(gè)圖片或者動(dòng)畫(huà),往 label 里放個(gè)圖片,往 edit 里放一個(gè)"清除"/"查找"的 button,不是方便的事嗎,為什么要限制呢?

7. 自定義控件
沒(méi)有一個(gè) GUI 能夠滿足所有的需求,如果不支持自定義控件就悲催了。這樣一個(gè)簡(jiǎn)單的需要,在有的 GUI 里卻需要修改 GUI 引擎的代碼,那就不好玩了。

8. 布局 (layout) 參數(shù)
通過(guò)布局參數(shù)控制控件布局,可以讓?xiě)?yīng)用程序適用于不同大小的屏幕。是否支持布局參數(shù),布局功能是否強(qiáng)大,是否可以擴(kuò)展自定義布局?

9. 控件自定義屬性
如果控件支持自定義屬性,用戶可以存放自己的數(shù)據(jù)到控件中,可以避免使用全局變量,是個(gè)極為方便的特性。
如果控件支持自定義屬性,對(duì) GUI 進(jìn)行擴(kuò)展也很方便,比如 AWTK-MVVM 的綁定規(guī)則就使用了用戶自定義屬性,如果將 AWTK-MVVM 移植到 Qt 就很容易,因?yàn)?Qt 也支持自定義屬性,要移植到 emwin 就麻煩不少。

10. 控件:label
label 是最簡(jiǎn)單的控件,要做好也不容易。就像炒飯是廚師的基本功一下,label 就是 GUI 開(kāi)發(fā)者的基本功。 支持 style(字體、顏色和對(duì)齊等各種參數(shù))嗎?支持 unicode 的換行規(guī)則嗎?支持滾動(dòng)顯示嗎?支持省略號(hào)顯示嗎?支持 bidi 算法嗎?支持動(dòng)畫(huà)(比如打字效果和撥號(hào)中那種)。滾動(dòng)顯示支持得到焦點(diǎn)時(shí)才滾動(dòng)嗎?支持垂直方向排版嗎?
當(dāng)然把 label 和 scroll_label 分成兩個(gè)控件好點(diǎn),實(shí)現(xiàn)簡(jiǎn)單而且在低端平臺(tái)無(wú)需支持一下不必要的特性。總之,用戶需要時(shí)就要有這些功能。

11. 控件:image
支持旋轉(zhuǎn)和縮放嗎? 支持旋轉(zhuǎn)和縮放動(dòng)畫(huà)嗎?支持居中、平鋪、x 平鋪、y 平鋪、九宮格、三宮格、縮放和按比例縮放等各種繪制效果嗎?支持顯示文本嗎?支持點(diǎn)擊嗎?支持勾選嗎?

12. 控件:edit
支持 edit 不難,要做好卻不容易:支持拷貝、剪切和粘貼嗎?支持撤銷和重做嗎?支持通過(guò)鍵盤(pán)和鼠標(biāo)選擇嗎?支持輸入法嗎?可以根據(jù)各種輸入類型自動(dòng)選擇軟鍵盤(pán)嗎?可以自定義軟鍵盤(pán)嗎?可以指定獲得焦點(diǎn)時(shí)軟件盤(pán)是否自動(dòng)開(kāi)啟嗎?可以指定獲失去焦點(diǎn)時(shí)軟件盤(pán)是否自動(dòng)關(guān)閉嗎?支持設(shè)置有效性檢查函數(shù)嗎?支持失去焦點(diǎn)時(shí)自動(dòng)修復(fù)輸入值嗎?支持失去焦點(diǎn)時(shí)提示輸入有誤嗎?支持輸入提示嗎?支持輸入有變化時(shí)提示嗎?支持時(shí)間、日期和 IP 地址等格式輸入嗎?

13. 控件:button
是否支持長(zhǎng)按?是否支持設(shè)置長(zhǎng)按時(shí)間?是否支持重復(fù)觸發(fā)?是否支持圖標(biāo)?是否支持子控件(如圖片和動(dòng)畫(huà))?

14. 控件:軟鍵盤(pán)
軟鍵盤(pán)使用 XML/JSON 描述嗎?可以定制軟鍵盤(pán)(鍵盤(pán)布局和風(fēng)格)嗎?定制軟鍵盤(pán)需要修改代碼嗎?軟鍵盤(pán)可以用純方向鍵切換焦點(diǎn)嗎?

15. 控件:table view
支持放入進(jìn)度條、選擇框、按鈕、圖片和編輯器嗎?支持 View 和 Model 分離嗎?能支持千萬(wàn)級(jí)別的數(shù)據(jù)嗎?

16. 控件:code editor
有些高手常用兩個(gè)指標(biāo)來(lái)衡量 GUI 的功能:1. 能用它開(kāi)發(fā)一個(gè)記事本嗎?2. 能用它開(kāi)發(fā)一個(gè)界面設(shè)計(jì)器嗎?如果支持 code editor,就可以用它實(shí)現(xiàn)一個(gè)功能更強(qiáng)大的記事本。

17. 控件:html view
HTML View 可以用來(lái)實(shí)現(xiàn)在線幫助、報(bào)表預(yù)覽功能或者一些特殊的界面效果。

18. style
是否支持設(shè)置圓角半徑?是否支持對(duì)部分角設(shè)置圓角?是否可以分別設(shè)置上下左右的邊框?是否支持自定義的狀態(tài)?

19. 對(duì)話框高亮
彈出對(duì)話框時(shí):是否支持對(duì)話框背景變暗?是否支持對(duì)話框背景動(dòng)態(tài)變暗?是否支持對(duì)話框背景動(dòng)態(tài)變模糊?是否支持新的對(duì)話框高亮策略。

20. 鍵盤(pán)切換焦點(diǎn)
是否支持鍵盤(pán)切換焦點(diǎn)?是否支持上下左右切換焦點(diǎn)(有的設(shè)備只有方向鍵和確認(rèn)鍵)?是否支持設(shè)置切換焦點(diǎn)的鍵值?

21. 截屏
是否支持截屏?

22. 操作反饋
是否支持按鍵音?不同的控件支付支持不同的按鍵音?是否支持觸屏震動(dòng)?

23. Accessibility
是否支持字體整體放大?是否支持讀屏軟件?

24. 存儲(chǔ)接口
有沒(méi)有提供跨平臺(tái)的存儲(chǔ)接口,如文件系統(tǒng)、配置信息和數(shù)據(jù)庫(kù)。

25. 資源管理
有沒(méi)有統(tǒng)一的資源管理接口?資源管理也是很麻煩的事情:比如圖片,它可能存放在 flash 中,可能存放在文件系統(tǒng)中,也可能放在服務(wù)器上;對(duì)于普通屏和高清屏需要加載不同的文件;不同的語(yǔ)言也可能需要加載不同的文件;同一個(gè)軟件在不同的系統(tǒng)上運(yùn)行,可能要加載不同的格式,有的系統(tǒng)只能使用位圖,有的系統(tǒng)可以使用 png/jpg;圖片還需緩存,緩存還需要清理。所有這些東西,如果讓?xiě)?yīng)用程序來(lái)處理,那將是一場(chǎng)噩夢(mèng)!
強(qiáng)大的資源管理器,可以屏蔽所有這些細(xì)節(jié),讓?xiě)?yīng)用程序無(wú)需感知。比如,你需要"earth"這個(gè)圖片,你無(wú)需關(guān)心它的位置和格式,無(wú)需關(guān)心屏幕密度和語(yǔ)言的影響,系統(tǒng)自動(dòng)加載最佳的圖片文件。

26. 事件處理流程
事件有沒(méi)有區(qū)分 Bubbling 和 capturing 階段?事件在不同階段是否可以中止執(zhí)行?是否有 pointer down abort 或 pointer down cancel 之類的事件?

27. framebuffer
是否支持單 framebuffer?是否支持雙 framebuffer?是否支持 3 framebuffer?是否支持 fragment framebuffer? 是否支持單色屏?是否能支持各種特殊的格式的 framebuffer? 是否支持 SPI 等特殊硬件的屏?

28. 光標(biāo)
在非觸摸屏的系統(tǒng)中,光標(biāo)仍然是必不可少的功能。是否支持設(shè)置光標(biāo)?是否支持根據(jù)當(dāng)前的控件自動(dòng)切換光標(biāo)?是否支持根據(jù)當(dāng)前的狀態(tài)切換光標(biāo)?

29. 窗口置頂
是否支持將指定窗口置頂?

30. 窗口管理
是否支持打開(kāi)窗口時(shí)關(guān)閉當(dāng)前窗口?是否支持將打開(kāi)的窗口提到前臺(tái)?是否可以關(guān)閉指定的窗口?是否支持回到 Home 窗口?是否可以設(shè)置窗口的關(guān)閉特性(唯一實(shí)例、禁止關(guān)閉、直接關(guān)閉和需要確認(rèn)后關(guān)閉)? 對(duì)話框是否支持模態(tài)和非模態(tài)?

31. 基礎(chǔ)庫(kù)是否強(qiáng)大
是否提供了強(qiáng)大而且跨平臺(tái)的基礎(chǔ)庫(kù)?特別是 C 語(yǔ)言開(kāi)發(fā),字符串、動(dòng)態(tài)數(shù)組、鏈表、對(duì)象、事件發(fā)射器、定時(shí)器、字符串編碼轉(zhuǎn)換、文件、線程、互斥鎖、信號(hào)量、時(shí)間、日期、動(dòng)態(tài)庫(kù)加載、共享內(nèi)存和各種流的抽象都是非常有用的,如果提供一套穩(wěn)定可靠的基礎(chǔ)庫(kù),可以大大降低應(yīng)用程序的開(kāi)發(fā)成本。

32. 是否支持屏幕旋轉(zhuǎn)
在沒(méi)有 GPU 的情況下,屏幕旋轉(zhuǎn)會(huì)大幅降低性能,應(yīng)該盡量避免屏幕旋轉(zhuǎn)。但是在項(xiàng)目早期,在買(mǎi)來(lái)的開(kāi)發(fā)板上開(kāi)發(fā),確實(shí)可能有旋轉(zhuǎn)的需求,如果 GUI 支持旋轉(zhuǎn),也是很方便的。
在 Android/iOS 上,有些應(yīng)用橫屏使用更加方便,對(duì)于一個(gè)跨平臺(tái)的 GUI,支持動(dòng)態(tài)旋轉(zhuǎn)無(wú)疑也是加分項(xiàng)。

33. 是否支持流行的動(dòng)畫(huà)格式
如果支持 rive 和 lottie 等流行的動(dòng)畫(huà)格式,在應(yīng)用程序中直接播放這些動(dòng)畫(huà),那么美術(shù)輸出的動(dòng)畫(huà)可以無(wú)縫的對(duì)接到應(yīng)用程序中來(lái)。可以讓?xiě)?yīng)用程序做得更酷更炫,同時(shí)不會(huì)增加開(kāi)發(fā)的工作量。

性能

1. 高效的算法

是否支持臟矩形算法、3 framebuffer 和 二進(jìn)制格式。開(kāi)發(fā)時(shí)使用 XML 方便程序員修改,運(yùn)行時(shí)使用高效二進(jìn)制格式提高運(yùn)行效率。

2. 2D 硬件加速

是否支持常見(jiàn)的加速接口,如 STM32 的 DMA2D 和 NXPPXP。廠家是否可以擴(kuò)展自己的加速接口。

3. 3D 硬件加速
是否支持 OpenGL、DirectX、Vulkan 和 Metal 等。

4. 低端平臺(tái)
最低能支持什么樣的硬件平臺(tái)?功能強(qiáng)大體積通常比較大,這對(duì) GUI 的可配置性是一個(gè)極大的考驗(yàn)。

5. 啟動(dòng)時(shí)間
1 秒啟動(dòng)?5 秒啟動(dòng)?還要等半分鐘?

國(guó)際化

1. Unicode

是否支持 UTF-8 和 UTF-16 編碼?

2. 多國(guó)語(yǔ)言輸入法

是否支持 T9 輸入法?是否可以支持新的輸入法?

3. 字符串翻譯

是否支持字符串翻譯?是否支持實(shí)時(shí)切換語(yǔ)言(不需重啟)?

4. 圖片翻譯
是否支持圖片翻譯(既切換語(yǔ)言時(shí),自動(dòng)切換某些圖片)?

5. 文字雙向排版

是否支持阿拉伯文字的雙向排版?

6. 編碼轉(zhuǎn)換函數(shù)

是否提供的跨平臺(tái)的編碼轉(zhuǎn)換函數(shù)?

軟件質(zhì)量

1. 單元測(cè)試

是否有完整的單元測(cè)試?單元測(cè)試是否全部通過(guò)?

2. 內(nèi)存耗盡處理流程
內(nèi)存耗盡時(shí)是直接崩潰?還是讓?xiě)?yīng)用程序能優(yōu)雅的退出?

3. 內(nèi)存泄露檢查機(jī)制
是否有內(nèi)存泄露檢查機(jī)制?是否能用 valgrind 進(jìn)行內(nèi)存泄露和溢出檢查?

4. 代碼靜態(tài)檢查
是否通過(guò)了 cppcheck、infer 或其它靜態(tài)檢查工具的檢查?

5. 事件錄制和重放功能
是否可以錄制用戶操作的事件,并通過(guò)重放進(jìn)行壓力測(cè)試?

6. Appuim 進(jìn)行自動(dòng)測(cè)試
是否支持 Appuim,通過(guò) javascript 等腳本自動(dòng)化集成測(cè)試?GUI 引擎本身是否有回歸測(cè)試用例?

【版權(quán)聲明】文章為ZLG開(kāi)發(fā)者社區(qū)用戶原創(chuàng)內(nèi)容,未經(jīng)授權(quán)不得轉(zhuǎn)載,點(diǎn)擊“閱讀原文”查看原文。歡迎更多用戶到社區(qū)交流互動(dòng)、創(chuàng)作博文,一經(jīng)采用,可獲得百元京東E卡。

地址:https://developer.zlg.cn(長(zhǎng)按復(fù)制到PC端打開(kāi))

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部