互联网前端市场分析(互联网行业过冬)(1)

1.互联网公司“过冬”,连 IT 也要降本增效

受宏观环境和疫情的双重影响让现在的商业环境面临严峻挑战,“过冬”成为互联网公司的共识。

如何熬过“寒冬”?大家想出的办法是省钱过日子,关键词是降本增效。据晚点报道,在纽约和香港上市的中国互联网公司,过去半年的销售和管理费用减少 217 亿元。对中国互联网公司来说,降本增效从未像现在变得如此重要。

“寒气”也传到了企业 IT 和研发部门,降本增效成为其重要目标。以前,宏观环境好,公司发展快,营收没有任何压力,IT 投入“大手大脚”,开发一款应用,各端均有一套独立的研发体系。但是,在降本增效的要求下,提高效率成为开发者、研发团队和企业关注的重点。

2.跨端开发热度飙升

凭借可以有效助力企业提升开发效率、实现降本增效的能力,跨端开发的热度近几年不断上升,成为开发者和研发团队越来越重视的技术方向。

在 InfoQ《解读大前端的 2021:究竟“卷”出了什么名堂?》 一文中提到:

针对技术方面,跨端技术层出不穷,但不可否认的是面对复杂的业务场景时,跨端框架在性能和体验上仍然无法达到与 Native(原生)等同的效果。不过,由于业务存在降本增效的诉求,所以跨端技术依然还是被重点关注的方向之一。

从最早的 PC 时代到移动时代,从移动时代到 IoT 时代,各种端不断涌现,不仅有智能手机,而且还有平板、电脑、车机等设备。多终端的出现以及业务场景的多元化让跨端变得愈加复杂。

而当前智能手机作为最大的流量分发入口,为抢夺用户和流量,公司间竞争越来越激烈,以用户为核心,产品为抓手,强调小步快跑、快速迭代、快速试错。此时,缩短研发周期,保证产品快速迭代,让新功能能以最快速度抵达多端用户成为重中之重。

当企业要开发支持多端的应用时,如果每一端都需要独立研发、测试和运维,那么不仅成本会升高,而且工作量也将成倍增加,势必导致研发周期拉长。

为解决多端独立开发问题,跨端开发成为越来越多研发团队和企业的选择。跨端开发的本质是屏蔽底层平台能力的差异性,让业务不用关注底层平台的设备差异,专注业务。站在业务角度,企业肯定不希望业务各端均有一套独立的研发体系,最好让业务能以低成本方式覆盖多端,实现复用。凭借一次开发、到处运行的特点,跨端开发大大提升了研发效率,进一步节省了研发成本,缩短了研发周期和时间,成为降本增效的有效手段,受到很多研发团队和企业的青睐。

此外随着用户使用的终端越来越多,跨端应用也成为刚需,跨端开发的潜力也越来越大。根据华为开发者联盟和艾瑞咨询联合发布的《2022 年移动应用技术趋势白皮书》(以 下简称“白皮书”)显示,用户平均拥有近 5 台智能设备,个人智能终端延续“一超多强”态势,“一超”即智能手机,它是个人智能终端的中心;“多强”即其他智能设备,比如蓝牙耳机、智能手表 / 手环围绕着手机提供延伸功能,智能跑鞋、智能服装通过手机 App 提供应用服务。

互联网前端市场分析(互联网行业过冬)(2)

3.直面跨端开发挑战,开发者如何脱颖而出

从 Web 端到移动端等,由于各端本身的差异性,开发者在进行跨端开发时面临不少挑战。

第一,体验问题。对于任何一个跨端技术,其天花板就是原生体验。因为企业如果追求极致体验,是不会考虑跨端方案,毕竟跨端只是无限逼近原生。

第二,多端一致性是把双刃剑。试想,如果开发者开发完一款应用,它在主流操作系统上的用户 UI 体验是一样的,这可能并不是用户想要的。因为每个平台都有一种自己的 UI 风格和生态,这给用户带来的体验是有差异化的。并且,值得注意的是,“一致性”指跨端技术开发的应用无限逼近原生体验,与原生体验还存在差距。此外,对跨端来说,如何屏蔽好各端的细节至关重要,比如如何处理某个端特有的 API、如何保证渲染细节在各端始终保持一致。

第三,任何跨端开发都会强调研发效率,但是其背后存在工程填坑,因为需要专门的技术人员维护跨端的基础建设,这会增加很多成本。

除了手机,平板电脑也类似移动端,但是差别在于尺寸和交互与移动端又有差别,比如支持分屏等能力。这里,跨端开发要解决的问题是如何在平板电脑上提供用户更易接受的一致性体验。

有开发者对笔者表示,在多端开发过程中,他们遇到过很多问题。比如,为了同步多端能力,往往很难快速响应业务需求。而如果进行原生开发,那么每增加一个端,研发成本会呈指数级增长。并且,开发完成并不意味着任务结束,因为维护多端同构又具有差异性的代码,其困难程度可想而知。因此,对开发者来说,需要的是多端一体化的开发体验。

虽然移动领域的跨端开发难度不小,困难不少,但是业界一直有各种解决方案相继出现,包括 React-Native/Weex 类方案、Flutter 以及 HarmonyOS。

