作者:韦易笑
链接:https://www.zhihu.com/question/24461881/answer/140104855
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
短平快的话:
1. Electron:js开发界面,可用cpp扩展
2. PyQt5: Py开发界面,可用cpp扩展
3. QWebView:js开发界面,py cpp做后端(非界面部分)
比开发速度,上面三个方案完爆c#
Qt5以后,Qt全面使用gpu加速绘制。
微软自己都很少用 WPF,做个 vscode还要去用 electron。
界面脚本化是大势所趋,弄个界面就该快,改两行代码按个快捷就该跑起来,避免改个文件一编译就等半天,或者出个bug找两天:
编码-测试-编码 这个核心工作流越短越好。上面三个方案都跨平台,况且人的时间本来就有限,上面几门技术学了你不亏,其他好多地方都用得上,关键是开发效率都比c#高。
再比较下性能:https://www.youtube.com/watch?v=8O-0k4MLKs8
Qt 5.6 MinGW 和 .NET 4.5 WPF 跑同一个测试,Qt 的速度是 WPF的两倍!
主要是两个技术序列:
1. 基于web技术的桌面产品,比如vscode,atom,Slack,网易云音乐,钉钉之类的成熟应用挺多,文档也丰富,问问题有人答,搜问题搜得到。
短短两年间,这么多来自微软,Facebook, Slack,Docker等公司的桌面产品使用 Electron开发出来,更多的可以到:Electron Apps自己看。
2. 基于PyQt的桌面产品:DropBox client,R Studio,Calibre,Eric Python IDE, Spyder,PDF Catalog Creator for Magento,出活快,写小工具用它根飞一样,做专业系统可以和C++Qt无缝整合。
R Studio
R Studio
Spyder
Spyder
上面两张 R Studio / Spyder 的截图,PyQt做的,不算简单吧,这界面,想看酷炫的可以去看 PyQt的 demo,不要觉得 PyQt有多大, DropBox客户端打包出来 24MB,比很多手机app都小。
Electron 内核整合了 NodeJS,所有 NodeJS能用的模块 js都能用,比如:
node-ffi/node-ffi模块,可以让你直接调用 C++写的动态库,不需要用C++写个node扩展:
varffi=require('ffi');varlibm=ffi.Library('libm',{'ceil':['double',['double']]});libm.ceil(1.5);// 2// You can also access just functions in the current process by passing a nullvarcurrent=ffi.Library(null,{'atoi':['int',['string']]});current.atoi('1234');// 1234
Python/PyQt也有类似的接口。
WPF线上产品不考虑,不要看着你们办公室没人用xp就以为天下没xp了,你去二三线城市的网吧里看看,大范围的xp。现在这个时间点国内还有 45%的电脑跑xp,这问题三年内不会缓解,你要做线上系统你基本不可能抛弃这群用户,做内部工具又没有上面三个快捷,更何况跨平台问题。
虽然我承认 C#是一门好语言,但堆逻辑还是没有 js,python之类的快,且不管 C#还是 WPF,应用面太窄,学会了将来能用的地方也不多,不值得投入。而上面我给你推荐的三套方案,所涉及到的技术应用范畴都广的多,比如你学会了js/Electron,可以无缝把你桌面应用迁移到 web上,比如同时开发web版本,可以稍微该一下做成移动app,学了python/qt,也有好多别的事情可以做。
所以,学一个东西要考虑它本身的价值
ps:用过win32,owl,vcl,mfc,c#,tk,wx,手撸DirectUI,qt
不会坑你