客户端侧代码的中间表示的交互式查看器的制作方法

文档序号:12287753阅读:285来源:国知局
客户端侧代码的中间表示的交互式查看器的制作方法与工艺

web浏览器是一种将通过网络获得的信息资源格式化并呈现在显示设备上的应用。信息资源可以是包括各种类型的代码和内容(诸如客户端侧代码、HTML标签、层叠样式表(CSS)、HTTP头部等等)的网页或文档。客户端侧代码被嵌入信息资源并在客户端机器上被执行。通常,客户端侧代码被实现为以动态编程语言编写并在运行时被解释的脚本。客户端侧代码的一些部分可被即时(JIT)编译成机器或可执行代码,以便增加客户端侧代码的执行速度。客户端侧代码的JIT编译可执行旨在提高可执行代码的效率的优化。然而,JIT编译可能不产生在客户端侧代码或JIT编译器的开发期间通常难以被检测出的高效的可执行代码。

概述

提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。

交互式中间表示(IR)查看器与用户或开发者进行交互以便在实时环境中执行的同时显示在客户端侧代码的JIT编译期间生成的客户端侧代码的中间表示。交互式IR查看器允许开发者请求在JIT编译的一个或多个阶段期间生成的中间表示。开发者可修改IR,然后IR被编译并执行。经修改的IR的执行允许开发者在实时环境期间分析客户端侧代码和/或JIT编译器的性能。此分析为开发者提供了对改善客户端侧代码和/或JIT编译器有用的洞察。

从阅读以下详细描述及查看相关附图后,这些及其他特征和优点将显而易见。应该理解,前面的概括说明和下面的详细描述只是说明性的,不会对所要求保护的各方面形成限制。

附图简述

图1示出了交互式IR查看器的示例性系统。

图2是示出图1所示的web浏览器和交互式IR查看器的示例性组件的框图。

图3是示出交互式IR查看器的第一示例性方法的流程图。

图4是示出交互式IR查看器的第二示例性方法的流程图。

图5是示出呈现出的网页的框图,伴随着客户端侧代码的示例性源代码清单以及客户端侧代码的某一片段的对应中间表示。

图6是一种示例性操作环境的框图。

详细描述

本文描述的技术涉及在实时环境中客户端侧代码的即时编译期间获得并显示客户端侧代码的中间表示的视图的交互式中间表示(IR)查看器。

客户端侧代码是从服务器发送到客户端机器中的web浏览器供在客户端机器上执行的代码。因为该代码在客户端机器上执行,所以它被称作“客户端侧代码”。客户端侧代码通常被实现为嵌入网页并在运行时在客户端机器上被解析、解释和/或编译的脚本。客户端侧代码可以以动态编程语言或脚本编程语言(在本文中统称为动态编程语言)编写。动态编程语言在运行时执行静态编程语言在编译期间执行的某些行为。例如,动态编程语言在运行时执行动态类型化、代码扩展以及惰性解释。动态编程语言的示例包括但不限于JavaScript、VBScript、AJAX、Python以及Perl。

在运行时期间,以动态编程语言编写的脚本基于用户输入具有不同且变化的内容。以这样的动态编程语言表示的对象可具有变化的类型,对象可在形状上改变(例如,可具有动态添加的属性),表达式值可改变,和/或其他代码因子可在运行时期间动态地改变。由此,以动态编程语言编写的脚本通常被解释却不被编译,这是因为在编译时间之前可能不完整知晓脚本内容。这导致脚本被低效地执行,这是因为经解释的代码比由编译生成的机器代码执行得更慢。

在一些情况下,脚本的一些部分可被即时编译,从而得到脚本该部分的可执行机器代码。然而,将脚本代码编译为机器代码在其执行之前消耗了高启动成本。为了减少此计算负担,关于在脚本中发生的模式的简档数据被收集。模式可包括相对频繁地被执行的代码。一旦关于脚本的足够量的简档数据被积累,则简档数据可被编译器使用来生成为更快执行而优化的更高效的机器代码。简档数据可被保存在持久存储中,并在脚本随后执行期间被访问。

中间表示是客户端侧代码的语言无关的表示。可对客户端侧代码的中间表示执行编译器优化。中间表示可以以不同的形式体现,诸如但不限于:树表示(例如,抽象句法树、解析树、具体句法树)、有向无环图、字节码等等。

