CN112955865A - 应用视图层次的静态协调 - Google Patents

应用视图层次的静态协调 Download PDF

Info

Publication number
CN112955865A
CN112955865A CN201980066348.1A CN201980066348A CN112955865A CN 112955865 A CN112955865 A CN 112955865A CN 201980066348 A CN201980066348 A CN 201980066348A CN 112955865 A CN112955865 A CN 112955865A
Authority
CN
China
Prior art keywords
rendering
user interface
instructions
graphical
rendering instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201980066348.1A
Other languages
English (en)
Inventor
詹姆斯·理查德·施普罗赫
查克·保罗·贾德泽威斯基
里兰德·理查森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN112955865A publication Critical patent/CN112955865A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4443Inlining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

描述一种进行静态协调以渲染应用的图形用户界面(GUI)的系统。系统将与应用的GUI相关联的源代码编译成用于渲染所述GUI的视图层次的渲染指令。视图层次定义GUI的图形组件,并且渲染指令包括:初始渲染指令,用于在GUI的初始渲染期间渲染图形组件;以及更新渲染指令,用于在GUI的后续渲染期间渲染图形组件的子集。系统可以将相应密钥自动地分配给图形组件的子集中的一个或多个,其中用于渲染图形组件的子集中的一个或多个中的每一个的更新渲染指令根据相应密钥能唯一识别。系统执行渲染指令,以更新由相应密钥识别的图形组件。

Description