React-Native/Weex 类方案通过尽可能的取长补短,通过结合 Web 的生态和 Native 的组件,让 JS 执行代码后用 Native 的组件进行渲染。Flutter 是近年来备受关注的跨端方案,Flutter 既不使用原生组件,也不依赖 WebView,而是通过自己的高性能渲染引擎直接调用底层的 Skia 进行自绘渲染,保证了多端的渲染一致性。

相比前两类方案,HarmonyOS 采用另一种思路,可以跨设备。HarmonyOS 通过分布式软总线、分布式设备虚拟化、分布式数据管理、分布式任务调度等技术,实现多种设备之间硬件互助、资源共享。它通过组件化和小型化等设计,支持多种终端设备按需弹性部署,适配应用在不同类别的硬件上的差异化资源和功能需求,可有效解决多端一致性问题,给用户带来更好的体验。

互联网前端市场分析(互联网行业过冬)(3)

而 HarmonyOS 提供的用户程序框架、Ability 框架以及 UI 框架,支持应用开发过程中多终端的业务逻辑和界面逻辑进行复用,能够实现应用的一次开发、多端部署,提升了跨设备应用的开发效率。如今,HarmonyOS 3.0 已经支持 12 种设备,包括手机、平板、PC、智慧屏、音箱、耳机、手表、墨水平板、显示器、打印机、智能眼镜、车机等,在跨设备通话、手机与打印机及车机互联等方面实现能力提升。

在笔者看来,不管是哪种跨端方案,核心都是提升研发效率、降低成本。

尤其是当下,人口红利、流量红利结束,移动互联网从高速成长期步入平缓发展阶段,市场发展成熟,应用竞争非常激烈,降本增效更为开发者和企业所看重。

对开发者来说,应用之间竞争的本质是抢夺有限的用户。工信部数据显示,国内 App 数量高达 230 万款。而 data.ai 的调查报告显示,大约有 1/3 到 1/2 的用户在智能手机上安装了 30 个 App。

如何在竞争中脱颖而出?越来越多的开发者选择直接集成应用服务能力,一方面,可以提升开发效率,另一方面,还能将人工智能等前沿技术能力快速落地应用于移动端,以技术提升产品能力,打造差异化的用户体验。

以 HMS Core 为例,它是华为终端云服务开放能力合集,面向应用服务、图形、媒体、人工智能和智能终端等 7 大领域能力开放,帮助开发者实现应用高效开发、快速增长、商业变现。某种程度上,它就像一个横跨各类软硬件平台的超级“底座”,开发者可以基于 HMS Core 在图形、媒体等多个领域的开放能力来开发各种品类的 App,并无缝地衔接到不同形态的设备上,进行应用场景的创新。

以电商行业为例,开发者需要海量的流量入口,不论是软硬件级别的入口,还是系统级的,以支持电商应用对各类用户群体的快速覆盖。HarmonyOS 聚合泛终端全场景的流量入口(如服务中心、桌面、扫一扫 / 碰一碰、小艺智慧助手等),服务一次接入,实现全媒体分发,可以提升应用的获客能力,同时 HMS Core 提供的推送服务可以帮助电商平台在这样的多种入口上激活沉默用户,促进用户活跃。而像 AR Engine 各式各样的虚拟现实技术场景和机器学习服务能力能很大程度地丰富电商应用在手机、平板等设备上的用户体验,从而增强用户转化。

互联网前端市场分析(互联网行业过冬)(4)

不同行业的应用对同设备或不同设备上的开放能力要求也不尽相同。新一代的智能终端操作系统HarmonyOS,加上为开发者开放各类软硬件服务能力的HMS Core,两者将共同助力应用创新,提升开发效率,打造一个全场景超级终端下的智慧应用体验。

4.写在最后

存在即合理,正所谓业务价值决定技术走势。跨端开发的热度之所以飙升,是因为它是研发团队和企业提升开发效率,实现降本增效的有效手段。对企业而言,只有通过各种手段在“冬天”活下来,才有明天。

对开发者来说,跨端开发已经成为必须认真对待的技术方向。无论是企业需求,还是市场前景,跨端开发迟早成为大势所趋。这股趋势给开发者带来的不仅是挑战,也是机遇。只有真正给用户带来综合一致满意的体验,开发者才能在激烈竞争中占据优势。但是,如果想胜出,仅凭单打独斗是不够的,开发者还需要借助外部生态力量,才能赢至终局。

华为开发者联盟已实现覆盖全球超过 170 个国家 / 地区的平台部署,在全球设立 8 大区域中心,15 个数据中心切实保护开发者的产品服务的数据安全。全球站点平台遵循数据本地化原则,实现在全球范围内本地化运营。并且,它还推出了开发者学堂、开发者论坛和生态市场等,拥有全球化渠道优势,开放性和全流程运营等能力,可以更好地服务广大开发者。

想了解国内移动应用发展环境、热门技术创新动态,先人一步知晓影响移动应用发展的技术趋势,洞悉开发者所面临的挑战和机遇,

点击下载《2022 年移动应用技术趋势白皮书》。

https://developer.huawei.com/consumer/cn/forum/topic/0202977783444380030?fid=18&ha_source=InfoQLTT

,