实时环境指的是客户端侧代码的当前执行。实时环境可发生在web浏览器、集成开发环境(IDE)、或任何类型的web应用中客户端侧代码的执行期间。在实时环境中对IR的分析为开发者提供了关于JIT编译器正在如何优化客户端侧代码并将客户端侧代码转换为可执行代码的有价值的洞察。在实时环境期间对IR进行的修改被编译并被转换为在实时环境中随后被执行的可执行代码。这允许开发者分析修改的结果。

注意力现在转向对交互式IR查看器的示例性系统的讨论。图1示出了交互式IR查看器的示例性系统的框图。系统100可包括通过通信框架106通信地耦合的服务器102和计算设备104。虽然图1中所示的系统100具有按照某种拓扑结构的有限数量的元素,但可以理解,系统100可根据给定实现的需要而包括采用替代拓扑结构的更多或更少的元素。

计算设备104和服务器106可以是能够执行可编程指令的任何类型的电子设备,诸如但不限于:移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持式计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务器、工作站、小型机、大型机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统或其组合。通信框架106可以是能够利用任何通信协议或按照任何配置来促进计算设备104与服务器102之间的通信的任何类型的通信链接,诸如但不限于:有线网络、无线网络或其组合。在一个或多个实施例中,通信框架106可被实现为因特网。

计算设备104可包括通过通信框架106从服务器102检索的文档108、web浏览器110和显示设备112。web浏览器110一种程序,该程序利用诸如统一资源定位符(URL)之类的网络地址来检索文档108,格式化文档108的信息,以及在显示设备112上呈现经格式化的文档114。web浏览器110的示例包括但不限于InternetMozillaChrome等等。

文档108可以是诸如网页之类的包括标记语言116的代码的web文档,标记语言诸如超文本标记语言(HTML)、动态HTML(DHTML)、可扩展HTML(XHTML)、可扩展标记语言(XML)等。文档108可包括文档对象模型(DOM)对象118和一个或多个脚本120。DOM对象118包括根据DOM约定在文档中表示的一个或多个对象,DOM约定是用于表示对象并与对象进行交互的跨平台且语言无关的约定。DOM对象118可包括被直接包括于文档108中或由文档108引用的对象。脚本120可包括允许对DOM对象118作出改变的以动态编程语言编写的代码。

交互式IR查看器122可以是作为web浏览器110的插件提供的web浏览器110的添加组件。替换地,交互式IR查看器122可以是一组插件或内置工具(称为F12开发者工具)的一部分。这些工具是被添加到web浏览器110并被用于调试和/或分析web浏览器110对文档的执行的软件组件。通过激活键盘上的F12键来启动这些工具。在其他实施例中,交互式IR查看器122可以是web浏览器110的一部分。实施例不限于交互式IR查看器122的特定配置。

交互式IR查看器122可以是计算机程序指令序列,该序列在被处理器执行时致使该处理器根据规定的任务来执行方法和/或操作。交互式IR查看器122可被实现为程序代码、程序、过程、模块、代码段、程序栈、中间件、固件、方法、例程等。可执行的计算机程序指令可根据用于指示计算机执行特定功能的预定义的计算机语言、方式或句法来实现。这些指令可以使用任何合适的高级、低级、面向对象、可视、编译、和/或解释编程语言来实现。

显示设备112示出了由web浏览器110输出的经格式化的文档114、在JIT编译的某一阶段处的客户端侧代码的中间表示124、以及客户端侧代码的源代码126。显示设备112可以是任何类型的电子显示器,诸如但不限于:视觉监视器、电视、等离子面板、液晶显示器、激光电视、触摸屏等等。显示设备112可被嵌入计算设备或被附连为单独的外围设备。实施例不限于显示设备的任何特定配置。

注意力现在转向图2,图2描绘了客户端侧代码的JIT编译中使用的web浏览器110和交互式IR查看器122的组件的更详细的描述。web浏览器110接收嵌入文档108中的客户端侧代码202。web浏览器110可解释并随后JIT编译客户端侧代码202以便产生可执行代码234。web浏览器110可包括解析器204、解释器208、以及JIT编译器210。

解析器204接收客户端侧代码202的源代码,并执行符记生成或词法分析,使得源代码被格式化为符号或符记。解析器204可对符记执行错误校验以便确定表达式是否是根据底层编程语言的语法形成的,以及检查句法错误。解析器204可以以任何合适的形式输出经解析的源代码,经解析的源代码被输入到解释器208。在一个实施例中,解析器204生成字节码206。字节码206包括一个或多个字节的数据以便表示与执行客户端侧代码202的虚拟机相关联的指令。

