溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

GUI引擎評價指標是什么

發(fā)布時間:2021-12-29 13:59:58 來源:億速云 閱讀:120 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“GUI引擎評價指標是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

GUI 引擎評價指標

github 上的開源 GUI 引擎至少有數(shù)十個,如何去評估它們的優(yōu)劣,如何選擇你需要的 GUI 引擎?這個是艱巨的任務(wù),每個人的需求不一樣,GUI 開發(fā)者的意圖也不同,很難找到統(tǒng)一的標準去選出最好的 GUI。QT 是最強大的,沒有之一,但也不一定適合你。

不管怎么樣,總有些指標可以提供有價值的參考,盡管這些指標在遇到不同使用的場景,不同的公司背景,不同的個人喜好,它們所占的權(quán)重也大不相同。但是并不能抹殺這些指標的價值,關(guān)鍵在于如何根據(jù)自己的需要調(diào)整它們的比重。

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

如果諸葛大俠不介意,為了活躍氣氛,我就把本文提到的指標稱為《諸葛不亮-李先靜 GUI 引擎評價指標》,把諸葛大俠放在前面,是表示對他的感謝,把我的名字放在里面,是由我承擔一些人的指責。

先開個頭,算是拋磚引玉吧。后續(xù)會不斷完善,希望大家也把自己選擇 GUI 引擎時的指標補充進來。

1. 基本指標

1.1 開發(fā)者的心態(tài)

當你用他們的 GUI 時,他們是感謝你的支持,還在覺得你欠他們的呢?如果他們沒有心存感謝,你最好別用。否則,遇到問題時,你怎么能指望他們幫你解決呢?

1.2 幫助文檔

是否有《API 手冊》、《使用手冊》、《常見問題》、《移植文檔》和《HowTo》,文檔是否在定期更新?

1.3 示例代碼

是否有簡單的入門示例、各種控件的的用法、完整功能的示例?

1.4 代碼風格

目錄名、文件名、類名、函數(shù)名、函數(shù)參數(shù)、局部變量名、全局變量名、注釋和縮進是否一致。

1.5 編程語言

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

1.6 支持的平臺

對于 GUI 引擎來說,支持多種平臺是重要的,可以滿足不同的開發(fā)者的需要。對于使用者來說,支持多種平臺也是重要的,你現(xiàn)在開發(fā)嵌入式系統(tǒng),過段時間你可能要開發(fā)一個 APP 控制你設(shè)備,沒有必要浪費時間去學(xué)習(xí)不同的 GUI。

GUI 是否支持目標平臺的界面風格,是否提供跨平臺的運行庫,是否對平臺基本的原生功能進行了包裝,能否擴展新的功能。

1.7 可視化的界面設(shè)計工具

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

1.8 可視化的界面設(shè)計工具是否是用該 GUI 本身開發(fā)的

用該 GUI 本身開發(fā)的界面設(shè)計工具,可以驗證該 GUI 本身的功能是否強大和穩(wěn)定。

另外用該 GUI 本身開發(fā)的界面設(shè)計工具,才能把界面設(shè)計工具做得易用。比如 TabControl 控件,在設(shè)計時可以切換頁面,只有用該 GUI 本身開發(fā)的界面設(shè)計工具才容易實現(xiàn)。

1.9 在開發(fā)環(huán)境模擬運行

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

1.10 用 XML/JSON 等數(shù)據(jù)來描述界面

XML/JSON 是聲明式的語法,不但手工編寫比寫程序容易,也方便借助工具的支持。

對于嵌入低端嵌入式系統(tǒng)來說,XML/JSON 效率不高,最好的辦法是運行時轉(zhuǎn)換成高效的二進制格式。就像代碼一樣,編譯之前的代碼給人看,編譯之后的代碼給機器看。

1.11 用 XML/CSS 等數(shù)據(jù)來描述界面的風格

XML/JSON 是聲明式的語法,不但手工編寫比寫程序容易,也方便借助工具的支持。

