1. 程式人生 > >Qt:5.8新特性,qmlc使用以及效果

Qt:5.8新特性,qmlc使用以及效果

關於qmlc

5.8在昨天終於釋出了,在很艱辛的下載後,終於在今天用上了。
在5.8各個新特性中,我特別看重qmlc這個。

那麼qmlc是個什麼東西呢,官方的描述是這樣的

Implemented caching of code and data structures generated from .qml and .js files to disk, reducing start-up time and memory consumption. The resulting .qmlc and .jsc cache files are memory mapped.

就是說把已經生成好的記憶體結構體放在了本地,以加速下次載入。
也就是說,是用來縮減編譯時間的。
注意不要被迷惑了,這裡講的程式碼和結構 code and data structures

,特指編譯時的產物,開發的時候是不能直接接觸的。

而關於編譯時間,經常使用profiler的朋友應該也應該會注意到,對於QtQuick程式的載入,編譯是一個非常耗時的開銷,巴不得去掉它。
以前有Quick編譯器,但是隻有企業版有,開源版只能望塵莫及。
但是現在5.8,官方拿出了qmlc,還是說非常有誠意的。讓開源版的小夥伴們也能體驗到快速載入。

使用qmlc

其實在安裝完qmlc後,我還在想要怎麼使用。不過偶然間,發現在本地發現了qmlc檔案,才發現這個是不需要配置的,預設就是開啟。
我的qml檔案是暴露在本地的,並且QQmlApplicationEngine直接載入在本地的qml檔案執行。


這裡寫圖片描述

然後很激動了跑了下profiler,一共兩次,第一次是刪除了所有的qmlc檔案下跑的,也就是不帶快取,第二次是在有qmlc檔案下跑的

第一次:
這裡寫圖片描述

第二次:
這裡寫圖片描述

果然名不虛傳,在快取到本地後,編譯速度被大幅度縮減。
從16毫秒,縮減到了2毫秒。

不過到了這裡,我知道有小夥伴要說了,14毫秒加速,有什麼實際意義嘛。
所以我要說下,我這個只是一個很簡單的工程,程式碼也就一點點。而且我是效能不錯的PC上。如果在移動端或者嵌入式端,這就有非常明顯的意義了。有可能是2秒,縮減到300毫秒這樣的提升。

後來多試驗了幾次發現,要生成qmlc,不一定要把qml放在本地,放在qrc裡也是可以的。
如果是放在qrc裡面的話,qmlc會儲存在檔案系統中一個合適的位置放qmlc檔案。檔名看起來是一個摘要值。
對於Windows,位置就是 AppData\Local\exe名字\cache


對於macOS,位置就是Library/Caches/app名字/qmlcache/

另外吐槽一下,官方對這個qmlc描述實在太少了,截止我寫這個blog,我只在5.8新特性中找到那一句話,也就是上面那句。其他描述,比如說怎麼關閉也沒找到。如果有人找到了望分享下。