解释器208解释客户端侧代码202。解释器208可被实现为JavaScript解释器、VB解释器、Python解释器等等。解释器208还可包括简档生成器212。简档生成器212被配置为分析在客户端侧代码202中多次发生的模式,以便收集关于用于生成简档数据214的客户端侧代码202的统计数据并进一步收集历史信息。历史信息可被用于检测在客户端侧代码中找到的被频繁执行的功能、循环体、助手调用、或属性访问的存在。通过指示这样的模式的存在,历史模式信息可被用于通过为通常出现的模式生成可执行代码234来更高效地执行客户端侧代码202。解释器208的输出是被转发到JIT编译器210的简档数据214。

JIT编译器210是“即时”编译器,因为字节码的一些部分是按需编译而不是在执行之前被编译的。JIT编译器210利用简档数据214来确定字节码的哪些部分要被编译成可执行代码2340并被执行。JIT编译器210在各个阶段执行编译。可能存在各种优化阶段(即,阶段1至阶段N,220,224),其中每个优化阶段生成从所应用的优化得到的中间表示(IR 222,IR 226)。优化可以包括内联优化、全局优化、局部和全局公共子表达式消除、循环展开等等。另外,JIT编译器210执行寄存器分配228和机器代码编码232。寄存器分配228将处理器寄存器指派给程序变量。机器代码编码232生成可执行代码234。

交互式IR查看器122与JIT编译器210交互以便在所选阶段获得IR,该IR然后被显示给开发者。交互式IR查看器122可包括一个或多个应用编程接口(API)240、用户界面242、以及引擎244。API 240被用于与JIT编译器210交互以便获得开发者所请求的JIT编译的某一特定特征、功能和阶段的IR。

用户界面242便于开发者的交互以便发起对某一特定IR的请求。例如,如图2所示,GET_IR()API 246可被用于请求对应于JIT编译器210的某一特定文件、功能和阶段的IR。所请求的IR 248可被返回到IR查看器122并呈现在显示设备112上。开发者可修改IR,而经修改的IR 250可被传送到JIT编译器210。经修改的IR可通过诸如MODIFIED_IR()API 250之类的另一API调用被传送到JIT编译器210。从经修改的IR 250产生的可执行代码234和该可执行代码的后续执行可被分析,以便获得可从经修改的IR 250产生的性能改进。

客户端侧代码202可不被包含在单个文件中,而可包括若干文件。每个文件可包括开发者可能感兴趣的各种功能、方法或其他程序元素。为了指定相关联的程序元素的IR,开发者可利用剖析器工具,剖析器工具生成关于构成客户端侧代码202的文件数量以及包含在每个文件中的功能、方法、类、对象以及程序元素的信息。该剖析器信息246可被开发者用于选择该开发者用来请求IR的文件、功能、以及编译阶段。交互式IR查看器122可向开发者显示剖析器信息246以便帮助开发者选择客户端侧代码的一部分。

现在将注意力转到参考各种示例性方法而被描述的进一步的实施例的描述。可以理解,除非另外指明,否则代表性的方法不一定必须以所呈现的次序或以任何特定次序来执行。而且,参考这些方法描述的各种活动可以串行或并行的方式,或串行和并行操作的任何组合来执行。按给定的一组设计和性能约束的需要,方法可使用所述实施例或替换实施例的一个或多个硬件元件和/或软件元件来实现。例如,方法可被实现为由逻辑设备(例如,通用或专用计算机)执行的逻辑(例如,计算机程序指令)。

图3示出了交互式IR查看器的示例性方法的流程图。应理解,方法300可表示由此处所述的一个或多个实施例执行的某些或全部操作,且方法可包括比图3中所述的操作更多或更少的操作。在一实施例中,该方法可示出用于系统100和200的操作。

图3示出了描绘开发者与交互式IR查看器的交互的示例性方法。方法可由开发者(例如,用户、最终用户、系统管理员、开发者等)激活web浏览器以便呈现文档来开始(框302)。文档可通过网络(例如,因特网)被检索,其中web浏览器使用网络地址(例如,URL)来检索该文档。文档可以是web浏览器格式化并呈现在显示设备上的网页。文档包含客户端侧代码,诸如web浏览器解释并编译的脚本(例如,JavaScript、VB Script等)。web浏览器将脚本的源代码转换成字节码(框304),字节码在被JIT编译(框308)成被执行(框312)的可执行代码310之前被解释和剖析(框306)。