把界面風格從 UI 描述文件和代碼中剝離出來,也有利于后期的維護,畢竟界面效果是最容易變化的。

對于嵌入低端嵌入式系統(tǒng)來說,XML/JSON 效率不高,最好的辦法是運行時轉(zhuǎn)換成高效的二進制格式。就像代碼一樣,編譯之前的代碼給人看,編譯之后的代碼給機器看。

1.12 字體格式

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

1.13 圖片格式

支持常見的 png/jpg/gif/bmp 格式嗎?支持 SVG 等矢量圖形嗎?能擴展支持新的格式嗎?

1.14 輸入法

支持拼音輸入法嗎?支持軟鍵盤的 T9 輸入法嗎?支持硬鍵盤的 T9 輸入法嗎?支持語音輸入法嗎?支持手寫輸入法嗎?可以擴展支持新的輸入嗎?

1.15 基本架構(gòu)模式

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

2. 功能指標

2.1 高清屏

是否支持高清屏?在 PC 上運行時界面變糊了,在手機上運行時字體變小了,都是不支持高清屏的特征。不支持高清屏就不用談什么跨平臺了。

2.2 矢量圖 API

矢量圖 API 是非常重要的,強大矢量圖 API 能實現(xiàn)很多神奇的效果。個人覺得 HTML5 Canvas 2D API 是最好的矢量圖 API。用 cairo、skia、agge 和 nanovg 這些開源的庫很容易實現(xiàn)類似的 API。

GUI 一定要提供一個抽象的接口,在不同的情況下,可以無縫的切換到最優(yōu)的實現(xiàn)方案上。比如在嵌入式平臺用 agge,在嵌入式 linux 平臺用 cairo,在 PC 上用 skia 或 nanovg。

2.3 窗口動畫

是否支持窗口動畫?窗口動畫的種類是否夠用?是否可以擴展自己的窗口動畫。窗口動畫的效率如何?窗口動畫使用是否方便?

2.4 控件動畫

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

2.5 內(nèi)置控件是否豐富

是否有你目前需要的控件和將來可能用到的控件。

2.6 控件組合是否方便

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

2.7 自定義控件

沒有一個 GUI 能夠滿足所有的需求,如果不支持自定義控件就悲催了。這樣一個簡單的需要,在有的 GUI 里卻需要修改 GUI 引擎的代碼,那就不好玩了。

2.8 布局 (layout) 參數(shù)

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

2.9 控件自定義屬性

如果控件支持自定義屬性,用戶可以存放自己的數(shù)據(jù)到控件中,可以避免使用全局變量,是個極為方便的特性。

如果控件支持自定義屬性,對 GUI 進行擴展也很方便,比如 AWTK-MVVM 的綁定規(guī)則就使用了用戶自定義屬性,如果將 AWTK-MVVM 移植到 Qt 就很容易,因為 Qt 也支持自定義屬性,要移植到 emwin 就麻煩不少。

2.10 控件:label

label 是最簡單的控件,要做好也不容易。就像炒飯是廚師的基本功一下,label 就是 GUI 開發(fā)者的基本功。 支持 style(字體、顏色和對齊等各種參數(shù))嗎?支持 unicode 的換行規(guī)則嗎?支持滾動顯示嗎?支持省略號顯示嗎?支持 bidi 算法嗎?支持動畫(比如打字效果和撥號中那種)。滾動顯示支持得到焦點時才滾動嗎?

當然把 label 和 scroll_label 分成兩個控件好點,實現(xiàn)簡單而且在低端平臺無需支持一下不必要的特性??傊脩粜枰獣r就要有這些功能。

2.11 控件:image

支持旋轉(zhuǎn)和縮放嗎? 支持旋轉(zhuǎn)和縮放動畫嗎?支持居中、平鋪、x 平鋪、y 平鋪、九宮格、三宮格、縮放和按比例縮放等各種繪制效果嗎?支持顯示文本嗎?支持點擊嗎?支持勾選嗎?