应用视图层次的静态协调
背景技术
一些应用或其它类型的计算机程序提供图形用户界面(GUI)。图形用户界面可以表示为GUI视图的树,也称为“视图层次”。随着应用状态改变(例如,由于响应于操作系统命令的用户输入,因为来自远程服务器的数据等),协调器可以在渲染GUI之前进行“协调”以更新应用视图层次的组件来适应改变。协调可能复杂并且容易出错,尤其是在应用数据的改变影响多个不同GUI视图的渲染时。因此,协调可能涉及复杂的过程并且在管理并渲染应用GUI时成为性能瓶颈。
发明内容
描述用于实施“静态协调”以渲染应用GUI的技术。在编译应用源代码期间,示例编译器可以将视图层次分成静态对象和动态对象。静态对象可以归因于在最初渲染之后不会改变外观(例如,公司徽标、菜单选项等)的GUI的组件。然而,动态对象可以与可能并且有时确实从一个渲染到下一个渲染时改变外观(例如,文本字段、动画等)的GUI的组件相关联。
示例编译器可以生成应用机器代码,所述应用机器代码使应用在运行时执行两组不同的渲染指令。应用可以执行一组初始渲染指令,以渲染由实际视图层次定义的所有静态和动态组件。然而,在接收到用于后续渲染的所需视图层次之后,应用可以执行一组不同的渲染指令或一组更新渲染指令。一组更新渲染指令是一组初始渲染指令的子集,并且仅包括重新渲染动态组件的对象所需的指令,因为仅动态组件的对象可以在渲染之间改变。以此方式,与应用将使用其它协调技术渲染其视图层次的情况下否则需要分配的全部数量的对象相比,当渲染由视图层次定义的GUI组件时,静态协调可以使应用仅必须分配减少数量的对象。在一个示例中,本公开涉及一种用于进行静态协调以渲染应用的图形用户界面的方法,所述方法包括:由至少一个处理器接收与应用的图形用户界面相关联的源代码;将源代码编译成多个渲染指令以渲染图形用户界面的视图层次,其中,视图层次定义图形用户界面的图形组件,并且其中,多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集;在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中,用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别;以及执行多个渲染指令以显示应用的图形用户界面。
在另一示例中,本公开涉及一种计算系统,所述计算系统包括至少一个处理器,所述至少一个处理器被配置成至少通过以下操作进行静态协调,以渲染应用的图形用户界面:接收与应用的图形用户界面相关联的源代码;以及将源代码编译成多个渲染指令以渲染图形用户界面的视图层次。视图层次定义图形用户界面的图形组件,并且多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集。至少一个处理器可以进一步被配置成在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中,用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别。至少一个处理器进一步被配置成通过执行多个渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个来进行静态协调,以渲染应用的图形用户界面。
在另一示例中,本公开涉及一种计算机可读存储介质,所述计算机可读存储介质包括在执行时使计算系统的至少一个处理器至少通过以下操作来进行静态协调,以渲染应用的图形用户界面:接收与应用的图形用户界面相关联的源代码;以及将源代码编译成多个渲染指令以渲染图形用户界面的视图层次。视图层次定义图形用户界面的图形组件,并且多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集。指令在执行时进一步使至少一个处理器在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中,用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别。指令在执行时进一步使至少一个处理器通过执行多个渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个来进行静态协调,以渲染应用的图形用户界面。
在另一示例中,本公开涉及一种用于进行静态协调以渲染应用的图形用户界面的系统,所述系统包括:用于接收与应用的图形用户界面相关联的源代码的构件;以及用于将源代码编译成多个渲染指令以渲染图形用户界面的视图层次的构件。视图层次定义图形用户界面的图形组件,并且多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集。系统可以进一步包括用于在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个的构件,其中,用于渲染图形组件的子集中的一个或多个中的每一个的所述一组更新渲染指令根据相应密钥能唯一识别。系统进一步包括用于执行多个渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个的构件。
在以下附图和具体实施方式中阐述一个或多个示例的细节。本公开的其它特征、目标和优点将从具体实施方式、附图和权利要求书变得显而易见。
附图说明
图1是说明根据本公开的技术的示例系统的概念图,所述示例系统被配置成进行静态协调以渲染应用的图形用户界面。
图2是说明根据本公开的技术的示例源代码的概念图,所述示例源代码已分成一组初始渲染指令和一组更新渲染指令,以进行静态协调来渲染应用的图形用户界面。
图3是说明根据本公开的技术的示例计算系统的框图,所述示例计算系统被配置成进行静态协调以渲染应用的图形用户界面。
图4是说明根据本公开的技术的由计算系统进行的示例操作的流程图,所述计算系统被配置成进行静态协调以渲染应用的图形用户界面。
具体实施方式
协调是在渲染视图层次期间由协调器执行的过程。声明式协调包括将前一视图层次与期望GUI层次(例如,从GUI组件的渲染功能发出)相比较,以确定协调器可以进行以将前一视图层次变换成期望视图层次的一组转变。从用户角度来看,协调可能是无法发现的实施细节。然而,协调可能复杂并且在管理并渲染GUI时导致性能瓶颈。
一些协调器进行“朴素未优化协调”。在朴素未优化协调中,每当渲染视图层次时(例如,在动画的每六十分之一秒一次),协调器将从头开始重新创建或示例化全新的视图层次。协调器可以走过先前示例化的视图层次和新的视图层次,以确定前一视图层次中的哪些GUI视图需要渲染,以反映期望的视图层次。本质上,每当应用GUI需要渲染时,朴素优化协调器可以示例化全新的GUI视图树,即使仅一些GUI视图需要改变。朴素未优化协调需要大量计算,并且每次应用数据改变或GUI需要渲染时消耗增长的处理资源来重新创建或示例化整个视图层次。
代替示例化每一渲染的全新视图层次,一些协调器进行虚拟文档对象模型(VDOM)协调。在“VDOM协调”中,协调器分配并维护VDOM树,VDOM树表示由应用维护的实际(即,当前示例化的)视图层次。在每一个渲染期间,协调器分配表示期望的视图层次的全新VDOM树,而不是示例化第二视图层次。协调器可以遍历期望的和实际的VDOM树,以识别两者之间的差异。然后,协调器可以基于两个VDOM树中的所识别差异来操纵实际示例化的视图层次,以将实际视图层次渲染为期望的视图层次。通过分配VDOM树并运行VDOM树之间的比较,而不是如在朴素未优化协调期间那样示例化并比较全部多个视图层次,协调器可以具有改进的性能。
本公开涉及甚至通过执行“静态协调”技术来改进协调性能并降低协调复杂性,而不是执行上述VDOM协调。通过仅分配否则用于进行VDOM协调必须分配的对象的子集,静态协调使应用能够渲染并更新GUI视图层次。当根据静态协调技术渲染视图层次时,应用可以避免在每一渲染期间规律地分配多个VDOM树;应用可以替代地一次渲染视图层次,然后在每一后续渲染期间,仅规律地分配定义GUI的动态组件所需的全部兑现的子集(例如,最小数量),而忽略GUI的静态组件,因为仅动态组件可以从GUI的一个渲染改变到另一渲染。受益于静态协调的应用可以执行一组初始渲染指令,以最初地渲染视图层次的所有动态和静态对象。然而,在每一后续渲染期间,应用执行一组更新渲染指令以评估与可能已改变的GUI的动态组件相关联的任何对象,而不评估保持静态的任一对象。
图1是说明根据本公开的技术的示例系统的概念图,所述示例系统被配置成进行静态协调以渲染应用的图形用户界面。系统100包括经由网络130与计算装置110通信的计算系统160。尽管将归因于系统100的操作主要描述为由单个计算装置110和/或单个计算系统160进行,但是在一些示例中,系统100的操作可以由比图1所示更多或更少的计算装置和计算系统执行。例如,归因于计算装置110的一些操作可以由计算系统160执行,反之亦然。
网络130表示用于在计算系统、服务器和计算装置之间传输数据的任何公共或专用通信网络,例如,蜂窝、Wi-Fi和/或其它类型的网络。网络130可以包括可操作地相互耦合的一个或多个网络集线器、网络交换机、网络路由器或任何其它网络设备,由此提供计算系统160与计算装置110之间的信息交换。计算系统160和计算装置110可以使用任何合适的通信技术通过网络130传输和接收数据。
计算系统160和计算装置110可以各自使用相应的网络链路可操作地耦合到网络130。将计算系统160和计算装置110耦合到网络130的链路可以是以太网、ATM或其它类型的网络连接,并且此类连接可以是无线和/或有线连接。
计算系统160包括远程编译器模块162。计算装置110包括本地编译器模块122、用户界面(UI)模块120、应用模块124,以及用户界面组件(“UIC”)112。UIC 112被配置成输出用户界面114A和114B(统称为“用户界面114”)。
计算系统160表示一个或多个计算机、大型机、服务器(包括所谓的“刀片”)、云计算系统,或能够经由网络130交换信息作为远程计算服务的一部分的其它类型的远程计算系统的任何组合。例如,计算系统160可以提供对应用开发者服务(例如,应用生成器服务、编译器服务、调试服务等)的访问,诸如计算装置110的客户端装置可以将源代码上载到应用开发者服务以供计算系统160编译,并且客户端装置可以从应用开发者服务下载应用可执行文件或程序包,客户端装置然后可以在装置上本地执行应用开发者服务。
计算装置110表示能够经由网络130交换信息以访问由计算系统160提供的远程计算服务的任何合适的计算装置或计算系统。例如,计算装置110可以是移动装置,用户从所述移动装置提供输入以与和计算系统160相关联的用户界面交互,例如,以使计算装置110下载由计算系统160编译的应用可执行文件,以本地安装在计算装置110上。计算装置110的示例包括移动电话、平板计算机、膝上型计算机、台式计算机、服务器、大型机、刀片,可穿戴装置(例如,计算机化手表等)、家庭自动化装置、辅助装置、游戏机和系统、媒体播放器、电子书阅读器、电视平台、汽车导航或信息娱乐系统,或配置成执行应用的任何其它类型的移动、非移动、可穿戴和不可穿戴计算装置。
计算装置110的UIC 112可以用作用于计算装置110的输入和/或输出装置。UIC112可以使用各种技术实施。例如,UIC 112可以使用存在敏感的输入屏幕、麦克风技术、红外传感器技术,或用于接收用户输入的其它输入装置技术来用作输入装置。UIC 112可以用作输出装置,所述输出装置被配置成使用任何一个或多个显示装置、扬声器技术、触觉反馈技术,或用于将信息输出到用户的其它输入装置技术向用户呈现输出。
模块120、122、124和162可以使用软件、硬件、固件或驻存在计算装置110和计算系统160中和/或在计算装置110和计算系统160处执行的硬件、软件和固件的混合来进行本文所描述的操作。计算装置110和计算系统160可以分别执行具有多个相应处理器或多个相应装置的模块120、122和124以及模块162,作为在底层硬件上执行的相应虚拟机,作为操作系统或计算平台的一个或多个相应服务,和/或作为在相应计算平台的应用层处的一个或多个相应可执行程序。
计算装置110的UI模块120控制UIC 112,UIC 112包括确定UIC 112呈现的内容以及在UIC 112与计算装置110的其它应用或组件(例如,应用模块124和编译器模块122)之间交换的信息。例如,在控制UIC 112显示的内容时,UI模块120可以从应用模块124接收信息,所述信息形成一些或全部用户界面114A的基础。作为响应,UI模块120可以根据从应用模块124接收的信息向UIC 112输出使UIC 112显示用户界面114的指令和信息。当处理由UIC112检测到的输入时,UI模块120可以响应于在UIC 112的存在敏感的输入组件的位置处检测到的输入而从UIC 112接收信息,所述位置对应于显示用户界面114的元件处的UIC 112的显示组件的位置。UI模块120将关于由UIC 112检测到的输入的信息传播到计算装置110的其它组件,以解释输入并使计算装置110响应于输入而进行一个或多个功能。
在一些示例中,UI模块120可以接收在UIC 112处检测到的一个或多个用户输入的指示,并且可以将关于用户输入的信息输出到编译器模块122、应用模块124、用户输入预期用于的计算装置110的任何其它应用或组件。例如,UIC 112可以检测用户输入并且将关于用户输入的数据发送到UI模块120。UI模块120可以基于检测到的输入生成一个或多个触摸事件。触摸事件可以包括表征用户输入的信息,诸如用户输入的位置分量(例如[x,y]坐标)、时间分量(例如当接收到用户输入时)、力分量(例如,用户输入所施加的压力量)或关于用户输入的其它数据(例如速度、加速度、方向、密度等)。基于从用户输入生成的触摸事件的位置信息,UI模块120可以确定检测到的用户输入与用户界面114的方面相关联,并且可以将一个或多个触摸事件的指示发送到应用模块124以供进一步解释。
应用模块124表示由一个或多个对象文件和其它文件构成的独立且机器可读的可执行文件、包、程序、例程或容器,所述文件在执行时在计算装置110的应用层处操作。计算装置110可以执行与应用模块124相关联的指令,以进行功能或提供服务。例如,应用模块124可以进行功能,诸如将信息输出到UI模块120,以使用户界面114被渲染并输出以供显示。尽管应用模块124的示例太多而无法完整列出,但是应用模块124可以包括以下项以提供不同应用的类别的几个示例:业务或生产力应用、开发者工具、教育应用、娱乐应用、金融应用、游戏应用、图形或设计应用、健康和健身应用、生活方式或助手应用、医疗应用、音乐应用、新闻应用,摄影、视频和其它多媒体应用、参考应用、社交网络应用、体育应用、旅行应用、公用事业应用、天气应用、通信应用、日历应用或任何其它类别或类型的应用。
将组成应用模块124的机器可读指令从源代码116编译成对象代码、字节代码,或其它机器可执行指令。源代码116可以包括由一个或多个开发人员手动创建或由一个或多个机器自动生成的、以编程语言编写的人类可读指令的一个或多个文件。诸如编译器模块122和162的编译器可以解释源代码116的人类可读指令,并且将指令编译成组成机器可执行代码(例如,字节代码)的机器可读指令或所谓的“对象文件”。
可以将组成源代码116的一个或多个文件(例如,文本文件)分成源代码的连续“行”。每“行”源代码可以与特定编程指令或其部分相关联。单个编程指令可以跨越源代码116的单个或多个行。例如,源代码116中陈述的渲染指令可以在一行上开始并在不同行上结束,由此跨越源代码116的一系列连续行。
源代码116中含有的指令可以定义用户界面114。用户界面114可以是由图形内容组成的任何类型的图形用户界面,所述图形内容向应用模块124提供用户控制并且传送与应用模块124相关联的输出。图形内容的示例包括:图像、图形、文本、动画,以及计算装置110可以显示UIC 112的任何其它类型的图形内容。用户界面114可以包括根据应用模块124的状态变化改变的动态内容(例如,一个或多个动态组件)。另外或替代地,用户界面114可以包括在用户界面114的连续渲染之间保持恒定的静态内容(例如,一个或多个静态组件),而不管应用模块124的状态变化。
源代码116可以定义与应用模块124相关联的视图层次,所述视图层次表示在应用模块124的不同执行点期间用户界面114的状态。视图层次可以表示为GUI视图的树。当应用模块124的状态改变时,由于与用户界面114的用户交互,或响应于由应用模块124获得的其它信息,应用模块124可能需要更新GUI视图,以使用户界面114传送应用模块124的当前状态。
例如,用户界面114A是用户界面114的初始渲染,并且可以由第一GUI视图定义。用户界面114A包括动态组件132A和132B以及静态组件134A和134B。用户界面114B表示可以代替用户界面114A的初始渲染的用户界面114的后续渲染,并且可以由一个或多个第二GUI视图定义。与用户界面114A一样,用户界面114B还包括静态组件134A和134B,因为静态组件134A和134B表示静态内容,所述静态内容在用户界面114的连续渲染之间保持恒定,而不管应用模块124的状态变化。然而,与定义用户界面114A的第一GUI视图不同,定义用户界面114B的一个或多个第二GUI视图指定与用户界面114A不同的动态内容。由于用户界面114B的渲染,如在第一GUI视图中定义的用户界面114A的动态组件132A和132B被如在一个或多个第二GUI视图中定义的动态组件132A'和132B’替代。应用模块124可以执行指令,所述指令配置应用模块124以从一个渲染到下一渲染管理用户界面114。
更新视图层次的一种常用方法可以使应用经由沿着路线进行的特定渲染调用“走过”GUI视图的树,从而手动地操纵树的节点。手动视图操纵可能复杂,并且有时可能会在渲染期间引入错误。手动操纵在每一渲染期间需要应用来识别并执行渲染功能,所述渲染功能与需要从一个状态更新到下一状态的GUI视图树的每一个别节点相关联。进行渲染的应用可能会遇到非法状态,例如,GUI视图树的一个节点的更新无意地以出乎意料的方式与GUI视图树的另一节点冲突(例如,如果应用尝试设置应用先前已从视图层次移除的节点上的值)。当涉及手动操纵时,GUI维护复杂性可能会随着需要更新的视图层次的视图量增加呈指数增长。随着近年来计算性能的增加,已经尝试用于维护GUI视图的其它技术。
一些系统依赖于声明式编程模型,所述声明式编程模型减轻开发者开发用于维护并更新GUI的程序指令的负担。一些开发者更喜欢使用声明式编程来定义视图层次,因为声明式编程可以使源代码更模块化、更易于读取且更易于理解。每当GUI视图需要渲染时,声明式GUI模型可以显示从头开始重新生成整个GUI视图,由此避免手动地维护视图层次的复杂性。然而,每当GUI视图需要渲染时,从头开始重新生成整个GUI视图的纯声明式GUI模型可能会消耗在每一渲染期间执行整个视图层次的整个一组渲染指令的不必要的计算资源和电能量。
根据本公开的技术,应用模块124进行“静态协调”以维护用户界面114的视图层次。静态协调可以实现使用声明式编程指定视图层次(给定应用模块124的当前状态),并且在编译期间,编译器模块122确定如何有效地将现有视图层次转换成开发者的期望视图层次。
编译器模块122和162是被配置成进行静态协调的各方面的编译器的示例。编译器模块122是本地执行的编译器,然而编译器模块162表示远程编译器或远程编译服务。除了它们相应的执行环境不同之外,编译器模块122和162各自将源代码116作为输入,并且生成组成应用可执行文件(诸如,应用模块124)的对象文件。编译器模块122和162可以是独立的编译器、编译器子组件、编译器子模块、编译器插件,或配置成在编译源代码116期间进行静态协调技术的任何其它类型的模块或子模块。
编译器模块122和162可以是两级编译器。例如,编译器模块122可以将高级源代码从最高级向下编译成一个或多个中间级,随后将源代码的中间级向下编译成机器可读形式。例如,编译器模块122可以将源代码从高级语言向下编译成操作系统特定的语言。编译器模块122的第二级可以将操作系统特定的代码编译成与机器无关的代码形式,以在执行特定操作系统的计算装置上本地执行。编译器模块122可以将相同源代码从高级语言向下编译成操作系统特定的不同语言。编译器模块122的第二级可以将操作系统特定的代码的第二版本编译成与机器无关的代码形式,以在执行不同操作系统的计算装置上本地执行。
在一些示例中,编译器模块122和162是即时(JIT)编译器。即时编译器编译应用以在运行时执行,而不是在执行之前编译应用。例如,编译器模块122可以在应用正在执行时将源代码、字节代码,或其它高级语言连续地编译成或以其它方式转换成机器代码。当确定可以超过对执行重新编译的计算资源的任何减少的方式实现性能改进时,编译器模块122和162可以连续地分析程序的执行并进行重新编译。编译器模块122和162可以通过进行提前编译(AOT)与解释的组合来进行JIT编译。为了便于描述,尽管编译器模块162可以进行与静态协调有关的类似(如果不相同)技术,但是静态协调技术主要被描述为由编译器模块122执行。
编译器模块122可以提供声明式应用编程接口(API),所述API使应用(包括应用模块124)渲染GUI,而无需强制地改变每一个别前端GUI视图。作为示例,开发者可以在源代码116内声明用户界面114的视图层次的组件,就像开发者通常将指定视图层次那样,即,使用声明式编程并且不必指定协调渲染之间的视图层次(例如从一个应用状态改变到下一应用状态)所需的逻辑。
与编程功能或子例程一样,组件是源代码的可重用构建块。这些构建块可以是复杂且专用的特征。例如,联系人管理器应用可以定义渲染特定图形元件以显示联系人数据的个人组件。根据定义,每一组件具有或作为渲染函数,每当组件的视图层次可能需要更新时(诸如当一些应用数据改变并且视图需要反映新数据时)调用所述渲染函数。组件的渲染函数使用由组件定义的一组属性,以通过执行适当陈述来生成期望的视图层次。理论上,每帧(例如,每秒60次)请求特定组件的渲染,如处理动画或其它快速变化的视图层次的情况。由于许多原因,组件可能需要重新渲染,包括:组件先前不可见,但现在可见;组件的数据已改变;组件正进行动画处理并且需要绘制下一帧;或显示组件的显示器已选择、已调整大小,或另外已改变布局特征。编译器模块122可以编译应用,以确保在渲染时更新每个组件的视图层次,从而反映期望的视图层次。
代替要求开发者指定在渲染之间协调视图层次的方法,编译器模块122自动地生成维护并协调视图层次的对象代码。编译器模块122包括生成的对象代码,作为编译器模块在将源代码116编译到应用模块124中时生成的其余对象代码的一部分。
在操作中,编译器模块122可以进行静态协调以渲染应用模块124的用户界面114。编译器模块122可以接收源代码116,作为与用户界面114相关联的输入源代码。在接收后,编译器模块122可以解析源代码116并进行源代码116的其它分析,以将源代码116编译成机器可执行指令,包括用于渲染用户界面114的视图层次的渲染指令。使编译器模块122与应用源代码的其它编译器不同的一件事是编译器模块122可以生成两组渲染指令,以渲染用户界面114的视图层次。
编译器模块122可以生成第一组渲染指令,在用户界面114的初始渲染期间将执行所述第一组渲染指令。例如,用户界面114A可以是用户界面114的初始渲染,并且可以输出以在应用模块124开始显示用户界面114时在UIC 112处显示。由应用模块124和/或UI模块120执行以显示用户界面114A的渲染指令可以是由编译器模块122生成的第一组渲染指令的一部分。第一组渲染指令(还称为一组初始渲染指令)包括用于在用户界面114的初始渲染期间渲染用户界面114的静态和动态图形组件两者的指令。例如,所述一组初始渲染指令可以包括用于渲染动态组件132A和132B的指令以及用于渲染静态组件134A和134B的指令。
编译器模块122可以生成第二组合并的渲染指令,在用户界面114的后续渲染期间将执行所述第二组合并的渲染指令。例如,用户界面114B可以是用户界面114的后续渲染,并且可以被输出,以在应用模块124从应用模块124首先开始显示用户界面114A时改变状态之后在UIC 112处显示。由应用模块124和/或UI模块120执行以显示用户界面114B的渲染指令可以是由编译器模块122生成的第二组渲染指令的一部分。第二组渲染指令(还称为一组更新渲染指令)包括用于在用户界面114的后续渲染期间、在用户界面114的后续渲染期间渲染动态而不是静态图形组件的指令。例如,一组更新渲染指令可以包括用于渲染动态组件132A’和132B’的指令,而没有用于渲染静态组件134A和134B的任何指令。
在执行应用模块124期间,应用模块124可以执行两组渲染指令以显示用户界面114。在用户界面114的的初始渲染(例如,用户界面114A)期间,以及在用户界面114的每一后续渲染(例如,用户界面114B)期间执行所述一组初始渲染指令之后,应用模块124可以避免执行一组初始渲染指令,并且替代地执行一组更新渲染指令。
图2是进一步帮助理解“静态协调”技术的概念图。图2的概念图说明根据本公开的技术的示例源代码,所述示例源代码已变成一组初始渲染指令和一组更新渲染指令,以进行静态协调来渲染应用的图形用户界面。作为源代码116的示例,图2包括源代码216的一部分。图2说明当编译应用时,编译器(诸如图1的编译器122)可以如何将源代码216分解成一组初始渲染指令218A和一组更新渲染指令218B,使得应用可以进行静态协调。
编译器122可以接收源代码216作为输入。在编译源代码216期间,编译器122可以创建一组或多组对象代码,所述一组或多组对象代码定义两组不同渲染指令218A和218B,例如以渲染用户界面114。在一些示例中,一组初始渲染指令218A可以包括一组更新渲染指令218B。例如,一组初始渲染指令218A和一组更新渲染指令218B可以一起形成最初在初始渲染周期期间执行的一组总渲染指令。在此示例中,可以并行地执行一组初始渲染指令218A和一组更新渲染指令218B。
在高级别下,具体来说通过识别指定视图层次的图形组件的源代码216中的任何对象,编译器122可以从源代码216识别任何动态对象,所述图形组件包括可以或确实从一个渲染改变到下一渲染的动态属性。例如,通过识别指定视图层次的图形组件的源代码216中的任何对象,所述任何对象不包括任何动态属性并且替代地仅包括从一个渲染到下一渲染保持恒定的静态属性,编译器122可以从源代码216识别任何静态对象。
编译器122可以通过将渲染指令打包在一起而生成一组初始渲染指令218A,使得当在视图层次的初始渲染期间执行时,将动态组件和静态组件两者渲染为视图层次的一部分。编译器122可以通过将渲染指令打包在一起而生成一组更新渲染指令218B,使得当在视图层次的任何后续渲染期间执行时,作为更新视图层次的一部分,重新渲染动态组件而不是静态组件。
例如,如图2中所示,源代码216包括与图形用户界面的动态组件相关联的指令。动态组件称为“AboutPageComponent”并且包括一组渲染指令,所述一组渲染指令在执行为应用模块的一部分时使动态组件得到渲染和显示。AboutPageComponent主要包括静态属性,包括具有静态值“My Fancy App Name(我的精美应用名称)”的名称属性以及具有静态值“My app is a todo list that is very fancy(我的应用是非常精美的待办事项列表)”的描述属性。除了静态属性之外,AboutPageComponent还包括称为版本属性的动态属性,所述动态属性包括分配给变量“appVersion”的动态值。虽然分配给名称和描述属性的值可能永远不会从一个渲染改变到另一渲染,但是版本属性可以并且可能在渲染之间变化。
编译器模块122可以将源代码216分解成用于最初地渲染AboutPageComponent的一组初始渲染指令218A,以及用于后续地渲染AboutPageComponent的一组更新渲染指令218B。一组初始渲染指令218A包括定义如何渲染至少AboutPageComponent的静态属性的渲染指令。在一些示例中,一组初始渲染指令218A还包括定义如何渲染AboutPageComponent的动态属性的渲染指令。然而,一组更新渲染指令218B仅包括定义如何渲染AboutPageComponent的动态属性,而不渲染静态属性的渲染指令,因为由于静态属性的值在渲染之间不会改变,因此无需渲染静态属性。
代替在运行时创建分配VDOM,编译器122可以在编译时进行静态分析,并且基于指令218A和218B生成优化的对象代码(例如,字节代码),其将视图层次协调期间的对象分配最少化。编译器模块122可以通过生成对象代码(例如,字节代码)来避免执行VDOM分配,所述对象代码在用于每个组件的渲染指令内嵌入或“编码”视图层次更新。因此,代替示例化随后传递给通用协调器的VDOM,编译器模块122可以创建使用更少对象分配渲染的应用模块,并且因此可以在运行时消耗较少内存和/或可以在每一渲染期间消耗维护并评估VDOM分配的更少电能。因此,通过进行静态协调,编译器模块122可以在编译时利用从源代码216确定的信息,以减少在协调期间稍后进行的总工作量。
例如,组件的子视图层次的许多方面在编译时是静态已知的。组件可以将线性布局用于子视图层次,或可以具有永不改变的图像(例如,产品徽标)。将节点添加到VDOM树将需要为每个组件属性分配个别VDOM节点,无论随时间恒定的还是动态的。另外,每一渲染将需要维护这些节点、设置节点的值、在协调期间访问节点,以及将节点与先前VDOM树的节点相比较以确定是否存在任何差异。然而,在协调期间,与永不改变的组件属性相关联的访问节点可能会浪费计算资源。当重新渲染组件视图时,编译器122可以创建对象代码并且编译应用可执行文件,以包含忽略保持静态的属性的逻辑。
在编译时已知的信息可以用于削减需要生成的检查集。诸如循环的一些构造可能仍需要分配。然而,编译器122通常可以生成对象代码,所述对象代码需要否则使用VDOM协调进行的比较的总数量的一部分。在静态协调期间进行的比较是已由VDOM协调器进行的比较的严格子集。实际上,代码生成器的简单实施方案可能仅发出将由VDOM协调器执行的精确协调代码。
图3是说明根据本公开的技术的示例计算装置的框图,所述计算装置被配置成进行静态协调以渲染应用的图形用户界面。图3的计算装置310是图1的计算装置110的示例,并且在计算装置110的场境中描述。计算装置310可以包括计算装置110的一些或全部能力。图3仅说明计算装置310的一个特定示例,并且计算装置310的许多其它示例可以用于其它情况中且可以包括示例计算装置310中所包括的组件的子集,或可以包括图3中未示出的额外组件。
如图3的示例中所示,计算装置310包括一个或多个用户界面组件(UIC)312、一个或多个处理器340、一个或多个输入组件342、一个或多个通信单元344、一个或多个输出组件346,以及一个或多个存储组件348。UIC 312包括显示组件202以及存在敏感的输入(PSI)组件204。
计算装置310的存储组件348还包括UI模块320、编译器模块322,以及应用模块324。另外,存储组件248包括源代码316,并且在应用模块324内是对象代码319。
通信信道350可以将组件302、304、312、316、319、320、322、324、340、342、344、346和348中的每一个互连,以进行组件间通信(物理地、通信地和/或可操作地)。在一些示例中,通信信道350可以包括系统总线、网络连接、进程间通信数据结构,或用于传送数据的任何其它方法。
计算装置310的一个或多个输入组件342可以接收输入。输入的示例是传感器、触觉、音频和视频输入。在一个示例中,计算装置300的输入组件342包括存在敏感显示器、触敏屏幕、传感器、鼠标、键盘、语音响应系统、摄像机、麦克风或用于检测从人或机器产生的输入的任何其它类型的装置。在一些示例中,输入组件342包括一个或多个位置传感器(GPS组件、Wi-Fi组件、蜂窝组件)、一个或多个温度传感器、一个或多个运动传感器(例如,加速计、陀螺仪)、一个或多个压力传感器(例如,气压计)、一个或多个环境光传感器,以及一个或多个其它传感器(例如,麦克风、相机、红外接近传感器、湿度计等)。
计算装置310的一个或多个输出组件346可以产生输出。输出的示例是触觉、音频和视频输出。在一个示例中,计算装置310的输出组件346包括存在敏感显示器、声卡、视频图形适配器卡、扬声器、阴极射线管(CRT)监视器、液晶显示器(LCD),或用于产生到人或机器的输出的任何其它类型的装置。
计算装置310的一个或多个通信单元344可以通过在一个或多个网络上传输和/或接收网络信号、经由一个或多个有线和/或无线网络与外部装置通信。通信单元244的示例包括网络接口卡(例如,以太网卡)、光学收发器、射频收发器、GPS接收器,或可以发送和/或接收信息的任何其它类型的装置。通信单元344的其它示例可以包括短波无线电、蜂窝数据无线电、无线网络无线电以及通用串行总线(USB)控制器。
计算装置310的UIC 312是计算装置110的UIC 112的示例。例如,UIC 312可以显示图形用户界面,诸如用户界面114,计算装置310的用户可以从图形用户界面向计算装置310提供输入,或查看来自计算装置310的输出。
UIC 312包括显示组件302以及PSI组件304。显示组件302可以是由UIC 312显示信息的屏幕,并且PSI组件304可以检测显示组件302处和/或附近的对象。作为一个示例范围,存在敏感的输入组件304可以检测到在显示组件302的两英寸或更少距离内的对象,诸如手指或触控笔。存在敏感的输入组件304可以确定检测到对象的显示组件302的位置(例如,[x,y]坐标)。在另一示例范围中,存在敏感的输入组件304可以检测到距离显示组件302六英寸或更小距离的对象,并且其它距离也是可能的。PSI组件304可以确定使用电容、电感和/或光学识别技术由用户的手指选择的显示组件302的位置。在一些示例中,存在敏感的输入组件304还使用如相对于显示组件302描述的触觉、音频或视频刺激将输出提供给用户。
尽管说明为计算装置310的内部组件,但是UIC 312还可以表示与计算装置310共享数据路径以传输和/或接收输入和输出的外部组件。例如,在一个示例中,UIC 312表示位于计算装置310的外部封装内并且物理连接到计算装置310的外部封装的计算装置310的内置组件(例如,移动电话上的屏幕)。在另一示例中,UIC 312表示位于计算装置310的封装外部并且与计算装置310的封装物理地分离的计算装置310的外部组件(例如,与平板计算机共享有线和/或无线数据路径的监视器、投影仪等)。
一个或多个处理器340可以实施功能和/或执行计算装置310内的指令。例如,计算装置310上的处理器340可以接收和执行由存储组件348存储的指令,存储组件348执行模块320、322和324的功能。由处理器340执行的指令可以使计算装置310在程序执行期间将信息存储在存储组件348内。处理器340的示例包括应用处理器、显示器控制器、传感器集线器,以及被配置成用作处理单元的任何其它硬件。模块320、322和324可以由处理器340操作以执行计算装置310的各种动作或功能。
计算装置310内的一个或多个存储组件348可以存储用于在计算装置310的操作期间处理的信息(例如,计算装置310可以存储在计算装置310处执行期间由模块320、322和324访问的数据)。在一些示例中,存储组件348是临时存储器,并且其它示例中,存储组件348是计算机可读存储介质。
作为存储器,存储组件348的主要目的可以不被配置用于长期存储,而是可以被配置用于作为易失性存储器短期存储信息,因此如果计算装置310断电,则不保留所存储的内容。易失性存储器的示例包括随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM),以及本领域中已知的其它形式的易失性存储器。在一些示例中,存储组件348还包括一个或多个计算机可读存储介质。存储组件348可以被配置成存储比易失性存储器更多量的信息。
存储组件348可以被配置用于作为非易失性存储器空间长期存储信息,并且在通电/断电循环之后保留信息。非易失性存储器的示例包括磁性硬盘、光盘、软盘、闪存存储器,或电可编程存储器(EPROM)或电可擦除和可编程(EEPROM)存储器的形式。存储组件348可以存储与模块320、322和324相关联的程序指令和/或信息(例如,数据)。
UI模块320是图1的UI模块120的示例,并且代表模块322、324以及安装在计算装置310上的任何其它应用或模块来管理UIC 312的输入和输出。例如,UI模块320可以将由PSI组件304接收的输入的指示引导到编译器模块322和应用模块324。UI模块320可以向显示组件302引导从模块322和324接收的输出的指示。
应用模块324是图1的应用模块124的示例。应用模块324由对象代码319组成。应用模块324可以称为由一个或多个文件(包括对象代码319)组成的可执行文件或程序包。
编译器模块322是图1的编译器模块122和162的示例。编译器模块322被配置成将源代码316作为输入,并且作为响应,生成对象代码319。编译器模块322被配置成在编译源代码316时进行静态协调,如上文在图1的描述中所指示,这表示编译器模块322可以生成对象代码319,以便基于源代码318定义至少两组不同的渲染指令。
例如,编译器模块322可以将源代码322解析成两种类型的对象。编译器模块322可以识别一组动态对象,一组动态对象中的每一个包括可以在渲染之间改变的一个或多个动态属性。另外,编译器模块322可以识别一组静态对象,所述静态对象不包括任何动态属性,因此不会在渲染之间改变。
编译器模块322可以获取多组动态和静态对象,并且生成一组初始渲染指令,以在与应用模块324相关联的GUI的初始渲染期间渲染动态和静态对象。另外,编译器模块322可以仅获取所述一组动态对象,并且生成一组更新渲染指令,以在与应用模块324相关联的GUI的后续渲染期间重新渲染可能随时间改变的动态对象,而不重新渲染静态对象。例如,将图2的渲染指令218A和218B视为从源代码216生成的示例多组初始和更新渲染指令。
在一些示例中,为了进一步改进管理并渲染GUI时的效率,编译器模块322可以进行自动键控技术,以确保正确地渲染GUI中的动态对象。编译器模块322可以生成渲染指令,使得向每一动态对象分配唯一标识符。通过唯一标识符,编译器模块322可以确保与一个动态对象相关联的渲染指令不会被误解用于不同的类似动态对象。
编译器模块322可以确定是否在GUI中复制GUI的任何动态图形组件。例如,两个或多个GUI控件(例如,按钮、文本框等)在显示为GUI的一部分时可以在形式或功能上看起来相似。为了确保对特定动态图形组件的更新不会意外地导致对不同的类似动态图形组件的更新,编译器模块222可以自动地将相应密钥分配给在GUI中复制的每个动态图形组件。编译器模块322可以为并入有相应密钥的GUI的图形组件生成渲染指令,使得在执行期间,执行正确的渲染指令以更新特定图形组件。换句话说,编译器模块322可以为在GUI中复制的每个动态图形组件生成相应渲染指令,所述渲染指令根据相应密钥能唯一识别。
在一些情况下,编译器模块322可以基于源代码318的特征来生成密钥。作为一个示例,编译器模块322可以基于源代码318内引用动态图形组件的位置来生成分配给在GUI中复制的每个动态图形组件的相应密钥。例如,编译器模块322所使用的位置可以基于源代码318内引用动态图形组件的相应行号。作为另一示例,编译器模块322所使用的位置可以基于出现在源代码318内的一组渲染指令的第一字节的相应位置,所述源代码定义动态图形组件中的每一个。以此方式,当编译器模块322生成对象代码316时,编译器模块322可以并入有嵌入式地执行的渲染指令,其中嵌入式渲染指令的特定部分被分配给与相应密钥匹配的特定动态对象。
图4是说明根据本公开的技术的由计算系统进行的示例操作的流程图,所述计算系统被配置成进行静态协调以渲染应用的图形用户界面。在图1的计算装置110的场境中描述图4。
在操作时,计算装置110可以使用静态协调技术将应用源代码编译成应用的一个或多个对象文件。作为初始步骤,计算装置110可以接收与应用的图形用户界面相关联的源代码(410)。例如,编译器模块122可以源代码116,作为经由在UIC 112处呈现的开发者用户界面接收到的文件输入。开发者可以在开发者用户界面处编写代码,并且与开发者用户界面交互以使编译器122加载并开始分析源代码116。
计算装置110可以将源代码编译成多个渲染指令,多个渲染指令包括一组初始渲染指令和一组更新渲染指令(420)。例如,当由计算装置110的用户命令编译源代码116时,编译器模块122可以通过将源代码116的部分分成两组指令:与动态对象相关联的第一组以及与静态对象相关联的第二组,来进行静态协调。编译器模块122可以生成包括两组渲染指令的对象代码(例如,对象代码319)。当执行为应用模块124的一部分时,第一组渲染指令可以使UIC 112显示静态和动态对象两者(例如,用户界面114A)。当执行为应用模块124的一部分时,第二组渲染指令可以使UIC 112显示仅对动态对象的更新,而不改变静态对象(例如,用户界面114B)。编译器模块122可以在编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别。
计算装置110可以执行应用(430)。例如,计算装置110的处理器(例如,处理器240)可以执行应用124,并且在这样做时执行在步骤420中创建的两组渲染指令。
计算装置110可以最初通过执行所述一组初始渲染指令来渲染图形用户界面(440)。具体来说,在与应用模块124相关联的GUI的初始渲染期间,计算装置110可以执行第一组“初始”渲染指令以使UIC112显示用户界面114A。
计算装置110可以通过执行一组更新渲染指令后续地以及在一些示例中重复地渲染图形用户界面(450)。例如,在初始渲染之后发生的与应用模块124相关联的GUI的每一渲染期间,计算装置110可以执行第二组“更新”渲染指令以使UIC 112显示用户界面114B。
当执行应用模块124时,计算装置110可以通过依赖于每个动态组件的相应渲染指令中的相应密钥嵌入来消除相似或重复动态图形组件的歧义。例如,如果动态组件132A和132B重复使用相似的渲染功能并且在用户界面114A内看起来相似,则编译器122可以将唯一密钥或其它标识符嵌入组件132A和132B的渲染指令中,使得对渲染用户界面114A进行的更新在适当组件132A’或132B’处发生,而不会带入其它组件组件132A’或132B’中。通过以此方式自动键入GUI的动态组件,并生成用于渲染动态组件的嵌入式机器可读指令,计算装置(诸如计算装置110)可以比其它计算装置更有效地并且以更少错误渲染GUI,例如,依赖于手动(即,开发者发起的)键控技术等的那些计算装置。
在本公开中描述的技术的各个方面可以涉及下面列出的示例。
示例1.一种用于进行静态协调以渲染应用的图形用户界面的方法,所述方法包括:由至少一个处理器接收与应用的图形用户界面相关联的源代码;将源代码编译成多个渲染指令以渲染图形用户界面的视图层次,其中,视图层次定义图形用户界面的图形组件,并且其中,多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集;并且在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中,用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别;以及执行多个渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个。
示例2.根据示例1所述的方法,其中,执行多个渲染指令包括:在图形用户界面的初始渲染期间执行一组初始渲染指令之后:在图形用户界面的每一后续渲染期间,避免执行一组初始渲染指令并且执行一组更新渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个。
示例3.根据示例1所述的方法,其中,编译多个渲染指令包括:从源代码识别包括一个或多个动态属性的一组动态对象;以及从源代码识别不包括任何动态属性的一组静态对象,其中,一组初始渲染指令包括用于渲染一组动态对象和一组静态对象两者的指令,并且其中,一组更新渲染指令包括用于渲染一组动态对象,而不渲染一组静态对象的指令。
示例4.根据示例1所述的方法,其中,编译多个渲染指令进一步包括:确定是否在图形用户界面中复制图形组件中的任一个;将相应密钥自动地分配给在图形用户界面中复制的图形组件中的每一个,其中,来自在图形用户界面中复制的每个图形组件的多个渲染指令中的相应渲染指令根据相应密钥能唯一识别。
示例5.根据示例4所述的方法,进一步包括:基于源代码内引用动态图形组件的位置来生成分配给在图形用户界面中复制的每个图形组件的相应密钥。
示例6.根据示例5所述的方法,其中,位置包括第一字节的相应位置,其中用于图形组件中的每一个的多个渲染指令驻存在源代码内。
示例7.根据示例1所述的方法,其中,多个渲染指令包括编译成机器可读代码的嵌入式渲染指令。
示例8.一种装置,所述装置被配置成进行静态协调以渲染应用的图形用户界面,所述装置包括:一个或多个处理器,处理器被配置成:接收与应用的图形用户界面相关联的源代码;将源代码编译成多个渲染指令以渲染图形用户界面的视图层次,其中,视图层次定义图形用户界面的图形组件,并且其中,多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集;并且在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中,用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别;以及执行多个渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个;以及显示器,显示器被配置成呈现图形组件。
示例9.根据示例8所述的装置,其中,一个或多个处理器被配置成:在图形用户界面的初始渲染期间执行一组初始渲染指令之后:在图形用户界面的每一后续渲染期间,避免执行一组初始渲染指令并且执行一组更新渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个。
示例10.根据示例8所述的装置,其中,一个或多个处理器被配置成:从源代码识别包括一个或多个动态属性的一组动态对象;以及从源代码识别不包括任何动态属性的一组静态对象,其中,一组初始渲染指令包括用于渲染一组动态对象和一组静态对象两者的指令,并且其中,一组更新渲染指令包括用于渲染一组动态对象,而不渲染一组静态对象的指令。
示例11.根据示例8所述的装置,其中,一个或多个处理器被配置成:确定是否在图形用户界面中复制图形组件中的任一个;将相应密钥自动地分配给在图形用户界面中复制的图形组件中的每一个,其中,来自在图形用户界面中复制的每个图形组件的多个渲染指令中的相应渲染指令根据相应密钥能唯一识别。
示例12.根据示例11所述的装置,其中,一个或多个处理器进一步被配置成:基于源代码内引用动态图形组件的位置来生成分配给在图形用户界面中复制的每个图形组件的相应密钥。
示例13.根据示例12所述的装置,其中,位置包括第一字节的相应位置,其中,用于图形组件中的每一个的多个渲染指令驻存在源代码内。
示例14.根据示例8所述的装置,其中,多个渲染指令包括编译成机器可读代码的嵌入式渲染指令。
示例15.一种非暂时性计算机可读存储介质,其上存储有指令,指令在执行时使一个或多个处理器:接收与应用的图形用户界面相关联的源代码;将源代码编译成多个渲染指令以渲染图形用户界面的视图层次,其中,视图层次定义图形用户界面的图形组件,并且其中,多个渲染指令包括:一组初始渲染指令,用于在图形用户界面的初始渲染期间渲染图形组件;以及一组更新渲染指令,用于在图形用户界面的后续渲染期间渲染图形组件的子集;并且在源代码的编译期间将相应密钥自动地分配给图形组件的子集中的一个或多个,其中,用于渲染图形组件的子集中的一个或多个中的每一个的一组更新渲染指令根据相应密钥能唯一识别;以及执行多个渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个。
示例16.根据示例15所述的非暂时性计算机可读存储介质,其中,指令在执行时使一个或多个处理器:在图形用户界面的初始渲染期间执行一组初始渲染指令之后:在图形用户界面的每一后续渲染期间,避免执行一组初始渲染指令并且执行一组更新渲染指令以更新由相应密钥识别的图形组件的子集中的一个或多个。
示例17.根据示例15所述的非暂时性计算机可读存储介质,其中,指令在执行时使一个或多个处理器:从源代码识别包括一个或多个动态属性的一组动态对象;以及从源代码识别不包括任何动态属性的一组静态对象,其中一组初始渲染指令包括用于渲染一组动态对象和一组静态对象两者的指令,并且其中,一组更新渲染指令包括用于渲染一组动态对象,而不渲染一组静态对象的指令。
示例18.根据示例15所述的非暂时性计算机可读存储介质,其中,指令在执行时使一个或多个处理器:确定是否在图形用户界面中复制图形组件中的任一个;以及将相应密钥自动地分配给在图形用户界面中复制的图形组件中的每一个,其中,来自在图形用户界面中复制的每个图形组件的多个渲染指令中的相应渲染指令根据相应密钥能唯一识别。
示例19.根据示例18所述的非暂时性计算机可读存储介质,其中,指令在执行时进一步使一个或多个处理器:基于源代码内引用动态图形组件的位置来生成分配给在图形用户界面中复制的每个图形组件的相应密钥。
示例20.根据示例19所述的非暂时性计算机可读存储介质,其中,位置包括第一字节的相应位置,其中,用于图形组件中的每一个的多个渲染指令驻存在源代码内。
示例21.根据示例15所述的非暂时性计算机可读存储介质,其中,多个渲染指令包括编译成机器可读代码的嵌入式渲染指令。
在一个或多个示例中,所描述的功能可以在硬件、软件、固件或其任何组合中实施。如果在软件中实施,则功能可以作为一个或多个指令或代码存储于计算机可读介质上或通过计算机可读介质传输并且通过基于硬件的处理单元执行。计算机可读介质可以包括对应于有形介质(诸如数据存储介质)的一个或多个计算机可读存储介质,或通信介质,所述通信介质包括例如根据通信协议促进计算机程序从一处传送到另一处的任何介质。以此方式,计算机可读介质通常可以对应于(1)非暂时性的有形计算机可读存储介质,或(2)通信介质,诸如信号或载波。数据存储介质可以是可以由一个或多个计算机或一个或多个处理器访问以检索用于实施本公开中所描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可以包括计算机可读介质。
借助于示例且非限制性地,此类计算机可读存储介质可以包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储装置、磁盘存储装置,或其它磁性存储装置、闪存存储器,或可以用于存储采用指令或数据结构形式的所需程序代码并且可以由计算机访问的任何其它存储介质。而且,任何连接适当地称为计算机可读介质。例如,如果使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL),或例如红外线、无线电和微波的无线技术从网站、服务器或其它远程源传输指令,则同轴电缆、光纤电缆、双绞线、DSL,或例如红外线、无线电和微波的无线技术包括在媒体的定义中。然而,应理解,一个或多个计算机可读存储介质和数据存储介质不包括连接、载波、信号或其它暂时性介质,但替代地涉及非暂时性有形存储介质。本文中使用的磁盘和光盘包括压缩光盘(CD)、激光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光光学地再现数据。上述项的组合也应包括在计算机可读介质的范围内。
指令可以通过一个或多个处理器,诸如一个或多个数字信号处理器(DSP)、通用微处理器、专用集成电路(ASIC)、现场可编程逻辑阵列(FPGA),或其它等效集成或离散逻辑电路执行。因此,本文使用的术语“处理器”可以指前述结构或适用于实施本文描述的技术的任何其它结构中的任一者。另外,在一些方面中,本文所描述的功能可以提供于专用硬件和/或软件模块内。而且,所述技术可以完全在一个或多个电路或逻辑元件中实施。
本公开的技术可以在各种装置或设备中实施,包括无线手持机、集成电路(IC)或一组IC(例如,芯片组)。在本公开中描述了各种组件、模块或单元以强调被配置成执行所公开技术的装置的功能方面,但不一定需要通过不同硬件单元来实现。相反,如上所述,各个单元可以组合在硬件单元中或通过包括如上所述的一个或多个处理器的互操作硬件单元的集合结合合适的软件和/或固件提供。
已描述各个实施例。这些和其它实施例在所附权利要求书的范围内。