同时,当web浏览器如上所述执行客户端侧代码时,开发者可激活交互式IR查看器(框314)。交互式IR查看器可以是web浏览器的插件、被嵌入在web浏览器内、或是嵌入在web浏览器内的F12开发者工具的一部分。开发者可通过web浏览器的用户界面上显示的单独的选项卡、通过工具栏或菜单、通过F12键的激活或通过任何其他授权来激活交互式IR查看器。

在激活交互式IR查看器之际,开发者可请求客户端侧代码的某一特定部分的IR(框316)。与该请求相关联的客户端侧代码的源代码与相应的IR一起被显示给用户(框318)。选择可指定客户端侧代码的某一特定文件、该特定文件内的功能、以及某一特定编译阶段。

所请求的中间表示从JIT编译器被获得并被显示给开发者(框318)。开发者可修改中间表示(框320-是)。经修改的中间表示可然后被编译(框322),而得到的可执行代码被执行(框312)。开发者可以选择不修改中间表示(框320-否),而是选择另一中间表示来查看(框320-否,框324-否)。当用户完成交互式IR查看器(框322-是)时,中间IR查看器结束处理。

现在将注意力转到图4,其示出了交互式IR查看器的另一示例性方法400。应理解,方法400可表示由此处所述的一个或多个实施例执行的某些或全部操作,且方法可包括比图4中所述的操作更多或更少的操作。

在一个或多个实施例中,交互式IR查看器可以是web浏览器的插件(例如,附加组件、软件组件、嵌入式管理单元)。在这些实施例中,当用户激活web浏览器时,交互式IR查看器向web浏览器注册自己并且建立用于交换数据的协议(框402)。此后,交互式IR查看器成为web浏览器的一部分。开发者可通过web浏览器上的菜单选项、通过键击(例如,F12)、或以任何其他所期望的方式来激活交互式IR查看器。一旦交互式IR查看器被激活,则显示交互式IR查看器的用户界面。开发者使用交互式IR查看器的用户界面以便与开发者交互以及显示客户端侧代码的源代码及其中间表示。

当web浏览器正在执行嵌入在文档中的客户端侧代码时,开发者可利用交互式IR查看器的用户界面来请求客户端侧代码的某一特定片段的中间表示。开发者可通过指示出开发者感兴趣的文件、功能和阶段来指定该片段(框404)。交互式IR查看器然后获得对应于所请求的文件和功能的源代码,该源代码被显示给开发者(框406)。

交互式IR查看器然后获得与源代码的所请求的部分相关联的对应的中间表示(框408)。交互式IR查看器可发出一个或多个API调用以便获得所请求的中间表示(框408)。所请求的中间表示然后被呈现在显示器上(框410)。

开发者可利用中间表示来执行一个或多个动作。开发者可通过添加、删除或改变中间表示来修改中间表示。用户界面可被用于接收对IR的修改(框412)。交互式IR查看器可通过一个或多个API调用将经修改的IR传送给JIT编译器(框414)。JIT编译器可在编译中使用经修改的IR,并生成被web浏览器执行的可执行代码。用户可继续按预期那样作出附加选择和修改。

图5示出了可由交互式IR查看器显示的数据的示例性视图。web浏览器可显示所显示的网页的视图502,而交互式IR查看器可显示客户端侧代码504的源代码的视图和所显示的IR的视图506。每个视图502、504、506可在单独的窗口中被显示,在相同窗口的单独部分中被显示,或没有其他视图而单独地被显示。实施例不限于所显示的视图的任何特定布局。

在此示例中,网页可包括脚本代码,该脚本代码包括功能cssRule。功能cssRule查找与输入字符串rulestr相关联的规则。该功能包括十一行代码,508-528。行222将输入字符串rulestr转换成小写字符。在行512,变量retVal被设置为空。行514检查样式表是否存在,并然后搜索相关联的规则。外部循环(行516至528)搜索与一组文档相关联的每个样式表,而内部循环(行520-528)在样式表中搜索与输入字符串rulestr对应的规则。

