当前位置: 首页 > news >正文

跨平台应用——Qt VS HTML5(上)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

尽管对于面向大众消费市场的应用来讲,为每个平台构建一个独立的原生App已经被证明是当下最成功的方法,但跨平台仍然很有意义。在本文中,我们来看看最受欢迎的选择,使用HTML5的混合Web应用和积极进取的挑战者Qt

移动开发:跨平台应用——Qt VS HTML5(上)

为什么选择Qt?

那些熟悉Qt历史的人看到它被描述为“积极进取”可能会感到惊讶。Qt一开始被设计来构建跨平台的桌面应用,它的创始人在1994年开始为它工作!然而,当诺基亚收购Trolltech后,Qt开始对移动开发感兴趣,公司开始大力发展Qt,大量投资,想让它成为构建移动应用的理想工具。不幸的是,诺基亚刚刚作出这一战略决定没多久,iPhone面世了。iPhone改变了游戏规则,移动应用构建很快从面向带数字键盘和Qwerty键盘的设备转向以触摸操作为主的设备。前Trolltech工程师意识到他们需要一个非常特别的方式来创建应用支持诺基亚参与竞争。

当史蒂夫·乔布斯在iPhone面世时说iPhone比竞争对手领先五年时,基本上是正确的。可能因为Google的高官们意识到了iPhone的领先优势,Android已经缩短了一些差距。不幸的是,诺基亚最终放弃了它自己的基于Qt的设备,转而支持Windows Phone,然而他们在软件上花费了太长的时间,最后他们在生态系统的竞争中远远落在后面。他们把Qt出售给了一个主要的服务供应商——Digia,Digia最近为Qt这个产品建立了一个独资的实体——the Qt Company。只有从诺基亚完全解脱出来后,Qt才又回归到它作为跨平台框架的本源,开始支持主流的移动平台。然而,与此同时,其他人已经看到了诺基亚投资移动应用建立起来的伟大基础,因此,BlackBerry 10(黑莓10),Jolla Sailfish(旗鱼),Ubuntu Mobile和Tizen平台都选择Qt作为核心框架。

从个人角度来说,在2011年早些时候,一些开发人员用Qt为Symbian(塞班)重写了一个流行的iOS游戏。当时UI设计和通用调试工具还有点不成熟,但在工作过的所有平台中,它拥有最简单的学习曲线和最愉快的开发经验——尽管Qt的核心使用了对开发者不太友好但高性能的C++,但Qt甚至在某些配置相当低的硬件上也达到了60fps的性能。学习Qt新的UI技术——Qt Quick相当简单,您可以在短短几天内为游戏构建出菜单界面。

为什么选择 HTML5,或者不选择?

HTML5是开发者在构建跨平台移动应用时最流行的选择,然而它似乎慢慢有点儿失宠。Web browsers和Web views在每一个平台上都可用,web开发者可以把创建网站的技术平移到构建App上。像Cordova(PhoneGap之类的开源框架让使用HTML5的开发者可以访问移动设备的附加功能,并且将应用打包成每个平台的原生格式也很简单。额外的好处是,您通常可以用最小的付出,同时拥有一个基于Web的应用和一个放在应用商店里的应用。在构建以UI为中心的应用时,HTML5通常比原生应用更有效率。当涉及到使用库和框架来构建移动web应用时,HTML5也有一些尴尬。混合web应用程序有一个特别的优势(至少在iOS上),能够直接更新他们的代码,避开应用程序商店的审查过程(除了重大变化)。

移动开发:跨平台应用——Qt VS HTML5(上)

鉴于其普遍性和庞大的开发者基础,为什么HTML5不是默认的跨平台方法?尽管有许多优点,混合web应用开发者一直在和性能问题做斗争(一定程度上是由于不完整或过时的webview实现造成的,在最新版本的iOS和Android上,这个问题已经被修复了,尽管这将需要一段时间来渗透整个安装基数)。还有一个问题是各种各样的移动浏览器对标准的支持乱七八糟(这点正在改善但还远远没有彻底解决)。Web技术还没有真的被设计来满足移动用户现在期待的充满动画效果的UI。

一些非常高调的消费类初创公司已经公开从web混合应用切换到了原生移动应用。关于这些切换,最常见的说法是缺乏足够的相关工具。可以肯定的是,让web apps在内存受限的前提下在移动设备上表现良好是可能的,但鉴于当前的调试和性能分析工具的现状,与生产原生应用相比,那仍然不是一件容易的事情。这么说吧,并不是所有的应用程序需要完美的UI动画,我也不是拿HTML5和原生应用相比。所以,在下文中我将介绍它和Qt的比较,敬请期待!

Qt Enterprise最新版下载>>


转载于:https://my.oschina.net/u/2317468/blog/548839

相关文章:

  • Python学习之路(2017.7.15)
  • MySQL中文全文检索
  • http和scoket通信的区别
  • 使用Anaconda搭建TensorFlow-GPU环境
  • 启动Oracle时提示“ORA-00600: internal error code, argume
  • TextInputLayout 和 TextInputEditText 的简单介绍以及使用
  • golang开发环境配置及Beego框架安装
  • 面向对象编程(十二)——final关键字
  • 【Unity笔记】获得鼠标点击屏幕的位置,并转成世界坐标
  • Win7下不能查看xp系统共享的文件,解决方法
  • 加载 xib 文件 UIView
  • 最优化局部极小点的条件(二)
  • 如何从Apache官网下载windows版apache服务器
  • SparseArrayE详解
  • Ubuntu 12.04安装ssh出现“unable to locate package apenssh-server”
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 230. Kth Smallest Element in a BST
  • Angular2开发踩坑系列-生产环境编译
  • ECMAScript入门(七)--Module语法
  • JSDuck 与 AngularJS 融合技巧
  • MaxCompute访问TableStore(OTS) 数据
  • React-redux的原理以及使用
  • Redux 中间件分析
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vultr 教程目录
  • 从零开始的无人驾驶 1
  • 数据结构java版之冒泡排序及优化
  • 详解移动APP与web APP的区别
  • 以太坊客户端Geth命令参数详解
  • 回归生活:清理微信公众号
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​香农与信息论三大定律
  • #预处理和函数的对比以及条件编译
  • (3)nginx 配置(nginx.conf)
  • (BFS)hdoj2377-Bus Pass
  • (pytorch进阶之路)扩散概率模型
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (算法)Game
  • (转)程序员疫苗:代码注入
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 项目指定SDK版本
  • .net framework4与其client profile版本的区别
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET下ASPX编程的几个小问题
  • .NET学习教程二——.net基础定义+VS常用设置
  • .net中的Queue和Stack
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • /var/lib/dpkg/lock 锁定问题
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [Android Studio] 开发Java 程序
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [AX]AX2012 R2 出差申请和支出报告