Claims (10)

1.一种用于执行静态协调以渲染应用的图形用户界面的方法,所述方法包括:
由至少一个处理器接收与应用的所述图形用户界面相关联的源代码;
将所述源代码编译成多个渲染指令以渲染所述图形用户界面的视图层次,其中,所述视图层次定义所述图形用户界面的图形组件,并且其中,所述多个渲染指令包括:
一组初始渲染指令,所述一组初始渲染指令用于在所述图形用户界面的初始渲染期间渲染所述图形组件;以及
一组更新渲染指令,所述一组更新渲染指令用于在所述图形用户界面的后续渲染期间渲染所述图形组件的子集,并且
在所述源代码的编译期间将相应密钥自动地分配给图形组件的所述子集中的一个或多个,其中,用于渲染图形组件的所述子集中的所述一个或多个中的每一个的所述一组更新渲染指令根据所述相应密钥能唯一识别;以及
执行所述多个渲染指令以更新由所述相应密钥识别的图形组件的所述子集中的所述一个或多个。
2.根据权利要求1所述的方法,其中,执行所述多个渲染指令包括:
在所述图形用户界面的初始渲染期间执行所述一组初始渲染指令之后:
在所述图形用户界面的每一后续渲染期间,避免执行所述一组初始渲染指令并且执行所述一组更新渲染指令以更新由所述相应密钥识别的图形组件的所述子集中的所述一个或多个。
3.根据权利要求1和2的任何组合所述的方法,其中,编译所述多个渲染指令包括:
从所述源代码识别包括一个或多个动态属性的一组动态对象;以及
从所述源代码识别不包括任何动态属性的一组静态对象,
其中,所述一组初始渲染指令包括用于渲染所述一组动态对象和所述一组静态对象两者的指令,并且
其中,所述一组更新渲染指令包括用于渲染所述一组动态对象、而不渲染所述一组静态对象的指令。
4.根据权利要求1至3的任何组合所述的方法,其中,编译所述多个渲染指令进一步包括:
确定是否在所述图形用户界面中复制所述图形组件中的任一个;
将所述相应密钥自动地分配给在所述图形用户界面中复制的所述图形组件中的每一个,
其中,来自在所述图形用户界面中复制的每个图形组件的所述多个渲染指令中的相应渲染指令根据所述相应密钥能唯一识别。
5.根据权利要求4所述的方法,进一步包括:
基于所述源代码内引用所述动态图形组件的位置来生成分配给在所述图形用户界面中复制的每个图形组件的所述相应密钥。
6.根据权利要求5所述的方法,其中,所述位置包括第一字节的相应位置,其中用于所述图形组件中的每一个的所述多个渲染指令驻存在所述源代码内的所述第一字节的所述相应位置处。
7.根据权利要求1至6的任何组合所述的方法,其中,所述多个渲染指令包括编译成机器可读代码的嵌入式渲染指令。
8.一种计算系统,所述计算系统包括被配置成执行根据权利要求1至7所述的方法中的任一个的至少一个处理器。
9.一种系统,所述系统包括用于执行根据权利要求1至7所述的方法中的任一个的装置。
10.一种计算机可读存储介质,所述计算机可读存储介质包括在被执行时使至少一个处理器执行根据权利要求1至7所述的方法中的任一个的指令。
CN201980066348.1A 2019-04-25 2019-04-25 应用视图层次的静态协调 Pending CN112955865A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2019/029228 WO2020219059A1 (en) 2019-04-25 2019-04-25 Static reconcilliation of application view hierarchies

