JS语言的作用在HarmonyOS应用开发框架IoT)时代,JS(JavaScript)语言越来越重要,受到了众多开发者的关注。HarmonyOS也选择了JS作为其应用程序开发的语言。想必有很多好奇的朋友想知道:JS语言有什么优势?JS应用在HarmonyOS的哪些方面?下面就为各位好奇的小伙伴们一一揭晓。一、物联网时代的应用开发挑战随着科技的进步和发展,各种消费电子产品开始普及到人们生活的方方面面,给人们的生活带来了前所未有的便利和速度。与此同时,一个万物互联的时代正在逼近。在物联网时代,消费电子产品将通过有线/无线网络互联互通,通过软硬件资源的共享与协作,为人们的生活提供多种多样的服务。应用是服务的载体。软件开发者在开发适合物联网时代的应用时,需要面临以下严峻挑战:挑战一:如何实现一次开发,多设备部署?物联网时代的终端电子设备千差万别(从KB级内存到耳机再到千兆内存手机)、形状各异(有屏和无屏)、大小不同(从耳机到汽车)、交互方式不同(触屏控制、语音控制等),每台设备一次性开发一个应用是不可接受的,因此如何实现一次开发,多设备部署是首先需要面对的挑战。挑战二:如何利用行业现有的生态资源,避免大规模的重新造轮子?由于软件的模块化,应用开发可以通过模块复用大大降低开发的复杂度,缩短开发周期。在物联网时代,这种需求更加强烈,因为开发者要面对更多的终端设备,所以需要利用好行业现有的开发生态资源,避免大规模重复造轮子。挑战三:如何提升应用开发效率,支持快速升级?物联网时代对多终端运营的需求,将使软件开发变得更加复杂,带来更大的开发和维护成本。尤其是物联网时代,需要更快的软件迭代升级,庞大的软件安装包会增加应用快速迭代升级的难度。如何降低软件复杂度(如代码量),提高开发和升级效率,是非常具有挑战性的问题。物联网时代的上述挑战需要从操作系统到编程语言的一整套解决方案,例如需要统一的操作系统来管理和协调终端设备,提升全场景的用户体验。本文主要从编程语言的角度探讨如何应对这些挑战。2.JS语言的优势针对上述物联网时代应用开发挑战,我们调研了业界常见的移动端编程语言(Java、JS、Swift、Dart、C++等),发现:JS可以更好地应对以下几个方面的挑战:1.多端分发和运行JS执行引擎在业界有很多高性能的实现和应用框架解决方案,例如:支持KB级内存用于各种应用程序的JerryScript适用于各种移动操作系统的物联网设备和UI框架上的高性能JS引擎,如ReactNative中的hermes引擎广泛应用于浏览器(Chrome和Safari),高性能引擎V8和JSC,优秀的编程框架服务端(或云端)Node.js应用,桌面端应用Progress-WebApplication和Electron-basedApplication等优秀解决方案表明,JSlanguage非常适合在各种形态的终端设备上开发应用,具有非常好的跨平台、跨设备、全栈特性。2.生态和开放JS拥有非常强大的生态社区,在业界享有很高的知名度。在TIOBE的排行榜报告中,JS连续几年被评为编程语言前五名。在著名网站StackOverflow的2020年调查中,JS是最受开发者欢迎的语言。在GitHub的2020年年度报告中,JS是使用GitHub的5600万开发者中最受欢迎的编程语言。业内有大量知名公司在使用JS,包括谷歌、微软、阿里巴巴、Facebook等,而且JS社区拥有大量成熟、高性能的第三方代码和模块,它可以非常方便地用于构建JS应用程序和服务。这样可以大大降低JS应用开发的复杂度和技术门槛。特别是目前蓬勃发展的小程序生态(如微信小程序、淘宝小程序、支付宝小程序、字节跳动小程序、快应用等)也选择了JS作为应用开发语言。另外,JS标准Ecmascript由TC39标准委员会制定,不属于任何公司。它是行业中的开放标准。业界有多种高性能的JS语言开源实现,整个JS社区也在积极吸收最新的特性提案,比如各种面向对象编程(object-orientedprogramming,OOP)语言特性,以快速迭代JS的语言规范。3.开发效率和性能由于动态类型和类脚本语言的特点,JS在开发类似功能的应用程序时,相对于静态类型开发语言,JS代码行数更少。ES2015版本迭代后,JS原生支持OOP编程范式,完善大型应用开发所需的异步编程模型,让JS开发大型复杂OOP应用更加高效。此外,随着各种JS方言(如TypeScript)的出现,通过加入静态类型注解,IDE自动导航和代码搜索补全功能得到了极大的提升,从而有效提高了大型项目JS开发的便捷性和可维护性.在性能方面,随着Just-in-time-compiler(简称JITC)的引入,JS的性能也得到了质的提升,尤其是动态类型的JS程序在执行过程中趋于稳定。,JITC可以生成非常高效的机器码,从而提高大型JS应用程序的性能。但是对于移动应用来说,JITC也会带来一定的响应性能开销,所以未来JS也需要像Ahead-of-time-compilation(简称AOTC)这样的静态编译方案。三、JS在HarmonyOS中的典型应用HarmonyOS分布式操作系统定位为万物互联时代的操作系统,全面覆盖平板、电视、手表、手机、可穿戴设备、智能汽车、和智能家居。多终端硬件集成,形成超级终端。如图1所示,音响、电视、笔记本电脑、冰箱、打字机等日常生活中使用的各种电子设备,通过HarmonyOS分布式操作系统连接协同,为家庭生活提供全场景服务体验。图1全场景服务体验由于JS语言的上述优势以及HarmonyOS的分布式特性,HarmonyOS选择JS作为其分布式应用开发的语言。下面我们从开发语言的角度来看一下JS在HarmonyOS分布式操作系统中的三个典型应用。1、在轻量级UI框架中的应用在物联网时代,各种设备的能力千差万别,从KB级到GB级的内存设备等等,因此HarmonyOS的UI框架需要能够覆盖各种终端设备。为了实现这样的设计目标,HarmonyOS的轻量级UI框架采用了如图2所示的设计,应用开发使用JS作为语言,提供主流的类Web开发范式和数据模型(MVVM即Model-View-ViewModel),即用户通过编写JS、CSS、HTML标签和数据绑定来开发UI代码和业务逻辑。HarmonyOS的轻量级UI框架使用了轻量级的JS引擎来运行JS框架层的业务逻辑。同时,渲染框架的核心采用C++编写,搭配轻量级图形引擎,达到极轻内存的设计目标。另外,由于JS引擎可以有效适配各种内存大小的设备,结合JSAPI覆盖多终端的设计,可以通过一套UI代码实现多终端部署分发。图2轻量级UI框架2.在超级终端中的应用面对多样化的终端硬件,HarmonyOS提出了万物互联时代的创新尝试——“超级终端”。超级终端采用分布式软总线技术连接不同的设备,形成超级终端的形式。这些连接的终端设备被调度不同的分布式任务,这些任务相互配合,为用户提供全场景的服务体验。图3多个终端组成一个超级“虚拟终端”如图3所示,超级终端中的各种硬件设备通过分布式软总线技术高效互联、协同工作,因此这些设备可以看作是独立的状态机,它们提供服务通过交换状态和数据来协调任务。这样的分布式工作模型可以很自然的应用到JS的异步编程能力上。各种终端设备之间的状态数据交换和协调可以很自然地建模为JS的异步事件模型。利用JS语言本身内置的异步事件处理能力(如async和promise等),可以描述多状态机之间的异步事件发送和响应。同时,JS在语言层面直接支持异步事件模型,无需引入各种庞大的异步编程库,大大降低了编写JS异步逻辑代码的复杂度,简化了超级终端应用的整体异步架构逻辑。3.在原子服务中的应用为了提供物联网时代的应用服务,HarmonyOS提出了一个轻量级的应用程序——原子服务。原子服务具有可分离、可组合、可迁移的特点,其基本构成单位是能力。一个原子服务可以包含一个或多个能力。根据是否有用户界面,Ability分为FA(FeatureAbility)和PA(PartialAbility),如下图所示:图4.服务的原子化可以更好的实现跨设备迁移和多设备迁移通过Ability的应用服务。设备协调。JS在以下几个方面为Ability设计目标的实现提供了支持:一个Ability对应一个任务(线程)单元,JS语言的线程模型是一种数据隔离的Actor模型,适合Ability的设计特点可以分离和组合。Actor模型保证了JS线程不能直接共享对象,从而避免使用锁等复杂的同步原语,提高任务单元的并行性,降低应用开发的复杂度。同时,JS并发模型还提供了传递对象的能力,以支持并发能力之间的高效通信。Ability是通过JS引擎执行的,Ability需要自由高效的跨设备迁移和分发。当一个能力从一个设备动态迁移到另一个设备时(比如从手机迁移到电视),由于JS引擎实例是单线程的,安全的,可以通过虚拟机快照的方式转移JS执行线程.状态快速迁移到其他设备,提高迁移效率。JS的动态语言特性有利于原子服务的升级和更新。由于语言的动态类型,分布式应用程序可以很容易地解耦到不同的模块中,从而提供高效的模块动态更新。同时,由于JS支持模块单独编译执行,无需重新编译打包整个应用程序包,简化了应用程序升级过程。4.HarmonyOS对JS技术的探索虽然JS作为万物互联时代的应用开发语言具有诸多优势,但与静态类型编程语言(如C++、Rust)相比,仍有进一步提升的空间。比如业界知名的JS引擎V8,通过引入内联缓存(InlineCaching)技术和动态编译JITC技术,大大提升了JS的执行性能。)差不多一样。经过深入分析,我们发现影响JS运行性能的因素有以下三个:为了生成高性能的内联缓存和优化机器码,JITC需要在程序执行过程中不断收集类型和动态优化编译,这样它就会不可避免地影响JS代码的执行性能(尤其是冷启动和即时响应场景)。跨语言调用时(如JS调用C++或Java开发的各种第三方库),由于对象模型和编译器不统一,JS对象转为C++或Java代码,需要“拆箱打包”.“耗时的过程,如此频繁的跨语言操作影响了程序的效率。标准JS通过Worker实现Actor并发编程模型,但是一个worker对应一个JS引擎实例,导致内存开销比较大。同时由于需要初始化整个JS引擎,影响了Worker的启动性能。针对这三个问题,HarmonyOS在应用执行运行时(方舟运行时)方面进行了以下几个方向的技术研发:通过TypeScript(JS的超集)提供的静态类型描述和静态类型检查来标准化JS任意动态写入方式,同时静态(Ahead-of-time)生成内联缓存并优化机器代码。这样可以减少运行时预热、类型收集和动态编译的开销,提高JS应用程序的性能。实现多语言运行时,支持跨语言调用和对象互操作,通过运行时通信不同语言的对象模型,加速对象的跨语言访问。此外,通过统一编译中间表示(IntermediateRepresentation),可以将多语言混合开发的JS应用翻译成统一编译中间表示并进行统一优化编译,生成高性能机器码,进一步提高JS的跨语言调用和交互性能。更轻量级的并发Actor实现。通过共享JS引擎实例的不可变数据结构,例如字节码和字符串,可以有效减少内存开销。同时,通过实现JS引擎快照(snapshot),可以有效提升Actors的启动性能。五、未来展望万物互联(IoT)时代,应用形态将发生新的变化,分布式应用、原子化服务等新形态或将成为主流。面对差异巨大、种类繁多的终端硬件,如何降低开发者的开发门槛,更好地利用行业现有代码和资源,帮助开发者快速开发面向消费者的创新全场景应用,需要知识编程语言和操作系统。它在不断发展,JS开发语言将在这个过程中扮演越来越重要的角色。HarmonyOS期待更多的JS开发者来到我们身边,与我们一起迎接万物互联的新时代!了解更多请访问:与华为共建鸿蒙科技社区https://harmonyos.51cto.com
