挖井

类库大魔王的挖井日记

挖一口属于自己的井


初试QtQuickCompiler

QtQuickCompiler出来有一些日子了,自从istkani在iOS App Store上架后,就没怎么关心过Qt的进展,只是差不多每天例行扫一遍Qt的邮件列表而已。昨天心血来潮想试试QtQuickCompiler到底有多神,首先快速浏览了一下官方文档,发现使用还是很简单的,然后开始照文档的说明一步一步操作。

QtQuickCompiler是在Qt企业版中才有的,企业版按不同的系统平台分别定价,移动版支持iOS、Android和WinRT三个平台,打包价每月150刀,对于个人开发者尤其是没用Qt开发的产品实现盈利的开发者实在是个不小的负担!最近在搞活动,前两个月只要1刀就可以了。不过还有一种不花钱的办法,就是试用,用邮箱注册一个Qt账号,可得到1个月的试用license!我就是用的这个办法,登录进去可以找到Linux/Windows/Mac下的安装包,Qt或者说Digia的CDN很糟糕,在我朝经常不能找到最近的服务器,下载没速度,这得自己想办法解决。下载了安装包后,我是用Mac的,同时也把license文件下载下来,改名成.qt-license放在HOME目录下,然后开始安装。安装程序是Qt通用的Installer Framework做的,反正也就这样,前几步是确认license的,后面是选要安装的内容,我选了Android,iOS,Mac三项,还有Tools和Enterprise Addons全部。因为前面说过Qt(Digia)的CDN有问题,所以直接下载很可能没速度,好在安装程序在开始下载之前,对话框左下角有个设置按钮,可以设置代理服务器的,这个很重要,至少我不设这个东西的话下载一直是0速度,设了个代理服务器,平均速度大约在500KB/s。漫长的下载安装过程完成后,就可以正式使用了。

可以看到qmake相同目录下有一个叫qtquickcompiler的可执行文件,可以直接在terminal里运行,当然你得有license。比较简单的办法是在qmake命令行里指定参数,比如qmake CONFIG+="release qtquickcompiler",更简单的办法是直接在工程文件.pro里写死CONFIG+=qtquickcompiler

还有要做的是,要把所有qml文件和相关的js文件全都打包到资源里,程序里也不要用file://来加载qml文件,要用qrc://来加载。如此改完源代码,之后就可以make了。从make执行的命令行可以看到,qtquickcompiler是把每个qml文件和js文件都转换成一个.cpp文件,跟moc做的事类似的风格,然后利用C++编译器把他们全都编译成本地代码。

从官方文档的描述中可以看到,这种方法有几个好处。脚本语言常见的做法是用JIT,但这样脚本载入速度仍然不如本地代码快。其次Apple的iOS App Store的政策是app不能动态生成本地代码,貌似Windows RT也有这个限制,这个我还真不清楚,以前听说过,以为所有的脚本语言都不能用,但后来又看到有app用了python,Lua之类,不知道具体是怎么回事,这次看了这个说明才有点回过神来,原来只是限制了JIT,那么像QML那样完全用解释执行的方式就规避了这个政策。但解释执行意味着速度慢,所以用了QtQuickCompiler这种方式又可以提速了。不过QtQuickCompiler这种生成C++中间代码的方式最后仍然是通过QtQuick的运行时来执行QML逻辑的,所以速度上应该仍有相比用纯粹C++写的代码有所损失的。

我把istkani用qtquickcompiler编译了一下,似乎启动速度确实快了一些,因为没有做实际测试,所以到底是不是心理作用也不知道了,哈哈。也该升级一下istkani了,这段时间一直在玩go语言做web后端开发,之前定下的一些想法一直没付诸实践啊。

本文地址:

https://minidump.info/blog/2014/07/try-qtquickcompiler/

上一篇

完成Memcached/Redis支持

花了好几天时间,终于给Yiili的程序加上了Memcached和Redis的支持。前面也说过,我只是用它们来实现缓存的功能,把一些本来需要查数据库得到的数据缓存起来,比如帖子列表、话题列表、分类列表等,目前看来,效果确实是有一点的,但因为测试环境的帖子太少,还不能看出来以后帖子多起来的时候效果...…

Startup 全文阅读
下一篇

Go语言学习进展

学Go语言已经有一段时间了,其实之前就一直在改Yiili就是用Go语言写的,但毕竟只是在别人已经比较完整的程序上修修补补而已。从周日开始总共花了近3天时间,把公司那个项目的消息转发服务器用Go语言实现了。主要还是不够熟练,很多基本的东西仍然要不停地翻说明文档和在网上查解决方案,所以比较慢,相信...…

Go 全文阅读