Publications (1)

Publication Number Publication Date
CN112955865A true CN112955865A (zh) 2021-06-11

Family

ID=66857980

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980066348.1A Pending CN112955865A (zh) 2019-04-25 2019-04-25 应用视图层次的静态协调

Country Status (4)

Country Link
US (1) US20210365277A1 (zh)
EP (1) EP3834080B1 (zh)
CN (1) CN112955865A (zh)
WO (1) WO2020219059A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11425220B2 (en) * 2019-10-08 2022-08-23 Magic Leap, Inc. Methods, systems, and computer program products for implementing cross-platform mixed-reality applications with a scripting framework

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030177175A1 (en) * 2001-04-26 2003-09-18 Worley Dale R. Method and system for display of web pages
CN101996073A (zh) * 2009-08-31 2011-03-30 阿里巴巴集团控股有限公司 一种组件渲染方法及装置
CN107391114A (zh) * 2017-06-27 2017-11-24 阿里巴巴集团控股有限公司 页面可视化渲染方法及装置
US10002115B1 (en) * 2014-09-29 2018-06-19 Amazon Technologies, Inc. Hybrid rendering of a web page
CN108228188A (zh) * 2018-01-08 2018-06-29 武汉斗鱼网络科技有限公司 一种视图组件处理方法、电子设备及可读存储介质
US20180196644A1 (en) * 2017-01-11 2018-07-12 Microsoft Technology Licensing, Llc Methods and systems for application rendering

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7844958B2 (en) * 2005-03-11 2010-11-30 Aptana, Inc. System and method for creating target byte code
US8504929B2 (en) * 2008-04-11 2013-08-06 Oracle International Corporation Editing user interface components
US10656920B2 (en) * 2018-06-03 2020-05-19 Apple Inc. Dynamically adaptable tool for graphical development of user interfaces

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030177175A1 (en) * 2001-04-26 2003-09-18 Worley Dale R. Method and system for display of web pages
CN101996073A (zh) * 2009-08-31 2011-03-30 阿里巴巴集团控股有限公司 一种组件渲染方法及装置
US10002115B1 (en) * 2014-09-29 2018-06-19 Amazon Technologies, Inc. Hybrid rendering of a web page
US20180196644A1 (en) * 2017-01-11 2018-07-12 Microsoft Technology Licensing, Llc Methods and systems for application rendering
CN107391114A (zh) * 2017-06-27 2017-11-24 阿里巴巴集团控股有限公司 页面可视化渲染方法及装置
CN108228188A (zh) * 2018-01-08 2018-06-29 武汉斗鱼网络科技有限公司 一种视图组件处理方法、电子设备及可读存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
陈瑞等: "’动态场景的快速光线跟踪技术"", 《华中师范大学学报(自然科学版)》, vol. 45, no. 2, 30 June 2011 (2011-06-30) *
马晓松: ""虚拟现实中具有真实感渲染的 实时动态反射技术研究"", 《西安文理学院学报( 自然科学版)》, vol. 22, no. 2, 31 March 2019 (2019-03-31) *