2.12 控件:edit

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

2.13 控件:button

是否支持長按?是否支持設(shè)置長按時間?是否支持重復(fù)觸發(fā)?是否支持圖標?是否支持子控件(如圖片和動畫)?

2.14 控件:軟鍵盤

軟鍵盤使用 XML/JSON 描述嗎?可以定制軟鍵盤(鍵盤布局和風格)嗎?定制軟鍵盤需要修改代碼嗎?軟鍵盤可以用純方向鍵切換焦點嗎?

2.15 控件:table view

支持放入進度條、選擇框、按鈕、圖片和編輯器嗎?支持 View 和 Model 分離嗎?能支持千萬級別的數(shù)據(jù)嗎?

2.16 控件:code editor

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

2.17 style

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

2.18 對話框高亮

彈出對話框時:是否支持對話框變暗?是否支持對話框動態(tài)變暗?是否支持對話框動態(tài)變模糊?是否支持新的高亮策略。

2.19 鍵盤切換焦點

是否支持鍵盤切換焦點?是否支持上下左右切換焦點(有的設(shè)備只有方向鍵和確認鍵)?是否支持設(shè)置切換焦點的鍵值?

2.20 截屏

是否支持截屏?

2.21 操作反饋

是否支持按鍵音?不同的控件支付支持不同的按鍵音?是否支持觸屏震動?

2.22 Accessibility

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

2.23 存儲接口

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

2.24 資源管理

有沒有統(tǒng)一的資源管理接口?資源管理也是很麻煩的事情:比如圖片,它可能存放在 flash 中,可能存放在文件系統(tǒng)中,也可能放在服務(wù)器上;對于普通屏和高清屏需要加載不同的文件;不同的語言也可能需要加載不同的文件;同一個軟件在不同的系統(tǒng)上運行,可能要加載不同的格式,有的系統(tǒng)只能使用位圖,有的系統(tǒng)可以使用 png/jpg;圖片還需緩存,緩存還需要清理。所有這些東西,如果讓應(yīng)用程序來處理,那將是一場噩夢!

強大的資源管理器,可以屏蔽所有這些細節(jié),讓應(yīng)用程序無需感知。比如,你需要"earth"這個圖片,你無需關(guān)心它的位置和格式,無需關(guān)心屏幕密度和語言的影響,系統(tǒng)自動加載最佳的圖片文件。

3. 性能

3.1 高效的算法

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

3.2 2D 硬件加速

是否支持常見的加速接口,如 STM32 的 DMA2D 和 NXP 的 PXP。廠家是否可以擴展自己的加速接口。

3.3 3D 硬件加速

是否支持 OpenGL、DirectX、Vulkan 和 Metal 等。

3.4 低端平臺

最低能支持什么樣的硬件平臺?功能強大體積通常比較大,這對 GUI 的可配置性是一個極大的考驗。

3.5 啟動時間

1 秒啟動?5 秒啟動?還要等半分鐘?

4. 國際化

4.1 Unicode。

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

4.2 多國語言輸入法。

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

4.3 字符串翻譯。

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

4.4 圖片翻譯。

是否支持圖片翻譯(既切換語言時,自動切換某些圖片)?

4.5 文字雙向排版。

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

4.6 編碼轉(zhuǎn)換函數(shù)。

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

5 軟件質(zhì)量

5.1 單元測試

是否有完整的單元測試?單元測試是否全部通過?

5.2 內(nèi)存耗盡處理流程

內(nèi)存耗盡時是直接崩潰?還是讓應(yīng)用程序能優(yōu)雅的退出?

5.3 內(nèi)存泄露檢查機制

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

5.4 代碼靜態(tài)檢查。

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

5.5 事件錄制和重放功能

是否可以錄制用戶操作的事件,并通過重放進行壓力測試?

5.6 Appuim 進行自動測試

是否支持 Appuim,通過 javascript 等腳本自動化集成測試?

“GUI引擎評價指標是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

gui
AI