在此示例中,开发者在JIT编译的某一特定阶段后请求了功能cssRule的第2行的IR。该IR在视图506中被示出。该IR的每一行包括一条指令。在此示例中,指令包括符号和生成与该符号相关联的值的操作。例如,行532示出了被设置为使用符号{s16}的内容执行的LdMethodFld操作的结果的符号s12。行534示出了被设置为用值‘1’执行的StartCall操作的结果的符号s17。行536示出了被设置为使用符号s12和{s18}的内容执行的CallI操作的结果的符号{s18}。行538示出了被设置为使用符号s19的内容执行的Ld_A操作的结果的符号s6。开发者可改变视图506中所示的IR代码中的这些行中的任何一行。

现在将注意力转向对示例性操作环境的讨论。图6描绘了一个这样的示例性操作环境600。应当注意,操作环境600是示例性的而不旨在对各实施例的功能性提出任何限制。一些实施例可被应用于操作环境600,该操作环境具有通过通信框架604与一个或多个服务器606通信的一个或多个客户机602。操作环境600可以在网络环境、分布式环境、多处理器环境、或能够访问远程或本地存储设备的独立计算设备中配置。

客户机602可被实现为硬件设备、软件模块或其组合。客户机602可以是任何类型的电子设备,诸如但不限于:移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持式计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、刀片服务器、因特网服务器、工作站、小型计算机、大型计算机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统、或其组合。客户机602还可被实现为具有在单个执行路径中执行、在多个并发的执行路径(例如,线程、进程等)中执行、或以任何其他方式执行的指令的软件模块。

服务器606可被实现为硬件设备、软件模块或其组合。服务器606可以是能够执行可编程指令的任何类型的电子设备,诸如但不限于:移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持式计算机、服务器、服务器阵列或服务器场、刀片服务器、web服务器、网络服务器、因特网服务器、工作站、小型机、大型机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统或其组合。服务器606还可被实现为具有在单个执行路径中执行、在多个并发的执行路径(例如,线程、进程等)中执行、或以任何其他方式执行的指令的软件模块。

通信框架604促进客户机602和服务器606间的通信。通信框架604可以实现任何公知通信技术,诸如适用于与分组交换网络(例如,诸如因特网之类的公共网络、诸如企业内联网之类的专有网络,等等)、电路交换网络(例如,公共交换电话网)、或分组交换网络和电路交换网络的组合(使用合适的网关和转换器)一起使用的技术。客户机602和服务器606可包括被设计成可与通信框架604进行互操作的各种类型的标准通信元件,诸如一个或多个通信接口、网络接口、网络接口卡、无线电、无线发射机/接收机、有线和/或无线通信介质、物理连接器等等。有线通信介质的示例可包括导线、电缆、金属线、印刷电路板、背板、交换光纤、半导体材料、双绞线、同轴电缆、光纤、传播信号等等。无线通信介质的示例可包括声学、射频频谱、红外和其他无线介质。

服务器606可包括一个或多个处理器608、通信接口610、以及存储器612。处理器608可以是市场上可购得的任何处理器,且可包括双微处理器和多处理器架构。通信接口610促进服务器606与其他计算设备之间的有线或无线通信。

存储器612可以是可存储可执行过程、应用和数据的任何计算机可读存储介质。计算机可读存储介质不属于诸如通过载波发射的调制数据信号之类的传播信号。它可以是任何类型的存储器设备(例如,随机存取存储器、只读存储器等)、磁存储、易失性存储、非易失性存储、光存储、DVD、CD、软盘驱动器等。存储器612还可包括一个或多个外部存储设备或位于远程的存储设备。存储器612可包含如下指令和数据:

●操作系统614;

●一个或多个文档616;以及

●各种其他应用和数据844。

客户机602可包括一个或多个处理器620、通信接口622、以及存储器624。处理器620可以是市场上可购得的任何处理器,且可包括双微处理器和多处理器架构。通信接口622促进客户机602与其他计算设备之间的有线或无线通信。

存储器624可以是可存储可执行过程、应用和数据的任何计算机可读存储介质。计算机可读存储介质不属于诸如通过载波发射的调制数据信号之类的传播信号。它可以是任何类型的存储器设备(例如,随机存取存储器、只读存储器等)、磁存储、易失性存储、非易失性存储、光存储、DVD、CD、软盘驱动器等。存储器624还可包括一个或多个外部存储设备或位于远程的存储设备。存储器624可包含如下指令和数据:

●操作系统626;

●包括解析器630、解释器632、以及JIT编译器634的web浏览器628;

●包括一个或多个API 638、用户界面640、以及引擎642的交互式IR查看器636;

●客户端侧代码644;

●剖析器信息646;以及

●各种其他应用和数据648。

尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1