Also Published As

Publication number Publication date
US20210365277A1 (en) 2021-11-25
EP3834080A1 (en) 2021-06-16
WO2020219059A1 (en) 2020-10-29
EP3834080B1 (en) 2023-04-05

Similar Documents

Publication Publication Date Title
JP2022137193A (ja) 深層学習モデルの分散トレーニング方法、装置、電子機器、記憶媒体およびコンピュータプログラム
US9483240B1 (en) Data binding dependency analysis
US8448132B2 (en) Systems and methods for modifying code generation templates
KR101130525B1 (ko) 서식 유형들을 사용하여 서식을 생성하기 위한 방법 및장치
CN108830720A (zh) 智能合约运行方法、装置、系统和计算机可读存储介质
CN106796522A (zh) 用于更新源代码文件的系统和方法
CN103718155A (zh) 运行时系统
JP2006302285A (ja) 移行互換性を維持したままのジェネリック型の具体化
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN109739600A (zh) 数据处理方法、介质、装置和计算设备
WO2017213846A1 (en) Automating feature graduation
CN110427182A (zh) 一种模板式建设app方法以及装置
CN108351766B (zh) 从移动设备创建和修改应用
CN112015468A (zh) 一种接口文档处理方法、装置、电子设备以及存储介质
CN111782181A (zh) 代码生成方法、装置、电子设备以及存储介质
CN112256355B (zh) 数据驱动的系统功能加载方法、设备及存储介质
CN112604273B (zh) 数据驱动的游戏系统功能加载方法、设备及存储介质
EP3834080B1 (en) Static reconcilliation of application view hierarchies
CN113391811B (zh) 函数编译方法、装置、电子设备及计算机可读存储介质
US9274772B2 (en) Compact type layouts
CN109597611B (zh) 前端数据流控制组件开发系统、方法、设备及存储介质
CN117355818A (zh) 防止最小运行时上的垃圾对象积累
CN116775174A (zh) 一种基于用户界面框架的处理方法、装置、设备及介质
CN114428615B (zh) Css编译方法、样式更新方法、装置、介质及设备
EP4191407A1 (en) Method and device for generating and registering ui service package and loading ui service

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination