CN104603756A - 经由沙盒执行的推测性的资源预提取 - Google Patents
经由沙盒执行的推测性的资源预提取 Download PDFInfo
- Publication number
- CN104603756A CN104603756A CN201380043240.3A CN201380043240A CN104603756A CN 104603756 A CN104603756 A CN 104603756A CN 201380043240 A CN201380043240 A CN 201380043240A CN 104603756 A CN104603756 A CN 104603756A
- Authority
- CN
- China
- Prior art keywords
- script
- speculatively
- resource
- perform
- found
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/143—Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program code
- G06F8/4442—Reducing the number of cache misses; Data prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Information Transfer Between Computers (AREA)
Abstract
多个方面包括浏览器系统和方法,所述浏览器系统和方法通过在沙盒脚本引擎中预处理网络文档(HTML页面)内的脚本以发现在网络文档中没有明确请求的资源,从而能够推测性地预提取并下载这样的资源,来对网页进行加载/渲染。脚本的沙盒执行以及对发现的资源的下载可以与其它浏览器操作(例如,HTML解析)和其它资源请求的执行并行地进行。可以将沙盒脚本引擎与其它浏览器部件隔离开或分开。沙盒脚本引擎可以操作以加速识别与标准脚本执行进程不一致的资源的进程。
Description
相关专利申请的交叉引用
本申请要求享有以下专利申请的优先权的利益:2012年8月17日递交的、名称为“Speculative Resource Prefetching via Sandboxed Execution”的美国临时专利申请序列No.61/684,601以及2012年8月16日递交的、名称为“Speculative Resource Prefetching via Sandboxed Execution”的美国临时专利申请序列No.61/683,996,故以引用方式将二者的全部内容并入本文。
技术领域
本发明涉及用于在网络浏览器中渲染HTML文档的方法、系统和设备,更具体地说,本发明涉及将网络浏览器操作并行化的方法。
背景技术
在过去几年中,无线通信技术和移动电子设备(例如,蜂窝电话、平板设备、膝上型计算机等)已日益普及,并且越来越多的被使用。为了与增长的消费者需求保持同步,移动电子设备已经变得功能更加丰富,并且现在通常包括多个处理器、片上系统(SoC)、以及允许移动设备用户在他们的移动设备上执行复杂且耗电的软件应用(例如,网络浏览器、视频流应用等)的其它资源。由于这些改进和其它改进,智能电话和平板计算机已日益普及,并且作为很多用户选择的平台,正在取代膝上型计算机和台式机器。
现在移动设备用户能够通过经由他们移动设备上的浏览器应用来访问互联网,从而轻松且方便地完成他们日常任务中的很多任务。随着移动设备持续日益普及,能够更好地使用现代移动设备的多处理能力的网络浏览器将是消费者所期望的。
发明内容
各个方面包括预提取资源的方法,其包括:由在计算设备的处理器中运行的第一进程对HTML文档进行扫描,以发现脚本;由第二进程推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源;通过发出下载所发现的资源的请求,来推测性地预提取资源;以及丢弃通过推测性地执行所发现的脚本而生成的结果。
在一方面,推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源可以包括:推测性地执行所发现的脚本,以发现在所述计算设备的电子显示器上渲染所述HTML文档所需要的资源。在另外的方面,推测性地执行所发现的脚本可以包括:与浏览器操作的执行并行地来推测性地执行所发现的脚本。在另外的方面,推测性地执行所发现的脚本可以包括:与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本。
在另外的方面,推测性地预提取资源可以包括:与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源。在另外的方面,推测性地执行所发现的脚本可以包括:执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分。在另外的方面,推测性地执行所发现的脚本可以包括:仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分。
在另外的方面,并行地来推测性地执行所发现的脚本可以包括:基于启发法来执行所发现的脚本。在另外的方面,所述方法可以包括:限制由对所发现的脚本的推测性执行而生成的数据结构的大小。在另外的方面,由第一进程对HTML文档进行扫描以发现脚本可以包括由HTML扫描器对所述HTML文档进行扫描,以及由第二进程推测性地执行所发现的脚本可以包括由沙盒脚本执行引擎推测性地执行所发现的脚本。
另外的方面包括计算设备,所述计算设备可以包括:用于由第一进程对HTML文档进行扫描以发现脚本的单元;用于由第二进程推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源的单元;用于通过发出下载所发现的资源的请求来推测性地预提取资源的单元;以及用于丢弃通过推测性地执行所发现的脚本而生成的结果的单元。在一方面,用于推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源的单元可以包括:用于推测性地执行所发现的脚本以发现在所述计算设备的电子显示器上渲染所述HTML文档所需要的资源的单元。
在另外的方面,用于推测性地执行所发现的脚本的单元可以包括:用于与浏览器操作的执行并行地来推测性地执行所发现的脚本的单元。在另外的方面,用于推测性地执行所发现的脚本的单元可以包括:用于与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本的单元。在另外的方面,用于推测性地预提取资源的单元可以包括:用于与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源的单元。在另外的方面,用于推测性地执行所发现的脚本的单元可以包括:用于执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分的单元。
在另外的方面,用于推测性地执行所发现的脚本的单元可以包括:用于仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分的单元。在另外的方面,用于并行地来推测性地执行所发现的脚本的单元可以包括:用于基于启发法来执行所发现的脚本的单元。在另外的方面,计算设备可以包括:用于限制由对所发现的脚本的推测性执行而生成的数据结构的大小的单元。在另外的方面,用于由第一进程对HTML文档进行扫描以发现脚本的单元可以包括用于由HTML扫描器对所述HTML文档进行扫描的单元,以及用于由第二进程推测性地执行所发现的脚本的单元可以包括用于由沙盒脚本执行引擎推测性地执行所发现的脚本的单元。
另外的方面包括计算设备,所述计算设备包括处理器,所述处理器配置有处理器可执行指令以执行包括以下操作的操作:由第一进程对HTML文档进行扫描以发现脚本;由第二进程推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源;通过发出下载所发现的资源的请求,来推测性地预提取资源;以及丢弃通过推测性地执行所发现的脚本而生成的结果。在一方面,所述处理器可以配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源可以包括:推测性地执行所发现的脚本,以发现在所述计算设备的电子显示器上渲染所述HTML文档所需要的资源。
在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本可以包括:与浏览器操作的执行并行地来推测性地执行所发现的脚本。在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本可以包括:与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本。在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得推测性地预提取资源可以包括:与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源。
在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本可以包括:执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分。在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本可以包括:仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分。在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得并行地来推测性地执行所发现的脚本可以包括:基于启发法来执行所发现的脚本。
在另外的方面,所述处理器可以配置有处理器可执行指令以执行还包括以下操作的操作:限制由对所发现的脚本的推测性执行而生成的数据结构的大小。在另外的方面,所述处理器可以配置有处理器可执行指令以执行操作,使得:由第一进程对HTML文档进行扫描以发现脚本可以包括由HTML扫描器对所述HTML文档进行扫描;以及由第二进程推测性地执行所发现的脚本可以包括由沙盒脚本执行引擎推测性地执行所发现的脚本。
另外的方面包括其上存储有处理器可执行软件指令的非暂时性计算机可读存储介质,所述处理器可执行软件指令被配置为使处理器执行用于预提取资源的操作,所述操作包括:由第一进程对HTML文档进行扫描,以发现脚本;由第二进程推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源;通过发出下载所发现的资源的请求,来推测性地预提取资源;以及丢弃通过推测性地执行所发现的脚本而生成的结果。
在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源可以包括:推测性地执行所发现的脚本,以发现在电子显示器上渲染所述HTML文档所需要的资源。在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得推测性地执行所发现的脚本可以包括:与浏览器操作的执行并行地来推测性地执行所发现的脚本。在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得推测性地执行所发现的脚本可以包括:与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本。
在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得推测性地预提取资源可以包括:与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源。在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得推测性地执行所发现的脚本可以包括:执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分。在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得推测性地执行所发现的脚本可以包括:仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分。
在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得并行地来推测性地执行所发现的脚本可以包括:基于启发法来执行所发现的脚本。在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行还包括以下操作的操作:限制由对所发现的脚本的推测性执行而生成的数据结构的大小。在另外的方面,所存储的处理器可执行软件指令可以被配置为使处理器执行操作,使得:由第一进程对HTML文档进行扫描以发现脚本可以包括由HTML扫描器对所述HTML文档进行扫描;以及由第二进程推测性地执行所发现的脚本可以包括由沙盒脚本执行引擎推测性地执行所发现的脚本。
附图说明
并入本文且构成该说明书的部分的附图示出了本发明的示例性方面。附图以及上面给出的一般描述和下面给出的详细描述一起用于解释本发明的特征,而非限制所公开的方面。
图1是示出了可以在实现各个方面的计算设备中使用的示例性片上系统(SOC)架构的部件框图。
图2是示出了可以用于实现各个方面的示例性多核处理器架构的功能框图。
图3A是示出了用于渲染HTML文档的一方面的浏览器方法的过程流图。
图3B是示出了一方面的浏览器系统中的示例逻辑部件、信息流、操作和转换的功能和过程流图。
图4是示出了一方面的浏览器系统中的示例逻辑部件、功能部件、信息流和子系统的功能框图。
图5是根据一方面示出了实现并行的浏览器基础结构的一方面的浏览器系统的功能框图。
图6是示出了在页面加载/渲染操作之前处理HTML文档以发现和预提取资源的一方面的浏览器方法的过程流图。
图7A是示出了使用推测技术和启发法来预测对文档资源的使用的一方面的浏览器方法的过程流图。
图7B是示出了并行地来推测性地预提取资源的一方面的浏览器方法的过程流图。
图7C是示出了并行地预处理脚本的一方面的浏览器方法的过程流图。
图8是示出了处理预提取的资源的一方面的浏览器方法的过程流图。
图9是示出了适合于与各个方面一起使用的CSS引擎中的示例性功能部件的功能框图。
图10是示出了用于并行地在多个节点上执行规则匹配和级联操作的一方面的样式化方法的过程流图。
图11A是适合于在各个方面中使用的示例文档对象模型(DOM)树的示图。
图11B是与图11A中所示的DOM树相对应的任务有向无环图(DAG)的示图。
图12是适合于与各个方面一起使用的示例性移动设备的部件框图。
图13是适合于与各个方面一起使用的示例性服务器的部件框图。
图14是适合于实现各个方面的膝上型计算机的部件框图。
具体实施方式
将参照附图详细描述各个方面。在可能的情况下,将贯穿全部附图使用相同的附图标记来指代相同或相似的部分。对特定例子和实施例的引用是出于说明的目的,而非旨在限制本发明或权利要求的范围。
网络浏览器是实现多种标准的复杂的软件应用,需要支持传统行为,并且是高度动态且交互式的。通常网络浏览器设计者的目标在于实现以下各项的最佳混合:页面加载的快速响应时间(即使在存在长网络时延的情况下)、高性能(例如,以能够实现网络应用的交互性)、以及高用户接口响应性以提供良好的用户体验。
各个方面提供了网络浏览器、浏览器方法和浏览器系统,所述网络浏览器、浏览器方法和浏览器系统被配置为通过利用由现代多处理器移动设备架构使用进程的沙盒执行实现的并发性/并行性,经由对推测性的资源预提取的使用,来实现快速响应时间、高性能和高用户接口响应性。
现代网络文档(例如,HTML页面、HTML文档等)可以引用大量的外部资源,并且每个所引用的外部资源可以包括对其它外部资源的引用。例如,HTML文档通常包括对图像、音频、级联样式表(CSS)和的引用,并且所引用的资源(例如,CSS、音频、)还可以包括对额外的外部资源(例如,图像、音频等)的引用。通常,并非所有的所引用的外部资源是在移动设备的电子显示器上适当地渲染网页所需要的(或者甚至是所使用的)。
软件开发者越来越多地使用脚本(例如,Javascript)来动态地确定特定的应用-设备组合(例如,网络浏览器-移动设备组合)将需要的资源。例如,脚本可以评估与客户端应用(例如,浏览器)和计算设备相关的各个因素,以识别要下载的资源。本质上,这样的脚本可以基于所评估的因素来针对资源(例如,图像、CSS、其它等)动态地构建URL。因此,HTML文档可能需要如下所述的资源:这些资源在HTML文档中没有被明确标识,并且仅可以通过执行包括在HTML文档中的代码来确定。
代码可以改变其包含HTML(以及HTML代码本身)的状态、行为和/或表示,并且通常要求HTML解析器顺序地和/或通过遵循在HTML规范中定义的排序规则,来执行遇到的代码(或脚本)。例如,当HTML解析器遇到脚本标签(即,用于定义诸如脚本之类的客户端侧脚本的<script>标签)时,在HTML解析器可以继续解析HTML文档的剩余部分之前,其必须等待脚本被下载并且被执行。因此,可以在脚本(即,在<script>标签内的代码)的执行内将所有资源请求串行化(即,要求一个接一个地被执行)。另外,对于HTML文档扫描操作来说,可能更加难以静态地预测正确渲染网页将需要的资源。
各个方面包括如下所述的方法和浏览器:通过在沙盒引擎中推测性地预提取资源以发现并下载在HTML文档中没有明确请求的资源,来克服现有解决方案的这些限制和其它限制。可以与其它浏览器操作(例如,HTML解析)和其它资源请求的执行并行地执行对资源的下载。
在一方面,沙盒引擎可以扫描JavaScript代码,并且仅执行与发现外部资源最相关的代码的选择部分和/或选择操作。因为该沙盒执行和扫描操作仅涉及发现资源,所述资源为执行脚本以产生网页时所述脚本所请求的,所以扫描操作并不受HTML规范规则约束,并且不必运行/执行所有的所遇到的代码。此外,通过不完全执行所有遇到的代码,沙盒引擎可以快速地执行JavaScript扫描操作。
在一方面,沙盒引擎可以应用启发法来对JavaScript扫描操作进一步加速。通过举例的方式,这样的启发法可以包括限制总执行时间(例如,每个脚本或操作耗费最多10ms等)、循环迭代的数量(例如,仅处理循环的前10个迭代等)、递归深度、支持的特征、抽象解释等。
各个方面的方法和浏览器可以修改浏览器客户端与引擎之间的应用编程接口(API)。通常,脚本引擎(例如,引擎)提供对浏览器API(即,使得脚本能够调用浏览器操作的接口)的绑定(即,用于映射语言的API),以调用浏览器操作(例如,操纵DOM,访问网络等)。各个方面可以监测浏览器API资源请求,并且修改绑定(或者为脚本引擎提供单独的绑定集),以使得资源请求被重定向到不同的浏览器部件(例如,预提取器部件)。以这种方式,可以将资源请求和/或收集的信息直接传递给浏览器部件(预提取器),以用于进一步处理。
本文中使用“示例性”一词意指“用作例子、实例或说明”。本文中被描述为“示例性”的任何实施例不必须被解释为比其它实施例更优选或更具优势。
本文中可互换地使用术语“移动设备”和“计算设备”,以指代以下各项中的任一项或全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理(PDA)、膝上型计算机、平板计算机、智能本、掌上型计算机、无线电子邮件接收器、具有多媒体互联网功能的蜂窝电话、无线游戏控制器以及包括可编程处理器和存储器的类似的个人电子设备。尽管各个方面在可能具有受限的处理功率的移动设备(例如,蜂窝电话)中是特别有用的,但是这些方面在执行使用动态、脚本和/或标记语言编写的脚本和/或应用的任何计算设备中是一般有用的。
本文中使用的术语“片上系统”(SOC)用于指代包含在单个衬底上集成的多个资源和/或处理器的单个集成电路(IC)芯片。单个SOC可以包含用于数字、模拟、混合信号和射频功能的电路。单个SOC还可以包括任意数量的通用处理器和/或专用处理器(数字信号处理器、调制解调器处理器、视频处理器等)、存储块(例如,ROM、RAM、闪存等)以及资源(例如,定时器、调压器、振荡器等)。SOC还可以包括用于控制集成资源和处理器以及用于控制外围设备的软件。
本文中使用的术语“多核处理器”用于指代包含两个或更多的独立处理核(例如,CPU核)的单个集成电路(IC)芯片或芯片封装,其中,处理核被配置为读取并执行程序指令。SOC可以包括多个多核处理器,并且SOC中的每个处理器可以被称为核。本文中使用的术语“多处理器”用于指代包括两个或更多处理单元的系统或设备,其中,处理单元被配置为读取并执行程序指令。
如本申请中所使用的,术语“部件”、“模块”、“系统”、“引擎”、“管理器”等旨在包括计算机相关实体,例如但不限于,被配置为执行特定操作或功能的硬件、固件、硬件和软件的组合、软件、或运行中的软件。例如,部件可以是但不限于,处理器上运行的进程、处理器、对象、可执行文件、执行的线程、程序和/或计算机。通过说明的方式,计算设备上运行的应用和计算设备均可以被称为部件。一个或多个部件可以位于进程和/或执行的线程内,以及一个部件可以位于一个处理器或核上和/或分布在两个或更多处理器或核之间。另外,可以通过其上存储有各种指令和/或数据结构的各种非暂时性计算机可读介质来执行这些部件。部件可以通过本地和/或远程进程、函数或过程调用、电子信号、数据分组、存储器读/写以及与其它已知的计算机、处理器和/或进程相关的通信方法的方式来进行通信。
在本申请中,术语“应用编程接口”以及其缩略语“API”,一般被用来指代可以由第一软件部件用于与第二软件部件进行通信的任何软件接口。API可以包括用于例程、过程、函数、方法、数据结构、对象类和变量的规范。API还可以包括用于将API映射到另一高级编程语言的特性(语法或语义)的工具。这样的工具和/或映射本身可以是API,并且被称为“语言绑定”或“绑定”。
在本申请中,术语“标记语言”一般被用来指代用于注释文本使得处理器可以在语法上将注释与文本区分开的任何编程语言和/或系统。标记语言的例子包括Scribe、标准通用标记语言(SGML)、超文本标记语言(HTML)、可扩展标记语言(XML)和可扩展超文本标记语言(XHTML)。
在本申请中一般地且可互换地使用术语“动态语言”和“脚本语言”,以指代任何动态语言、脚本语言、或者指代用于编写在运行时被解释和/或被编译的程序(本文中作为“脚本”)的任何语言。这些术语也可以指代在托管运行时运行的且被动态编译的任何语言。因此,为了本申请的目的,在各个方面的描述中对术语“动态语言”和“脚本语言”的使用不应当被解释为将权利要求限制为从源代码或字节代码解释的语言,或者限制为与传统上被编译为本地机器代码的程序一起执行的语言。例如,在本申请的范围内的动态语言和脚本语言的例子包括Perl、Python和Ruby,以及在将来可能开发的其它类似语言。
在本申请中,术语“样式表语言”和“样式语言”一般被用来指代任何计算机语言,所述任何计算机语言表达结构化文档的表示使得可以将文档的表示样式与文档的内容分开。样式表语言的例子是级联样式表(CSS),其通常用于描述用标记语言编写的文档的表示语义。
为了便于引用,贯穿本申请,HTML用作示例性标记语言,CSS用作示例性样式表语言,以及用作示例性动态脚本语言。然而,应当注意的是,在本申请中对HTML、CSS和的使用仅是出于说明的目的,并且除非权利要求明确地记载,否则不应当被解释为将权利要求的范围限制为特定语言。
HTML是实现ISO/IEC 15445标准的标记语言。HTML的特点可以是使用一组标记标签(例如,注释)来描述网页,使得可以由诸如网络浏览器之类的软件应用显示它们。HTML允许通过表示针对文本(例如,标题、段落、列表、链接、引用和其它项)的结构语义来创建结构化文档。
是动态的、弱类型的、面向对象的脚本语言,其实现了ECMAScript语言标准(由ECMA国际在ECMA-262规范中标准化)和/或ISO/IEC 16262标准。能够实现对主机环境(例如,在移动设备处理器上执行的网络浏览器)内的计算对象的编程访问。
级联样式表(CSS)是用于描述网站的外观和格式的样式语言,并且旨在用于将文档的表示与其内容分开。每个样式表可以包括具有以下格式的有序的规则的集合:selector{property1:value;...propertyn:value;}(选择器{特性1:值;……特性n:值})。作为例子,以下的CSS代码告诉浏览器在红色背景上使用白色前景来渲染其直接祖先是<p>元素的所有<cite>元素:p>cite{color:white;background-color:red;}。对于网站来说,包括数万条这样的规则并不少见。
HTML可以嵌入和/或包括到代码的链接,所述代码能够影响所包含的HTML页面的行为和/或表示。所嵌入的/所链接的代码还可以生成额外的HTML代码,其可以被插入包含HTML页面(即,有嵌入的HTML代码)中。可以用于将函数嵌入到HTML代码中,使得函数与HTML页面的文档对象模型(DOM)交互并且操纵DOM。DOM是用于表示HTML中的对象且与HTML中的对象交互的独立于语言的约定,并且允许代码访问并操纵所包含的HTML页面。DOM树通常作为渲染网页的部分来生成,以标识部件、定义页面的各个部件的相关结构、关系和行为。
HTML可以包括(例如,嵌入和/或链接到)CSS代码。可以将被指定为单独文件的CSS代码存储于远程服务器上。常规的CSS处理引擎(例如,WebKit或Firefox)在主浏览器线程中顺序地解析CSS,而不支持高度的并行性或并发性。例如,当将CSS代码嵌入HTML文档中时,HTML解析器无法解析HTML文档的剩余部分,直到CSS引擎已解析HTML文档的头部中的样式元素为止。当HTML文档包括到多个CSS文件的链接时,常规的CSS处理引擎将顺序地解析所有链接的CSS文件。出于这些原因和其它原因,常规的CSS处理引擎可能造成严重的减速,尤其在大CSS文件的情况下(这是常见的)。
各个方面的方法和浏览器利用在现代移动设备中可用的并行性来改善网页加载、网络应用和网络通信的效率和速度。
各个方面可以包括如下所述的浏览器方法:通过使用推测/预测技术来预处理网络文档(HTML页面)以从不完整的信息集中识别有可能需要的资源,并且请求/预提取被确定为具有正确渲染网络文档所需要的高概率的资源,来加载/渲染网页。对这些资源的预提取可以使网络浏览器(并由此移动设备)能够更好地使用可用带宽、重叠传输时延并且改善文档加载时间。
近年来,移动电子设备(例如,蜂窝电话、平板设备、膝上型计算机等)已经变得功能更加丰富,并且现在通常包括多个处理器、片上系统(SoC)、多个存储器以及允许移动设备用户在他们的移动设备上执行复杂且耗电的软件应用(例如,网络浏览器、视频流应用等)的其它资源。由于这些改进和其它改进,智能电话和平板计算机已日益普及,并且作为很多用户选择的平台,正在取代膝上型计算机和台式机器。移动设备用户现在能够经由他们的移动设备的网络浏览器来访问互联网,从而轻松且方便地完成他们日常任务中的很多任务。
各个方面提供了浏览器方法和/或网络浏览器,所述浏览器方法和/或网络浏览器被配置为通过利用由快速处理器和多处理器移动设备架构能够实现的并发性/并行性以及对资源的推测性处理和预提取的使用,来实现快速响应时间、高性能和高用户接口响应性,从而隐藏网络时延并且改善总体用户体验。
网络浏览器是实现多种标准的复杂应用,需要支持传统行为,并且是高度动态且交互式的。通常,网络浏览器设计者的目标在于实现以下各项的最佳混合:页面加载的快速响应时间(即使在存在长网络时延的情况下)、高性能(例如,以能够实现网络应用的交互性)、以及高用户接口响应性(例如,以提供良好的用户体验)。
利用网络浏览器的并发性是相对新的方法。大多数的现有浏览器(例如,Firefox和基于WebKit的Chrome和Safari浏览器)从根本上来说是以使用事件驱动模型来辅助交互性的顺序引擎为架构。由于移动设备和/或浏览器子系统之间的大量依赖性(并且因为很多的现有数据结构不是线程安全的),所以这些现有解决方案不支持高度的并行性或并发性。
Chrome和WebKit2针对每个浏览器标签生成单独的进程,这在不同的网站之间提供了某种隔离,但是把使用多个核的责任委派给操作系统。另外,这些进程在存储器和和启动开销这两方面是重量级的。因此,这些解决方案不对单个页面加载加速或者不改善网络通信的效率,而是仅支持关于执行同一应用的多个实例的并行性。在单个标签性能通常是不足的并且用户没有一次打开很多标签的情况下,这样的标签级别的并行性不解决移动浏览器的需求。
OP和OP2浏览器可以针对每个网页(被称为“网络实例”)生成新的进程集合,并且浏览器部件(例如,联网)可以在不同的进程中运行。然而,像所有其它的现有浏览器解决方案一样,这些解决方案本质上仍然是顺序的。例如,当在作为解析操作的单独进程中执行网络操作时,网络进程仍然必须等待解析进程(反之亦然),这是因为每个操作依赖于其它操作。也就是说,当OP和OP2浏览器允许使用多个进程或线程时,这些解决方案不会实现在渲染网页时的高度并行性,这是因为它们不解决用于下载、处理和渲染网页的浏览器处理算法的串行/顺序本质。
各个方面包括高性能网络浏览器,其被配置为克服现有浏览器处理算法的串行/顺序本质,使用高速处理器和多处理器移动设备架构的多线程执行以及并行处理能力,并且广泛地利用并行性来改善浏览器性能、减小网络时延并且改善移动设备的用户的用户体验。
可以在包括片上系统(SOC)的多个单处理器和多处理器计算机系统上实现各个方面。图1示出了可以在实现各个方面的计算设备中使用的示例片上系统(SOC)100架构。SOC 100可以包括多个异构处理器,例如,数字信号处理器(DSP)102、调制解调处理器104、图形处理器106以及应用处理器108。SOC 100还可以包括一个或多个协处理器110(例如,向量协处理器),其中,一个或多个协处理器110连接到异构处理器102、104、106、108中的一个或多个。每个处理器102、104、106、108、110可以包括一个或多个核,并且每个处理器/核可以执行独立于其它处理器/核的操作。例如,SOC 100可以包括执行第一类型的操作系统(例如,FreeBSD、Linux、MacOS X等)的处理器以及执行第二类型的操作系统(例如,Microsoft Windows 8)的处理器。
SOC 100还可以包括用于管理传感器数据、模数转换、无线数据传输以及用于执行其它专用操作(例如,处理经编码的音频和视频信号,以用于在网络浏览器中进行渲染)的模拟电路和定制电路114。SOC 100还可以包括系统部件和资源116,例如,调压器、振荡器、锁相环路、外围桥接器、数据控制器、存储控制器、系统控制器、访问端口、定时器以及用于支持处理器和运行在计算设备上的软件客户端(例如,网络浏览器)的其它类似部件。
系统部件和资源116和/或定制电路114可以包括与外围设备(例如,照相机、电子显示器、无线通信设备、外部存储芯片等)通过接口连接的电路。处理器102、104、106、108可以经由互连/总线模块124,互连到一个或多个存储器元件112、系统部件和资源116以及定制电路114,其中,互连/总线模块124可以包括可重配置的逻辑门阵列,和/或可以实现总线架构(例如,CoreConnect、AMBA等)。可以通过诸如高性能片上网络(NoC)之类的改进的互连来提供通信。
SOC 100还可以包括用于与SOC之外的资源(例如,时钟118和调压器120)进行通信的输入/输出模块(未示出)。SOC之外的资源(例如,时钟118、调压器120)可以由内部SOC处理器/核(例如,DSP 102、调制解调处理器104、图形处理器106、应用处理器108等)中的两个或更多个来共享。
除了上面所描述的SOC 100之外,还可以在各种各样的计算系统中实现各个方面,其中,所述计算系统可以包括单处理器、多个处理器、多核处理器或其任意组合。
图2示出了可以用于实现各个方面的示例性多核处理器架构。多核处理器202可以包括紧密相邻的两个或更多个独立处理器核204、206、230、232(例如,在单衬底、管芯、集成芯片上等)。如果信号必须片外传输,则处理核204、206、230、232的接近度允许存储器以比可能的频率/时钟速率更高的频率/时钟速率进行操作。此外,处理核204、206、230、232的接近度允许片上存储器和资源(例如,电压轨)的共享以及允许核之间更协调的协作。
多核处理器202可以包括多级高速缓存,其包括1级(L1)高速缓存212、214、238、240以及2级(L2)高速缓存216、226、242。多核处理器202还可以包括总线/互连接口218、主存储器220以及输入/输出模块222。L2高速缓存216、226、242可以比L1高速缓存212、214、238、240大(和慢),但是比主存储器单元220小(并且快很多)。每个处理核204、206、230、232可以包括具有对L1高速缓存212、214、238、240私有访问的处理单元208、210、234、236。处理核204、206、230、232可以共享对L2高速缓存(例如,L2高速缓存242)的访问,或者可以具有对独立的L2高速缓存(例如,L2高速缓存216、226)的访问。
L1和L2高速缓存可以用于存储由处理单元频繁访问的数据,而主存储器220可以用于存储由处理核204、206、230、232访问的较大的文件和数据单元。多核处理器202可以被配置为使得处理核204、206、230、232按以下顺序从存储器中寻找数据:首先查询L1高速缓存,然后是L2高速缓存,如果高速缓存中没有存储该信息,则然后从主存储器中查找。如果高速缓存或主存储器220中没有存储该信息,则多核处理器202可以从外部存储器和/或硬盘存储器224中寻找该信息。
处理核204、206、230、232可以经由总线/互连接口218相互通信。每个处理核204、206、230、232可以对一些资源进行独占控制,而与其它核共享其它资源。
处理核204、206、230、232可以彼此完全相同,可以是异构的,和/或可以实现不同的专用功能。因此,无论从操作系统角度(例如,可以执行不同的操作系统)来说,还是从硬件角度(例如,可以实现不同的指令集/架构)来说,处理核204、206、230、232都不需要是对称的。
诸如上面参照图1和图2所描述的多处理器硬件设计可以包括在同一封装内(通常在同一块硅片上)的具有不同能力的多个处理核。对称的多处理硬件包括两个或更多个完全相同的处理器,其连接到由单个操作系统控制的单个共享主存储器。非对称的或“松散耦合”的多处理硬件可以包括两个或更多个异构处理器/核,其可以分别由独立的操作系统来控制,并且连接到一个或多个共享存储器/资源。
图3A示出了加载并渲染HTML文档的一方面的浏览器方法300。在框302中,网络浏览器部件可以接收用户输入,该用户输入请求对位于特定的统一资源定位符(URL)处的HTML文档的加载。在框304中,网络浏览器部件可以经由通过互联网传送的公知的超文本传输协议(HTTP)消息,从位于该URL处的网络服务器请求HTML文档。在框306中,网络浏览器部件可以从位于该URL处的网络服务器接收HTML文档。在框308中,网络浏览器部件可以解析所接收的HTML文档,以识别/发现在HTML文件中引用的外部资源(图像、音频、CSS等)。
在框310中,网络浏览器部件可以从维护资源的网络服务器请求所识别的外部资源,网络服务器可以包括提供HTML文档的服务器或者经由互联网可访问的任何其它服务器。在框312中,网络浏览器部件可以从网络服务器接收所请求的外部资源。在确定框314中,网络浏览器部件可以确定所接收的资源中的任一种是否引用其它外部资源。
当网络浏览器部件确定所接收的资源引用其它外部资源(即,确定框314=“是”)时,网络浏览器可以请求/接收由框310-314中新接收的资源所引用的那些其它/额外的外部资源。可以重复地执行这些操作,直到已下载所有所引用的外部资源为止。
当网络浏览器确定所接收的资源没有引用任何额外的外部资源(即,确定框314=“否”)时,在框316中,网络浏览器可以分析所接收的外部资源,以确定正确地渲染网页所需要的资源。在框318中,网络浏览器可以使用所需要的下载的资源来渲染网页。
图3B示出一方面的浏览器系统350中的示例性逻辑部件、信息流、操作和转换。浏览器系统350可以是软件应用/模块,其被配置为使处理器执行用于从互联网提取信息和/或资源并且在计算设备(例如,移动设备)的电子显示器上渲染网页的各种操作。
浏览器系统350可以包括脚本部件362,其被配置为在各个阶段和/或在各个操作期间(例如,在页面加载操作期间和之后等)与网页进行交互,以提供与外部模块380之间的交互性。外部模块380可以包括用户I/O模块(例如,鼠标、键盘等)、和/或应用模块(例如,插件、GPS等)。在一方面,脚本362部件可以包括被配置为编译和/或执行代码的引擎。
在框354中,浏览器系统350可以执行提取操作,以从网络352中的服务器请求/接收编程指令356(例如,经由HTTP)。在框358中,浏览器系统350可以转化/解码所接收的编程指令356,以生成HTML代码360。所生成的HTML 360代码可以包括(即,嵌入或包括对代码的引用)代码,其中,代码的执行可以生成用于插入所包含的HTML页面(例如,其中包括的HTML代码)中的额外的HTML代码。这种生成的HTML代码可以影响HTML页面的行为和/或表示。所生成的HTML 360代码还可以包括样式表和/或CSS代码。
在框364中,浏览器系统350可以解析HTML 360代码(以及嵌入的/引用的代码),以生成HTML文档的文档对象模型(DOM)366。DOM 366可以表示HTML代码中的各个对象的内容、关系、样式和位置。浏览器“传递”(pass)与部件之间的通信可以经由DOM 366发生。“浏览器传递”可以是与贯穿HTML文档的相关部分的单个迭代相关联的线程、进程、或应用。在一实施例中,浏览器传递可以是“工作项”。
如上所述,代码可以被嵌入在HTML代码中,并且同时,生成要插入所包含的HTML页面中的额外的HTML代码。为了能够实现对代码的插入(并且为了确保正确的顺序),可以要求两个不同的进程来解释、解析并且执行代码和所包含的HTML代码。因此,在一方面,框364的解析操作可以由多个进程或应用来执行。
在框368中,浏览器系统350可以通过例如对HTML文档和/或对所生成的DOM 366树应用一个或多个样式表(例如,CSS),来执行样式操作,以生成修改的DOM树370。
在框372中,浏览器系统350可以通过执行布局操作,来“解决”页面布局374。在一方面,可以执行布局操作,使得随着显示页面所必需的额外的内容变得可用(例如,被下载、被处理和/或被添加到DOM)而逐步解决页面布局。
在框376中,浏览器系统350可以执行渲染操作,以在计算设备的电子显示器上显示HTML文档的内容378。
各个方面修改了现有浏览器处理算法的潜在的串行本质。各个方面可以包括动态且并发的浏览器系统,其中,该浏览器系统支持高度的并行性和/或并发性。各个方面可以在多个层面上利用并发性。各个方面可以针对各个浏览器传递执行并行算法,以加快各个浏览器部件和/或浏览器操作的处理和/或执行时间。各个方面可以重叠浏览器传递以加快总执行时间。
图4和图5根据各个方面示出了适合在多个层面上利用并发性的一方面的浏览器系统500中的示例部件、信息流和子系统。
图4示出了浏览器系统500,其中,浏览器系统500包括提取管理器部件502、DOM调度器部件504、HTML解析器部件506、HTML预扫描器部件508、图像解码部件510、CSS引擎部件512、引擎部件514、布局和渲染引擎部件516以及用户接口部件518。在一方面,浏览器系统500还可以包括沙盒引擎部件530。这些部件502-530中的每一个可以是软件模块(例如,在处理器上运行的进程、执行的线程、线程池、程序等)。在各个方面,部件502-530中的任一个或全部可以使用线程库(例如,Pthreads等)或者并行任务库(例如,英特尔线程构建模块(Intel ThreadBuilding Block)、Cilk等),来支持并发性。在一方面,浏览器系统500部件502-518、530可以被松散耦合,并且被配置来支持并发性。
提取管理器部件502可以被配置为从网络提取资源,针对所提取的资源执行缓存管理,并且将来自网络的数据的到达通知提供给其它浏览器部件。在一方面,提取管理器部件502可以被配置为按资源在HTML文档中出现(即,没有施加任何优先级)的顺序来提取它们。在另一方面,提取管理器部件502可以被配置为基于预分配的优先级来分配优先级和/或提取资源。
DOM调度器部件504可以被配置为调度DOM更新,将对DOM树的访问串行化,并且管理各个浏览器部件之间的交互。其它子系统(即,浏览器基础结构的其余部分)可以将工作项(也被称为“DOM调度器工作项”)分派到并发的DOM调度器队列中。DOM调度器部件504可以被配置为从DOM调度器队列中取出工作项,并且一次处理一个工作项。在各个方面,工作项可以包括浏览器传递和/或事件(例如,定时器事件、来自用户接口的事件等)。
HTML解析器部件506可以被配置为接收到来的(例如,部分的等)HTML文档的数据块(例如,经由DOM调度器工作项等),并且通过执行HTML解析算法(例如,HTML5解析算法等)来构建DOM树。HTML解析器部件506可以将在HTML文档中引用的外部资源添加到提取管理器部件502可访问的提取管理器队列。HTML解析器部件506还可以在解析操作期间的适当时间,通过调用引擎部件514来发起对代码的执行。
HTML预扫描器部件508可以被配置为对HTML文档进行扫描,以快速地确定HTML文档所请求的/所需要的外部资源。HTML预扫描器部件508可以向提取管理器部件502委派任务(例如,经由通知、存储器写操作等),以开始下载外部资源和/或基于外部资源来执行进一步处理。
图像解码器部件510可以被配置为对图像进行解码。例如,当提取管理器部件502已接收到图像的完整数据时,其可以将图像移交给图像解码器部件510,然后图像解码器部件510可以对图像进行解码以供稍后使用。
CSS引擎部件512可以被配置为计算DOM元素的外观和感觉,以供在稍后的阶段(例如,布局和渲染阶段)中使用。类似于上面所论述的图像解码操作,提取管理器部件502可以将CSS样式表移交给用于解析并且用于发现要请求的新资源的CSS引擎。
在一方面,CSS引擎部件512可以包括CSS资源预提取器部件520、CSS解析器部件522和DOM样式器部件524。CSS资源预提取器部件520可以执行CSS扫描和/或预提取操作,其可以包括对CSS文档进行扫描以快速地确定什么外部资源是CSS文档所请求的/所需要的。在一方面,CSS资源预提取器部件520可以向提取管理器部件502委派任务,以开始下载外部资源和/或基于外部资源来执行进一步处理。
CSS解析器部件522可以被配置为读取CSS代码,并且在存储器中创建数据结构(例如,CSS规则)的集合。DOM样式器部件524可以被配置为使用由CSS解析器部件522创建的数据结构来确定DOM树中的节点的样式。针对每个节点,CSS引擎部件512可以执行规则匹配操作,以找到其选择器与节点相匹配的规则。这样的规则匹配操作可以针对每个节点返回很多(并且有时候冲突的)规则。在各个方面,CSS引擎512可以被配置为使用级联操作来向规则分配权重,并且选择具有最大权重的规则。
引擎部件514可以被配置为编译并执行代码。提取管理器502可以下载脚本,并将它们发送给引擎部件514,以使它们被编译。HTML解析器506和/或DOM调度器504可以请求引擎部件514执行脚本。
引擎部件514可以包括用于编译任务/操作的线程池,并且可以被配置为并行地编译多个脚本(代码)。在一方面,由于语义,可以在主引擎线程中顺序地执行脚本的执行。在一方面,引擎部件514可以被配置为使得当HTML解析器506或DOM调度器504(例如,针对用户接口事件)请求引擎部件514执行尚未编译的脚本时,引擎部件514在尝试执行所请求的脚本之前,自动地发起对脚本的编译,并且等待编译的结果。
在各个方面,引擎部件514可以包括轻量编译器(lightcompiler)526和完整编译器528(例如,以支持代码的自适应编译和执行)。轻量编译器526可以被配置为针对不频繁重复使用的代码来生成可执行代码,和/或生成针对页面加载而优化的可执行代码。完整编译器528可以被配置为针对大量重复使用的代码生成较高质量的代码,和/或生成针对交互性和网络应用而优化的较高质量的代码。在各个方面,可以在重复使用的代码的多次运行之间分摊完整编译器528的较慢的代码生成。与轻量编译器526相比,完整编译器528可以实现针对迭代式网络应用的显著的加速。例如,使用完整编译器528,N体模拟网络应用可以加快六倍来运行。
沙盒引擎部件530可以是与主引擎部件514分开的单独的引擎。沙盒引擎部件530可以包括引擎部件514的所有部件、特征和功能性。
布局和渲染引擎部件516可以被配置为将样式化的DOM树转变为可视的网页。在一方面,布局和渲染引擎部件516可以被配置为将对DOM和/或CSS样式表的改变反映在移动设备的电子显示器上,使得用户能够观看更新的HTML文档并且与更新的HTML文档进行交互。对DOM和/或CSS的改变可以是由于提取管理器部件502传递新资源、HTML解析器部件506更新DOM、引擎部件514计算的结果等而导致的。
在一方面,布局和渲染引擎516可以被配置为获取DOM信息的快照,并且异步地执行布局和/或渲染操作。在另一方面,布局和渲染引擎516可以被配置为同步地调用布局和/或渲染操作(例如,当使用查询布局信息的API时)。
用户接口部件518可以被配置为管理浏览器系统500与移动设备用户之间的交互。用户接口部件518可以将用户交互(例如,触摸移动设备的电子显示器上的链接)转化为创建用于放置在DOM调度器队列中的工作项的函数/方法调用(例如,Java本地接口或者“JNI”方法调用)。
在一方面,可以针对每个网页,来对所有上述的部件502-518、530进行一次实例化。在另一方面,提取管理器部件502以及布局和渲染引擎部件516可以是全局的,而针对每个网页或者HTML文档,可以对其它部件(例如,504、506、508、510、512、514和518)进行一次实例化。
图6示出了上面论述的该方面的浏览器系统500中的示例性子系统和信息流。具体地,图6示出了浏览器系统500,所述浏览器系统500可以包括用户接口子系统552、资源管理器子系统554、每个页面DOM引擎子系统556、每个页面引擎子系统558以及渲染引擎子系统560。
子系统555-560中的每一个可以被松散耦合,并且被配置为支持并发性。可以将子系统552-560实现成软件模块(例如,在处理器上运行的进程、执行的线程、程序等)。子系统552-560的操作可以由上面参照图4所论述的和/或在任何单处理器或多处理器计算系统上的部件中的一个或多个部件上来执行。
在一方面,可以对资源管理器子系统554以及渲染引擎子系统560进行一次实例化(例如,可以是全局的),并且可以针对每个网页或HTML文档,来对每个页面DOM引擎子系统556以及每个页面引擎子系统558进行一次实例化。
用户接口子系统552可以被配置为执行用于管理与浏览器系统550的用户交互的各个操作,其包括将用户交互(例如,触摸移动设备的电子显示器上的链接)转化为创建用于放置在DOM调度器队列中的工作项的函数/方法调用,检测事件和/或将事件发送给每个页面引擎子系统558的正确的实例,和/或将统一资源定位符(URL)/统一资源标识符(URI)信息发送给资源管理器子系统554(例如,经由存储器写操作、函数调用等)。
资源管理器子系统554可以被配置为执行预提取操作562、HTML预扫描操作563、图像解码操作564、CSS扫描/预提取操作566以及JavaScript扫描/预提取操作567。通过举例的方式,这些操作可以由提取管理器502、HTML预扫描器508、图像解码器510、CSS引擎512和/或JavaScript引擎514、530部件来执行,或者由上面参照图4所论述的部件的任意组合来执行。
预提取操作562可以包括从与URL/URI相对应的网络服务器请求/接收资源和/或编程指令、转化或解码所接收的编程指令以生成HTML、以及将所生成的HTML代码发送给每个页面引擎子系统558的正确的实例(例如,经由存储器写操作等)。
所生成的HTML代码可以嵌入和/或引用代码、CSS代码、图像和各种其它资源。HTML文档中最常引用的资源是图像、CSS样式表和源。样式表和源还可以进一步引用外部资源。在一方面,可以对所生成的HTML代码进行扫描,使得可以提前提取(例如,作为预提取操作562的部分)由HTML文档(包括所嵌入的或所引用的样式表和源)所标识的所有引用。
HTML预扫描器操作563可以包括对所生成的HTML代码进行扫描以快速地发现请求的/需要的外部资源、以及向提取管理器和/或预提取器通知其可以开始下载外部资源和/或基于所发现的外部资源来执行进一步处理。在一方面,对外部资源的下载可以作为上面所论述的预提取562操作的部分来执行。在一方面,可以并发地执行(例如,在单独的线程/进程中)HTML预扫描器操作508以及预提取操作562。
图像解码操作564可以包括对图像进行解码以供渲染引擎子系统560稍后使用。响应于确定针对图像的完整数据集已被下载(例如,经由作为预提取562操作的部分来执行的存储器写操作等),和/或响应于接收到通知(例如,从提取管理器520部件),可以来执行图像解码操作564。在一方面,可以将图像解码操作564与HTML预扫描器操作563以及预提取操作562并发地执行。
CSS扫描/预提取操作566可以包括对嵌入在所生成的HTML代码中的(或由所生成的HTML代码引用的)CSS样式表进行扫描,以快速地发现由CSS样式表请求的请求/需要的外部资源。在一方面,CSS扫描/预提取操作566可以包括向提取管理器和/或预提取器通知其可以开始下载所发现的外部资源。在一方面,CSS扫描/预提取操作566可以包括发起对所发现的外部资源的下载。在一方面,响应于提取管理器部件502将一个或多个CSS样式表发送给CSS引擎部件512,可以在CSS引擎部件512中(例如,由CSS资源预提取器520)执行CSS扫描/预提取操作566。在一方面,可以将CSS扫描/预提取操作566与图像解码操作564、HTML预扫描器操作563和预提取操作562并发地执行。
每个页面DOM引擎子系统556可以被配置为执行HTML解析操作568、CSS解析操作570、定时器操作572、样式化操作574以及管理事件的操作576。在一方面,可以将每个页面DOM引擎子系统556的操作与其它子系统552、554、558、560的操作并发地执行。
HTML解析操作568可以包括解析所接收的HTML代码、将HTML标记标签与实质性内容分开、和/或生成所接收的HTML代码的DOM。HTML解析操作568还可以包括识别HTML文档中引用的外部资源,使得所识别的外部资源可以由提取管理器502来下载和/或作为预提取操作562的部分来下载。HTML解析操作568还可以包括在对HTML代码的解析期间(例如,在发现时等),发起对代码的执行(例如,通过调用执行操作578)。
CSS解析操作570和样式化操作574可以包括对所生成的DOM树应用一个或多个CSS样式表(或者,基于CSS样式表来生成修改的DOM树)。在各个方面,可以并发地执行HTML解析操作568、CSS解析操作570和样式化操作574中的任一个或全部。
定时器操作572可以包括管理与定时器和/或定时器类(例如,系统定时器)相关的事件和/或条件、或者对定时器和/或定时器类相关的事件和/或条件进行响应。
事件操作576可以包括管理各个事件,例如定时器事件和用户接口事件(例如,响应于用户触摸移动设备的电子显示器上的链接而生成的事件)。
每个页面引擎子系统558可以被配置为执行执行操作578和编译操作580。
在各个方面,每个页面DOM引擎子系统556和/或资源管理器子系统554可以被配置为将嵌入在HTML代码中的(或者由HTML代码引用的)代码发送给每个页面引擎558的正确实例,以用于编译和/或执行(即,经由执行578和编译580操作)。在一方面,引擎558可以基于编译和/或执行操作578、580的结果来更新/修改所生成的DOM树。
渲染引擎子系统560可以被配置为执行布局操作582和渲染操作584。例如,渲染引擎子系统560可以从每个页面DOM引擎子系统556接收(例如,经由存储器写、调用、通知等)DOM树和/或布局树,解决页面布局(经由布局操作582),并且在计算设备的电子显示器上显示内容(经由渲染操作584)。在一方面,执行布局操作582可以包括随着额外的内容变得对渲染引擎子系统560可用(例如,被下载、被处理和/或被添加到DOM树)而逐步地解决页面布局。在各个方面,可以并发地执行布局操作582和/或渲染操作584中的任一个或全部。
如上面参照图5A和图5B所论述的,HTML解析器506和/或CSS解析器522可以发现渲染HTML文档所请求的/所需要的外部资源(图像、音频、CSS、等),并且请求下载所发现的资源(例如,经由提取管理器502和/或作为预提取操作的部分)。
移动设备可能在下载在HTML和CSS代码/内容中发现的资源时经历高延迟时间。例如,由于HTML5规范中的特性,在HTML解析器能够继续解析HTML文档的剩余部分之前,其必须等待脚本元素(例如,<script>块)以完成执行。因此,如果网页在脚本元素之后引用了外部资源,则提取该资源的操作无法与等待脚本元素以完成执行的操作重叠。这通常增加了下载并显示网页所需要的时间。
在各个方面,浏览器系统500可以被配置为在不等待脚本元素以完成执行的情况下,在脚本元素之前推测性地进行解析以发现新资源。在这些方面,可以强制浏览器系统500丢弃推测性解析的结果中的一些(例如,当经由document.write API等将新内容插入DOM树时)。
在一方面,浏览器系统500可以被配置为执行主动的资源预提取操作以尽可能早地发现所请求的/所需要的资源,并且请求并行地提取/下载多个资源。以这种方式,各个方面可以防止浏览器系统500被强制丢弃推测性解析的结果中的一些,并且可以掩盖网络时延,使用更多的可用带宽,并且减少等待资源到达所耗费的总时间。
浏览器系统500可以被配置为执行主动的资源预提取操作,其可以包括经由沙盒执行的推测性的资源预提取。在各个方面,这些主动的资源预提取操作可以作为HTML预扫描操作563、CSS预提取操作566或这二者的部分来执行。
参考图4-图5,为了促进主动的资源预提取操作而执行的HTML预扫描操作563可以包括获得HTML文档中的所有“id”、“类”和/或“样式”属性,快速地发现在HTML文档中引用的外部资源,以及触发对来自网络的所发现的资源的下载。HTML预扫描器508可以“大致地解析”HTML,以便发现资源,而无需执行HTML解析器506所要求的实质性处理或计算密集型处理(例如,构建DOM树)中的任一种。通过前述的这些复杂的解析操作,可以将HTML预扫描操作563与HTML解析操作568并发地执行(以及在HTML解析操作568之前运行),而不必等待脚本元素以完成执行。
在一方面,在网络分组到达时,可以单独地将它们发送给HTML预扫描器508和HTML解析器506。在一方面,通过将HTML预扫描操作563与(非推测性的)HTML解析570操作并行地执行,可以进一步减少等待资源到达所耗费的时间。
如上所论述的,网络浏览器系统500可以包括被配置为快速地对CSS文档进行扫描的CSS解析器522以及被配置为执行CSS预提取操作的CSS资源预提取器520。在一方面,还可以将CSS样式表分派给负责并发地解析CSS的线程池。如果CSS规则包含另外的外部资源,则CSS资源解析器520可以基于另外的外部资源实际上在HTML文档中被引用的可能性,来作出关于是否发起对另外的外部资源的预提取的决策。在一方面,CSS资源预提取器520可以被配置为下载(或发起下载)特定范围/数量的引用的资源(下载太少的资源可能意味着DOM样式器524在稍后对DOM树进行样式化时将发现更多的新资源,这可能导致额外的时延)。
通过例如使用全站公共样式文件来引用比任何的给定文档所实际需要的资源更多的资源,是网站中的常规做法。下载所有被包括的资源可能消耗过多的带宽,并且减慢页面加载。在各个方面,CSS解析器522可以被配置为使用由HTML预扫描器508发现的“id”和“类”属性,来确定是否有可能与CSS规则相匹配。如果HTML预扫描器508已查看/评估CSS规则选择器中所引用的所有属性值,则可以确定规则有可能与至少一个DOM树元素相匹配,那么浏览器系统500可以发起对与CSS规则相对应的资源的下载。该“CSS规则”启发法是非常有效的,并且错误的决策不会对浏览器系统500的操作有显著的负面影响。可以在DOM样式化阶段期间(经由DOM样式器部件524)发现遗漏的资源,而代价是下载资源所需要的时延。
在一方面,HTML预扫描器508可以被配置为在不必执行的情况下,识别和/或发现可以发现的资源。
如上所论述的,由于HTML5规范中的特性(例如,在HTML解析器能够继续解析之前,要求其等待脚本元素(例如,<script>块)以完成执行),移动设备可能在下载在HTML和CSS代码/内容中发现的资源时经历高延迟时间。另外,现代网络文档(例如,HTML页面、HTML文档等)可以引用大量的外部资源,并且每个外部资源可以包括对其它外部资源的引用。例如,HTML文档通常包括对各种外部资源(例如,图像、音频、级联样式表(CSS)和)的引用,并且所引用的资源(例如,CSS、)还可以包括对额外的外部资源(例如,图像、音频等)的引用。
文档加载时间(即,从请求文档直到其准备好被显示在屏幕上的时间)受控于输入/输出成本(例如,对需要的资源的网络传送)。加载所有需要的资源所需要的最小的文档加载时间受到资源存储设备与计算设备之间的连接的带宽的约束。另外,将文档资源传送到显示设备导致时延成本。各个方面可以被配置为尽可能早地启动资源传送,以更好地利用可用带宽,重叠传送时延,并且改善文档加载时间。
如上所述,因为并非所有的所引用的外部资源都是渲染给定的网页所需要的(或者甚至所使用的),因此递归地下载所有所引用的资源可能浪费大量的带宽和功率。另外,当资源中的任一种不是立即可用的时,在能够正确地渲染页面之前,浏览器必须等到其接收到并分析那些资源为止。这增加了加载和/或渲染网页所需要的时间量(例如,文档加载时间),并且降低了用户体验。
常规的解决方案尝试使用诸如以下的技术来加速对网页的渲染:在存储器中缓存网页的部分,以减少下次访问页面时必须下载的信息。然而,使用常规的解决方案,网络浏览器在没有首先分析整个文档(即,网页)、请求并接收到在文档和子文档中引用的资源的大部分(如果不是所有的话)并且分析所接收的资源的情况下,无法识别首次渲染网页所需要的外部资源。因此,使用常规的解决方案,直到在整个文档被完全分析之后,才能确定文档所需要的精确的资源集。
为了克服现有解决方案的这些限制,各个方面可以使用推测/预测技术,来在整个文档被分析之前识别渲染网页或文档所需要的资源。
通常,推测性地预测是否需要资源(基于不完整的信息集)导致四个可能的结果之一:正确肯定(true positive);正确否定(true negative);错误肯定(false positive);以及错误否定(false negative)。正确肯定结果是资源被推测性地下载并且稍后实际上是需要的。正确否定结果是资源未被推测性地下载并且是不需要的。错误肯定结果是不需要的资源被推测性地下载(这浪费了带宽和能量),以及错误否定结果是需要的资源未被推测性地下载(因此根据推测性预处理,没有关于该资源的收获)。
正确肯定和正确否定结果是有益且期望的,这是因为这样的决策通过减少页面加载时间而改善了用户体验。然而,错误肯定和错误否定结果是不利的。例如,错误否定可能导致在文档(例如,HTML文档)的渲染期间请求资源,这可能延长文档加载时间,直到该资源是可用的。因为所述资源不是浏览器正确地渲染文档所需要的,所以这是对计算和网络资源(例如,带宽、处理等)的浪费。
各个方面包括网络浏览器系统,所述网络浏览器系统被配置为基于启发法来执行推测性资源下载操作,以使正确肯定和正确否定的数量最大化,同时使错误肯定和错误否定下载决策的数量最小化。
图6示出了一方面的浏览器方法600,其中,浏览器方法600处理HTML文档以发现正确渲染网页所需要的外部资源(例如,图像、音频、CSS、等)并且在页面加载/渲染操作之前预提取所发现的资源。方法600的操作可以由执行适当配置的网络浏览器的单处理器或多处理器计算系统的处理器来执行。
参考图6,在框602中,网络浏览器可以发起或调用扫描操作(例如,经由HTML预扫描器508、CSS引擎512等),以针对结构信息和/或为了发现资源而对HTML文档和/或CSS文档进行扫描。在一方面,扫描操作可以作为HTML预扫描操作563的部分来执行。在一方面,扫描操作可以作为CSS扫描操作566的部分来执行。在各个方面,扫描操作可以与HTML和CSS解析操作568、570并发地且独立地执行。在各个方面,扫描操作可以由进程、线程、应用、工作项和/或浏览器传递来执行。
在框604中,扫描操作(例如,HTML和/或CSS扫描操作563、566)可以确定(即,预测、推测)有可能需要所发现的资源中的哪些资源。在框606中,扫描操作可以向浏览器提取部件(例如,向提取管理器502)发出资源请求(例如,经由存储器写操作等),以开始下载被确定为具有较高概率被需要的资源。在一方面,作为框606的部分,可以并行地或并发地发出(或发送)两个或更多资源请求。在一方面,每个资源请求可以产生新进程,和/或可以由不同的执行的线程来处理。在框608中,扫描操作可以继续扫描HTML文档和/或CSS文档,以发现额外的需要的资源。可以重复框604-608中的操作,直到发现所有外部资源和/或扫描了整个HTML文档为止。
在框610中,网络浏览器可以发起或调用提取操作(例如,经由提取管理器502),以下载由资源请求(例如,在框606中,由扫描操作发出的资源请求)标识的一个或多个资源。
在框612中,网络浏览器可以对所下载的资源进行扫描,以发现对外部资源的额外的引用。作为框612的部分,网络浏览器可以发起或调用新进程或执行的线程以执行扫描操作。在一方面,作为框612的部分,网络浏览器可以发起或调用CSS扫描操作566。在一方面,作为框612的部分,网络浏览器可以发起或调用HTML扫描操作563。
在框614中,网络浏览器可以基于对所下载的资源进行的扫描,来确定(即,预测、推测)有可能需要的所发现的资源。在框616中,网络浏览器可以向浏览器提取部件(例如,向提取管理器502)发出额外的资源请求(例如,经由存储器写操作等),以下载被确定为具有较高概率被需要的资源。在一方面,这些额外的资源请求中的每一个可以产生其它进程,和/或可以由不同的进程或执行的线程来处理。可以重复框610-616中的操作,直到发现和/或下载所有外部资源为止。在一方面,可以将框602-608的操作与框610-616中的操作并行地执行。
与常规的HTML解析器不同的是,上面参照图6所论述的扫描操作不对所扫描的HTML文档执行纠错,或者执行遇到的代码。这使得扫描操作能够被快速地执行。另外,与常规的HTML解析器不同的是,可以并行地或并发地执行上面所论述的扫描操作(例如,在独立的线程或进程中等),这使得各个方面能够更充分地使用在现代计算设备中流行的多处理器架构。另外,上面所论述的扫描进程可以对HTML文档(例如,CSS文档)中引用的资源进行扫描,这在常规的HTML解析器中也是不被执行的。
通常,如果扫描操作(例如,HTML预扫描操作563、CSS扫描操作566等)仅对HTML文档的结构进行扫描,则有可能正确地对所需要的资源进行有关推测(即,仅产生正确肯定),除非例如在文档中存在结构错误(这是因为扫描器不执行纠错)或者在文档中存在嵌入的代码(这是因为扫描器不执行),其中,该代码随着其被解析而对文档做出改变。
在一方面,为了使正确肯定和正确否定的数量最大化,扫描操作(例如,HTML预扫描操作563、CSS扫描操作566等)可以使用在对HTML文档的初始扫描期间获得的信息来识别有可能需要的资源。
图7A示出了一方面的浏览器方法700,浏览器方法700使用推测技术和启发法来发现文档资源以用于推测性下载。文档资源可以包括图像、CSS文件、脚本等。浏览器方法700使得HTML文档扫描器和多个CSS文档扫描器能够并行地执行,智能地识别有可能需要的资源,减少由推测性资源请求和/或预提取操作导致的错误否定的数量。在一方面,浏览器方法700可以使用启发法(例如,“CSS规则”启发法)来使错误肯定的数量最小化。
在浏览器方法700的框702中,HTML文档扫描器(例如,HTML预扫描器508)可以开始扫描HTML文档,以发现资源,并且获得所有URL/URI以及与包括在HTML文档中的HTML元素相关联的(或所提及的)HTML“id”、“类”和/或“样式”属性。HTML文档扫描器可以是与HTML解析器独立的,和/或与HTML解析器并行地执行。
在框704中,HTML文档扫描器可以遇到由URL/URI和/或包括在HTML文档中的HTML元素引用的外部资源。在框706中,HTML文档扫描器可以发出请求(例如,向提取管理器)以下载在HTML文档中引用的所遇到的资源。在一方面,HTML文档扫描器可以被配置为调用对每个遇到的外部CSS资源的下载和/或解析(例如,在扫描器遇到外部资源时等)。在一方面,对外部CSS资源的下载可以使CSS文档扫描器(例如,CSS引擎512等)开始扫描CSS文档。
在框708中,HTML文档扫描器可以遇到和/或收集HTML id、类和样式属性。在框710中,HTML文档扫描器可以将所遇到的/所收集的信息(即,与所收集的id、类和样式属性相关的信息)发送给CSS文档扫描器。在一方面,发送所收集的信息可以包括将每个遇到的和/或识别的HTML id、类和样式属性发送给CSS文档扫描器。
在框712中,HTML文档扫描器可以继续扫描HTML文档以发现额外的资源。在确定框714中,HTML文档扫描器可以确定其是否已完成对HTML文档的扫描。当HTML文档扫描器确定其已完成对HTML文档的扫描(即,确定框714=“是”)时,在框716中,HTML文档扫描器可以向CSS文档扫描器(例如,CSS引擎512、执行CSS扫描操作566的进程等)通知其已完成对HTML文档的扫描(例如,经由存储器写操作、方法调用、通知等)。当HTML文档扫描器确定其尚未完成对HTML文档的扫描(即,确定框714=“否”)时,在框702中,HTML文档扫描器可以继续扫描HTML文档,以发现额外的资源。
在浏览器方法700的框719中,CSS文档扫描器可以开始针对外部资源来扫描CSS文档。框719中的CSS文档扫描器的发起可以是由提取管理器获得的CSS文档的可用性所触发的(例如,响应于作为框706的部分所执行的操作等)。在一方面,可以将对CSS文档的扫描与对HTML文档的扫描(例如,框702-716中的操作)并行地执行。因此,CSS文档扫描器可以对接收的CSS文档进行扫描,以识别在那些文档中所引用的外部资源,同时HTML文档扫描器继续扫描HTML文档(例如,识别额外的CSS文档,以用于下载等)。此外,可以存在并行执行的多个CSS文档扫描器(例如,当下载了多个CSS文档时)。
在框720中,CSS文档扫描器可以从HTML文档扫描器接收与HTMLid、类和/或样式属性相关的信息。在框721中,CSS文档扫描器可以确定所接收的信息是否标记或标识HTML文档有可能需要的和/或使用的CSS规则和/或外部资源(与所接收的HTML id、类和/或样式属性相关联的)。在一方面,作为框721的部分,CSS文档扫描器可以确定HTML文档扫描器是否已遇到与CSS规则相关联的每个HTML id、类和/或样式属性。
在确定框722中,CSS文档扫描器可以确定HTML文档是否有可能需要和/或使用CSS规则和/或外部资源(与所接收的HTML id、类和/或样式属性相关联的)。在一方面,作为确定框722的部分,CSS文档扫描器可以确定是否已遇到每个URL/URI以及HTML文档所提及的HTML id、类和/或样式属性。
当CSS文档扫描器确定HTML文档有可能需要和/或使用CSS规则和/或外部资源(即,确定框722=“是”)时,在框724中,CSS文档扫描器可以立即请求下载由该CSS规则引用的资源(例如,通过执行存储器写操作和/或通知提取管理器502)。
在一方面,当确定已遇到每个URL/URI、以及由HTML文档所提及的HTML id、类和/或样式属性时,CSS文档扫描器可以确定有可能需要CSS规则和/或外部资源。
当CSS文档扫描器确定HTML文档不太可能需要和/或使用CSS规则和/或外部资源(即,确定框722=“否”)时,在框723中,CSS文档扫描器可以将与资源引用列表中的与CSS规则(例如,所接收的HTML id、类和/或样式属性)相关的信息存储在存储器中。在框725中,如果必要的话(例如,当存在要扫描/处理的额外的元素等时),CSS文档扫描器可以继续扫描CSS文档。
在框726中,CSS文档扫描器可以从HTML文档扫描器接收指示HTML文档扫描器已完成对HTML文档的扫描的通知。在框727中,CSS文档扫描器可以从存储在存储器中的资源引用列表中提取与CSS规则相关的信息,并且评估所提取的信息。
在确定框728中,CSS文档扫描器可以确定所提取的信息是否标记/标识HTML文档需要的(或者有可能需要的)CSS规则和/或外部资源。在一方面,作为确定框728的部分,CSS文档扫描器可以确定HTML文档扫描器是否已遇到和/或已处理与所提取的CSS规则相关联的每个HTML id、类和/或样式属性。
当CSS文档扫描器确定提取的信息标记/标识HTML文档有可能需要和/或使用的CSS规则和/或外部资源(即,确定框728=“是”)时,在框729中,CSS文档扫描器可以请求对与该CSS规则相对应的资源的下载。以这种方式,可以使得由同时对HTML文档和CSS文档进行扫描所造成的错误否定的数量最小化。另外,各个方面可以在因对处理器和网络接口/无线(设备)使用减少而导致的数据传送成本极少增加或者不增加,以及较少的功耗的情况下,减少文档加载时间(并因此增加响应性)。
返回图7A,当CSS文档扫描器确定所提取的信息没有标记或标识HTML文档需要的(或者有可能需要的)外部资源(即,确定框728=“否”)时,在框721中,CSS文档扫描器可以从存储器提取下一条规则。可以重复框720-722的操作,直到已评估由HTML文档扫描器在存储器中存储的所有CSS规则。
在各个方面,HTML文档扫描器和/或CSS文档扫描器可以使用比上述的CSS规则更精确的启发法,来改善性能。例如,在一方面,HTML文档扫描器可以被配置为针对URL和/或可能修改HTML文档的命令来对嵌入的代码进行扫描。类似地,在一方面,CSS文档扫描器可以被配置为记录关于与每个遇到的ID相关联的HTML标签的分层信息,这可以允许CSS文档扫描器识别并拒绝更多潜在的错误肯定。
在常规的浏览器中,HTML解析器通常负责识别所有的外部资源,并且经由网络向服务器请求它们。如上所论述的,当在HTML文档中明确地指定这些资源时,各个方面可以预提取这些资源,并且在页面加载中比常规的浏览器早得多地发出请求。另外,各个方面可以并行地预提取和/或处理资源。
软件开发者越来越多地使用脚本(例如,)来动态地确定特定的应用-设备组合(例如,网络浏览器-移动设备组合)将需要的资源。例如,脚本可以评估与客户端(例如,浏览器)和计算设备相关的各个因素,以识别要下载的资源。这样的脚本本质上可以基于所评估的因素来动态地为资源(例如,图像、CSS、其它等)构建URL。因此,HTML文档可能需要在HTML文档中没有明确标识的、且仅可以通过执行包括在HTML文档中的代码来确定的资源。
因为代码可以改变所包含的HTML(以及HTML代码本身)的状态、行为和/或表示,所以要求HTML解析器顺序地和/或通过遵循HTML规范中定义的排序规则来执行所遇到的代码(或脚本)。例如,当HTML解析器遇到脚本标签(即,用于定义诸如脚本之类的客户端侧脚本的<script>标签)时,在HTML解析器可以继续解析HTML文档的剩余部分之前,其必须等待脚本被下载且被执行。因此,可以在脚本(即,在<script>标签内的代码)的执行内,将所有资源请求串行化(即,要求一个接一个地执行)。另外,对于HTML文档扫描操作(例如,HTML预扫描操作563等)来说,静态地预测正确渲染网页将需要的资源可能更加困难。
各个方面通过在沙盒引擎530中推测性地预提取资源,这使得浏览器系统500能够与其它浏览器操作(例如,HTML解析)和其它资源请求并行地发现并下载在HTML文档500中没有明确请求的资源,从而可以克服这些限制和其它限制。这些方面还可以使浏览器系统500能够在没有无意地修改浏览器状态的情况下,并行地执行多个脚本。
一旦脚本被发现,各个方面就可以与其它浏览器操作(例如,HTML预扫描563、HTML解析568等)和/或其它脚本并行地执行脚本(例如,代码)。为了避免对网页的正常处理造成干扰,可以在与其它浏览器部件隔离开和/或分开的沙盒引擎530中执行脚本(例如,以便不影响主引擎的操作)。在沙盒引擎530中执行脚本防止系统在对脚本的并行执行期间无意地修改浏览器状态。在一方面,可以在沙盒引擎530的单独的实例(例如,线程)中执行每个脚本。
各个方面可以修改浏览器客户端与引擎530之间的API。
通常,脚本引擎(例如,引擎514、530、558)提供了对浏览器API(即,使脚本能够调用浏览器操作的接口)的绑定(即,用于映射语言的API),以调用浏览器操作(例如,操纵DOM、访问网络等)。
在一方面,引擎530可以监测向网络请求资源的浏览器API。引擎530可以修改绑定(或者为脚本引擎提供单独的绑定集),以使资源请求被重定向到不同的浏览器部件(例如,预提取器部件)。以这种方式,可以将资源请求和/或收集的信息直接地传递给预提取器部件,以用于进一步处理。
沙盒引擎可以扫描代码,并且仅执行与发现外部资源最相关的代码的选择部分和/或选择操作。因为扫描操作仅与发现脚本可能请求的资源相关,所以扫描操作不受HTML规范规则所约束,并且不必运行/执行所有遇到的代码。通过不完全地执行所有遇到的代码,沙盒引擎可以快速地执行扫描操作。
沙盒引擎可以应用启发法,以进一步对扫描操作加速。通过举例的方式,这样的启发法可以包括限制总执行时间(例如,每个脚本或操作耗费最多10ms等)、循环迭代的数量(例如,仅处理循环的前10个迭代等)、递归深度、支持的特征、抽象解释等。
各个方面可以限制对象和数据结构(例如,哈希表、阵列等)的大小,以进一步对扫描操作加速,这是因为这样的结构通常不影响资源依赖性。
软件开发者通常在他们的代码中使用常见的模式、框架和/或服务(本文统一为“模式”)。各个方面可以检测代码中的这样的共性/模式(例如,在解析、分析、编译等期间),并且仅执行与发现资源相关的模式(或由模式标识的代码的部分)。在一方面,沙盒引擎可以被配置为以最常见的模式而不是完全的符合性和保守代码生成为目标(例如,经由主动的编译器优化)。可以使用各种各样的已知的模式识别技术来检测模式,例如,检测代码中的关键词(其是相对简单的操作),和/或分析页面和/或脚本的结构(其是相对复杂的操作)。
图7B示出了一方面的方法730,其中,方法730通过在沙盒引擎中对脚本的并行处理来并行地推测性预提取资源。可以将方法730的操作与本文所描述的其它浏览器操作并行地执行。
在方法730的框732中,HTML文档扫描器(例如,HTML预扫描器508)可以开始针对结构信息和/或为了发现资源而对HTML文档进行扫描。在框734中,HTML文档扫描器可以遇到脚本,并且将所遇到的脚本发送(例如,经由存储器写操作、重定向的资源请求、修改的绑定等)给沙盒引擎,以立即执行所遇到的脚本。在框732中,HTML文档扫描器可以继续针对结构信息和/或为了发现资源而扫描HTML文档。在一方面,HTML文档扫描器可以响应于遇到脚本而生成(或产生)沙盒引擎。
在框735中,沙盒引擎可以开始扫描脚本以发现资源。在框736中,沙盒引擎可以推测性地执行脚本(或包括在脚本中的代码的部分)。对脚本的推测性执行可以包括仅执行最有可能与发现外部资源相关的操作和/或代码的部分。在各个方面,可以将推测性执行操作与其它浏览器操作(例如,HTML预扫描563、HTML解析568等)并行地执行,和/或与其它脚本的执行(不论是否是推测性的)并行地执行。
在一方面,对脚本的推测性执行可以包括仅执行与模式相对应的代码中的部分,其中,该模式是与发现资源相关的。
在一方面,作为框736的部分,沙盒引擎可以基于启发法来执行对代码的推测性执行(例如,以减少执行时间)。这样的启发法可以包括限制总执行时间、循环迭代的数量、递归深度、支持的特征、和/或代码的抽象解释等。
在一方面,作为框736的部分,沙盒引擎可以限制由对脚本的推测性执行而生成的数据结构(例如,哈希表、阵列等)的大小。完整的数据结构可能不会导致识别用于下载的另外的资源,所以能够忽略完全生成/填充大数据结构所需要的处理时间。
在框738中,沙盒引擎可以发现为了渲染HTML文档所需要的、但在HTML文档中没有明确请求的资源。在框740中,沙盒引擎可以通知(或产生)预提取器提取所发现的资源。在框742中,沙盒引擎可以丢弃框736中执行的处理的结果。
在框744中,预提取器可以定位由框738中的沙盒引擎发现的资源。在框746中,预提取器可以下载所定位的资源。在框748中,预提取器可以将所下载的资源保存到存储器。
如上所论述的,HTML代码既可以嵌入代码(被称为“内联脚本”),又可以包括到代码(被称为“外部脚本”)的链接。为了正确地处理HTML文档,必须按照在HTML标准中定义的特定次序来执行内联脚本和外部脚本二者。
随着并行地下载、解析、分析并编译多个脚本,脚本变得准备好执行的次序可以不同于由HTML标准定义的特定执行次序。如果脚本没有准备好执行,但是所述脚本是由HTML标准定义的特定执行次序中的下一个脚本,则要求浏览器在对HTML文档执行任何额外的处理之前等待脚本变得准备好执行。各个方面使用该等待时间来准备其它脚本或资源(其不由HTML标准控制),以用于执行。可以并行地和/或在其它脚本的执行期间准备多个脚本和资源。
另外,实际上并非包括在(即,嵌入在或链接到)HTML文档中的所有脚本都被执行,并且提前准备所有脚本以用于执行可能浪费功率和处理资源。各个方面可以智能地选择要准备的以用于执行的脚本。
通过举例的方式,HTML预提取器可以发现并下载所有引用的脚本(乱序),并且HTML解析器稍后可以在处理HTML文档时候的正确的点处,按正确的次序安排它们的执行。
通常必须维持脚本的最终执行次序。然而,可以并行地和/或无序地执行与下载、解析、分析和编译脚本相关联的所有操作。
在一方面,可以准备包括在HTML文档中的脚本,以用于并行地(即,相对于彼此)且无序地(即,相对于由HTML标准定义的特定执行次序)执行。这可以通过生成唯一的标识符和/或签名、和/或将唯一的标识符和/或签名与每个脚本进行关联来实现。签名可以是基于脚本的内容的。适合于在各个方面使用的签名和签名过程的例子包括文件偏移(用于内联脚本)、消息摘要算法(例如,MD5)、安全哈希算法(SHA)、脚本的URL、脚本的URI、浏览器缓存键和/或各种已知的签名过程的任一种。
图7C示出了智能地准备包括在HTML文档中的脚本以用于并行执行的一方面的浏览器方法750。处理器可以将方法750的操作与其它浏览器操作并行地执行。
在框752中,HTML扫描器/预提取器可以针对结构信息和/或为了发现资源(图像、CSS、脚本等)而对HTML文档进行扫描。在框754中,HTML扫描器/预提取器可以发现HTML文档中的一个或多个脚本,并且向HTML解析器(与HTML扫描器并行地执行)通知所发现的脚本。在框756中,HTML扫描器/预提取器可以发起对外部脚本的下载。
在框758中,HTML解析器可以生成用于每个发现的脚本(内联脚本和外部脚本二者)的标识符(或签名),和/或将每个发现的脚本与标识符进行关联。在一方面,HTML解析器可以将所发现的脚本的文本设置为其标识符。在一方面,HTML解析器可以将外部脚本的URL/URI与外部脚本进行关联(即,可以将它们的URL/URI设置为它们的签名),并且执行摘要算法和/或哈希算法,以计算用于内联脚本的签名。如果脚本的URL/URI不是可用的、非唯一的和/或不唯一标识脚本的其它情况,则作为框758的部分,HTML解析器可以生成并使用签名,来标识该脚本。
在框760中,HTML解析器可以将脚本以及它们关联的标识符或URL/URI发送给与HTML解析器并行执行的引擎(例如,在单独的线程中)。在框762中,HTML解析器可以执行各种HTML解析器操作,例如,解析HTML以发现其它脚本。
在框772中,引擎可以从HTML解析器接收脚本以及关联的标识符、签名或URL/URI。在框774中,引擎可以准备(例如,解析、分析和/或编译)所接收的脚本,以用于执行。在所有接收的脚本上可以无序地和/或并行地执行准备操作(即,可以一次准备多个脚本)。在一方面,作为框774的部分,引擎可以使用启发法(例如,经由抽象解释)来在不执行代码的情况下检测调用图,基于调用图来识别最有可能执行的脚本(或函数),并且仅准备被确定为有可能执行的脚本以用于执行。在框776中,引擎可以将在脚本的准备期间生成的信息(例如,编译的代码等)与该脚本的标识符、签名或URL/URI进行关联。
在框764中,HTML解析器可以识别要被执行的下一个脚本(例如,基于由HTML标准定义的执行次序)。在框766中,HTML解析器可以将要被执行的下一个脚本的标识符(例如,脚本的文本、签名、URL/URI等)发送给引擎。在框768中,HTML解析器可以等待执行的结果或脚本已被执行的通知。在框770中,HTML解析器可以继续执行HTML解析器操作。
在框778中,引擎可以从HTML解析器接收标识符、签名或URL/URI。在框780中,引擎可以基于所接收的标识符、签名或URL/URI来识别合适的脚本。在确定框782中,引擎可以例如通过确定是否针对所识别的脚本已执行解析、分析和编译操作中的所有操作,来确定该脚本是否准备好立即执行。如果引擎确定脚本准备好立即执行(即,确定框782=“是”),则在框786中,引擎可以向HTML解析器通知执行的结果或者执行完成。
当确定脚本还没有准备好立即执行(即,确定框782=“否”)时,在框784中,引擎可以使用常规的解决方案来准备脚本以用于执行。在框786中,引擎可以根据由HTML标准定义的特定执行次序来执行脚本。以这种方式,方法750准备包括在HTML文档中的脚本以用于并行地(即,相对于彼此)且无序地(即,相对于由HTML标准定义的特定执行次序)执行,并且按标准定义的次序来执行脚本。
图8示出了处理预提取的资源的一方面的浏览器方法800。在框802中,网络浏览器部件(例如,经由提取管理器502)可以发起对发现的资源(例如,图像)的下载,其中,可以与其它浏览器操作(例如,HTML解析等)的执行并发地(或并行地)下载/提取发现的资源。当下载和/或接收到与所发现的资源相关联的所有数据时,在框804中,可以将所下载的数据(例如,图像数据)发送给线程池,以用于解码。在一方面,可以将解码操作与其它浏览器操作并发地执行。
在框806中,可以对所下载的数据(例如,图像数据)进行解码。在框808中,可以将经解码的数据添加到DOM调度器队列。在框810中,DOM调度器部件504可以将对DOM树和相应的树节点(例如,在图像数据的情况下的“img”树节点)的更新串行化。在框812中,可以从处理列表(例如,未决的图像的列表)中移除资源(例如,图像)。
图9示出了适合与各个方面一起使用的CSS引擎512中的示例部件。CSS引擎512可以被配置为执行三种主要类型的操作:CSS资源预提取操作902、CSS解析操作904和DOM样式化操作906。
CSS解析操作904可以包括读取CSS代码以及在存储器中创建数据结构(例如,CSS规则)的集合。可以将CSS代码嵌入在HTML中或者链接为单独的文件,并且可以将其存储在不同的服务器上。传统的CSS引擎(例如,在WebKit或者Firefox中的CSS引擎)可以在主浏览器线程中顺序地解析CSS。因此,如果页面使用嵌入的CSS,则HTML解析器无法解析HTML文档的其余部分,直到CSS引擎已解析文档的头部中的样式元素。如果页面使用多个CSS文件,则即使存在未充分使用的CPU核,它们也都将全部被顺序地解析。如果站点使用大CSS文件,则这样的CSS解析串行化(即,对CSS文档的串行处理)可能导致严重的减速。各个方面可以使用异步的任务来避免CSS解析串行化。
参考图9,HTML解析器506可以被配置为在页面加载操作期间针对DOM树中的每个样式元素来产生CSS解析570任务。类似地,每当新的CSS文件到达时,提取管理器502就可以产生CSS解析570任务。因此,可以与HTML解析器506和/或HTML解析操作568并发地执行多个CSS解析570任务。
因为样式表(CSS)和规则(CSS规则)的总次序可能是样式化操作574的关键部分,所以浏览器系统500可以被配置为确保总次序如同已按程序员预期的次序解析了所有样式表(CSS)一样。
在各个方面,解析任务或解析操作568、570中的每一个都可以接收唯一的、顺序的解析器ID。然后浏览器系统500可以使用该ID来重新创建样式表在文档中的排序。
DOM样式化操作906可以使CSS引擎512能够使用由CSS解析器522创建的数据结构来确定节点在DOM树中的样式。对于每个节点,CSS引擎512可以执行规则匹配操作,以找到其选择器与节点相匹配的所有规则。规则匹配通常每节点返回很多(并且有时候冲突的)规则。使用级联,CSS引擎522可以向规则分配权重,并且选择具有最大权重的规则。
对节点进行样式化中的最后一个步骤可以包括DOM样式化操作906,DOM样式化操作906通过使用由级联算法选择的规则来创建样式数据结构,并将其附加到DOM。只要实施了某些依赖性,就可以在多个节点上并行地执行规则匹配和级联操作。
各个方面可以在对多个浏览器操作和/或多个浏览器传递并行执行(或重叠)的期间,遵守/实施现有的HTML和JavaScript语义。DOM树可以是由所有浏览器传递使用的主数据结构。在各个方面,可以将对DOM树(其可以是由HTML5解析器构建的)的访问串行化,以符合HTML5规范。另外,为了允许更大的并行性,可以向每个传递提供对私有并发数据结构(即,除了DOM树之外)的访问。在一方面,这种额外的数据结构可以是布局树。
图10示出了实施例的并行DOM样式化方法1000,其中在多个节点上并行地执行规则匹配和级联操作。在框1002中,CSS引擎512可以遍历DOM树,并且针对每个DOM节点来产生两个不同的任务:匹配任务和节点样式化任务。在框1004中,匹配任务可以针对DOM节点来执行规则匹配和级联操作。在框1006中,样式化任务可以创建描述DOM节点的样式数据结构。在框1008中,样式化任务可以将样式数据结构附加到DOM树。
图11A示出了适合在各个方面使用的示例DOM树。图11B示出了与图11A所示的示例DOM树相对应的示例任务有向无环图(DAG)。具体地,图11B示出了匹配任务(被表示为三角形)可以如何完全地相互独立并且完全独立于样式化任务(被表示为正方形),而样式化任务相互依赖并且依赖于匹配任务。通常,对匹配任务的并行执行仅由计算系统中的处理核的数量所限制。
如上所述,样式化任务可以相互依赖和/或依赖于匹配任务。可能需要每个样式化任务在其能够执行前满足两种依赖性。首先,样式化任务可以仅在同一节点上运行的匹配任务已完成执行之后执行。这是因为样式化任务使用由匹配任务所选择的规则来构建样式数据结构。其次,在节点上运行的样式化任务可以仅在运行在该节点的父节点上的样式化任务已完成执行之后执行。这是因为该节点的样式特性中的一些可以从其父节点继承。例如,CSS代码p{color:inherit}指导浏览器使用与<p>节点的父节点相同的前景颜色来渲染<p>节点。
由匹配任务执行的规则匹配操作在计算、功率、时延等方面可能是昂贵的。例如,如果CSS引擎512需要确定规则“h1 p div{color:red}”是否应用于<div>元素E,则匹配算法可能需要找出E的祖先中的任一个是否是<p>元素,并且<p>的祖先中的任一个是否是<h1>元素。这可能需要沿着DOM树一直遍历到根,这可能是昂贵的操作。另外,典型的网站可能需要多于400,000次的这样的DOM树遍历。
为了减少DOM树遍历的数量,各个方面可以包括存储关于DOM节点的祖先的信息的布隆(Bloom)过滤器。布隆过滤器可以将DOM树遍历到根的数量(A)减少90%,从而使耗费在样式化算法中的时间减半。
布隆过滤器可以是大数据结构,并且可能需要CSS引擎512针对每个样式化任务来对其进行复制。因为复制成本可能远远大于性能增益,所以各个方面可以使用比布隆过滤器更小的结构。这可以通过减少复制操作的数量和/或减小复制的元素的大小来改善浏览器性能。
如上所描述的,各个方面可以使用元素id和类属性来预测是否应当预提取在CSS文件中引用的图像。在一方面,可以将这些元素和属性存储在记录它们中的每一个在文档中出现的次数的数据库中。HTML解析器还可以将信息添加到该数据库中。
在规则匹配算法开始之前,CSS引擎512可以根据数据库中的项目的频率来对它们进行排序。然后浏览器系统500可以在位图数据结构(被称为“匹配位图”)中向每个项目分配比特。如果id和类的数量大于位图大小,则可以向多个项目分配单个比特。因为位图是小的,所以可以将它们复制很多次,而不会显著影响计算设备的性能。
在规则匹配操作期间,每个样式化任务可以从其父节点接收匹配位图。匹配位图可以记录其祖先的id、类和标签。样式化任务可以使用匹配位图来过滤出可能从未匹配的规则。然后,样式化任务可以将它们的节点的id、类和标签添加到其中,并且向它们的子孙发送副本。平均而言,这样的匹配位图避免了90%的到DOM树的根的遍历,而仅有0.024%的错误肯定。
因为匹配位图不记录遇到标签和id的次序,所以可能发生错误肯定。例如,为了确定规则“h2 h1 p{color:red}”是否应用于某个节点<p>,并且确定匹配位图指示<h1>和<h2>均是<p>的祖先,则需要浏览器系统500遍历DOM树,以检查<h2>是否是<h1>的祖先。如果不是这种情况,那么其是错误肯定的情况。这样的错误肯定可能不会使页面被不正确地渲染,但可能浪费CPU周期。
在一方面,布局和渲染操作(例如,通过渲染引擎子系统560)可以包括执行将样式化后的DOM转换成用于显示在屏幕上的位图图像的计算。可以将应用于位图图像的DOM和CSS样式组合来形成新的树结构(被称为布局树),其中,每个节点表示网页上的视觉元素。可以将每个DOM节点转化为零、一或者很多布局树节点。渲染引擎子系统560可以将布局树作为输入,并且计算每个元素占用的页面的区域。每个元素的样式可以被视为布局的约束(例如,内联/块显示、浮动、宽度、高度等)。
渲染引擎子系统560可以遍历布局树,并且解决约束(例如,作为布局操作582的部分),以确定每个元素的最终的宽度、高度和位置。渲染引擎子系统560还可以遍历(例如,作为渲染操作584的部分)布局树(其是利用布局引擎的计算结果来注释的),并且根据CSS规则将其绘制在屏幕上。
在一方面,因为布局操作582和渲染操作584是紧密相关的,并且以流水线方式一起操作,因此它们可以由诸如布局和渲染引擎516之类的单个部件来执行。
在各个方面,渲染引擎子系统560可以被配置为执行布局操作582,使得在布局树上的四个传递中执行CSS布局算法。在每个传递中,与常规方法中的情况相比,信息可以以更受控制的方式流过树,从而揭示布局进程中的并行潜力。
在一方面,渲染引擎子系统560可以在布局树上执行四个传递:最小或优选宽度计算传递、宽度计算传递、块格式化上下文流传递以及绝对位置计算。
第一个传递(即,最小或优选宽度计算传递)可以是沿着树向上传播宽度以向每个元素分配最小宽度和优选宽度的自底向上的传递。通过举例的方式,对于包含文本段落的div元素,最小宽度可以是与在每个词后放置的换行符一样的宽度,并且优选宽度可以是没有任何换行符的宽度。
第二个传递(即,宽度计算传递)可以是计算每个元素的最终宽度的自顶向下的传递。根据元素的样式,可以从其父节点的宽度或者最小/优选宽度来推导最终宽度。
在第三个传递(即,块格式化上下文流传递)期间,每个元素具有已知的宽度,并且其内容可以用于计算其高度。通过举例的方式,对于包含文本的段落的div元素,在确定宽度之后,可以将文本放置在其内部,并且可以对每行的高度求和以找到div的总高度。传播的方向可能是复杂的。其内容用于计算其高度的元素可以被称为块格式化上下文(BFC)。元素是否是块格式化上下文可以由其CSS样式来确定。
DOM树中的块格式化上下文元素可以形成可以被叠加到DOM上的逻辑树。块格式化上下文叠加树可以是自底向上遍历,并且在浏览器系统300到达DOM树的根的时候,其将已经展示整个网页。在该阶段结束时,将向浏览器系统500通知所有元素的高度以及它们在包含它们的块格式化上下文中的相对位置。
第四个传递(即,绝对位置计算传递)可以是自顶向下的传递,其使用来自前一传递的每个块格式化上下文内的相对位置来计算每个元素在页面上的绝对位置。
在一方面,可以通过遍历布局树使得在前景元素之前访问背景元素来实现渲染。各个方面可以以与每个元素的样式一致的方式将每个元素拖拽到图形缓冲区中,并且在屏幕上显示缓冲区的内容(例如,经由GUI)。由于合成步骤所使用的存储器带宽,这些渲染操作可能在计算上是昂贵的。各个方面可以被配置为经由各个部件/子系统的并行性或并发执行来减小每个合成步骤所需要的存储器带宽。
通常,布局和渲染操作的执行可能因它们对从页面加载时间到用户接口的响应性的所有项的影响而是重要的。另外,布局和渲染操作与其它的重要任务(例如,执行JavaScript)竞争CPU周期。
除了顺序优化之外,各个方面还可以包括粗粒度和细粒度并行性二者以改善布局和渲染引擎的性能。这两种方法可以是互补的。在粗级别上,一方面的浏览器可以将尽可能多的工作移出关键路径并且将其移入工作线程中。在细级别上,该方面的浏览器可以将布局和渲染算法/方法并行化。
在常规的网络浏览器中,操纵DOM(例如,解析或JavaScript)的任务从不与布局和渲染任务同时执行,这确保了这二者不会相互干扰。相反地,各个方面将这两种类型的任务重合。因此,在各个方面,在每次DOM改变的时候,可以不更新布局树。
各个方面可以将布局树和DOM分开(或者保持分开)。可以在布局和渲染操作将正常发生的时候,将对布局树的更新作为批量操作来执行;通常这在解析或JavaScript执行任务完成之后。以这种方式对更新进行分组可能意味着可能需要浏览器系统500维护额外的状态信息以标识已经改变的DOM的部分,但是因为针对DOM的每个中间状态不更新布局树,所以将避免执行不必要的工作。
各个方面可以在布局树准备好利用结果来做有用的工作时更新布局树。布局树可以是与DOM分开的实体。可以在不影响布局树的情况下,执行所有DOM改变。相反地,一旦布局树被更新,渲染引擎子系统560就不需要以任何方式访问DOM。这能够实现并行性,并且还意味着布局树必须复制通常将仅存储在DOM中的某些信息。具体地,布局树可以包含对文本、图像、CSS样式和HTML画布元素的直接引用。
文本和图像可以是不可变的,并且与DOM安全地共享。CSS样式可以是逻辑上不可变的,但是CSS样式对象中的数据量可能太大(和/或太频繁地更新它们),而无法每次复制整个对象。因此,在一方面,每个样式对象可以内在地被划分为很多更小的子样式对象。可以使用写时复制方法来更新共享的子样式。可以适当地更新非共享的子样式。相应地,复制样式对象可以仅需要创建共享相同的子样式的新的样式对象,这可以便宜很多。另外,可以对子样式进行分组,使得一起更新的CSS特性在同一子样式中,这可以在更新发生时使得子样式副本最小化。这种安排允许DOM、布局和渲染部件引用相同的CSS样式,而无需在一个地方/部件做出的改变对其它地方/部件是可见的。类似的写时复制方法可以用于HTML画布元素。
将布局树与DOM树分开能够实现渲染引擎子系统560中的粗粒度并行性。当首次准备好向用户显示网页时,浏览器系统500可以创建初始化布局树的工作项,并且将其移交给渲染引擎子系统560,以用于处理。将布局和渲染操作分成不同的线程允许浏览器系统500的其余部分继续进行,例如,可以执行JavaScript,可以处理用户接口(UI)事件,以及可以计算CSS样式化等。
当渲染引擎子系统560完成其任务并且在屏幕上显示页面时,其可以提交“LR工作项”以更新布局树,并且重新启动进程。仅有“LR工作项”需要对DOM的独占访问,并且一旦树被更新,就可以并行地和/或异步地执行其它操作。
某些JavaScript DOM API(例如,getComputedStyle和offsetTop)可能需要关于布局算法计算的结果的信息。可能需要暂停渲染引擎子系统560,直到结果是可用的。如果渲染引擎子系统560在主线程中执行布局,则其可以复制在LR工作项(或LR线程)中执行的计算,这可能浪费时间和能量。
在一方面,渲染引擎子系统560可以被配置为记住布局树是否具有最新的布局信息。如果是,可以立即返回同步的布局请求。如果不是,可以正常地在LR线程中执行布局操作,并且可以请求渲染引擎子系统560向主线程通知布局过程何时完成。这尽可能快地传送了所需要的结果,同时防止了复制工作。
除了并行性之外,将布局树与DOM分开的另一优点是可以将渲染引擎子系统560视为网页之间共享的服务。因为布局树不返回引用由其构建它们的DOM,所以同一渲染引擎子系统560可以管理所有布局树,而不管它们的来源。这意味着与昂贵的、有限的渲染相关的资源(例如,图形缓冲区)在整个浏览器系统中500仅需要一个实例。
由布局树提供的另一优点是在用户与快速改变的页面交互时为确定用户的意图增加了灵活性。例如,如果用户点击由JavaScript在屏幕周围移动的按钮,则在JavaScript改变DOM与结果出现在屏幕上之间存在延迟,这是因为布局和渲染操作耗费时间。在登记了用户点击的时候,DOM可能已经被更新了,并且从浏览器角度来看的框的位置可能已经改变了。即使用户的鼠标指针在框的正上方,对点击的尝试也可能是不成功的。然而,因为布局树与DOM是分开的,所以浏览器系统500可以访问当前的工作树以及显示在屏幕上的最后的树。这使得浏览器系统500能够基于用户点击时所看到的,而非DOM的当前状态,来确定用户意图点击的对象,从而产生改善的感知响应性和更好的用户体验。
可以在各种移动计算设备上实现各个方面,在图12中示出了其中的例子。具体地,图12是具有适合与这些方面中的任一个一起使用的智能电话/蜂窝电话1200的形式的移动收发机设备的系统框图。蜂窝电话1200可以包括耦合到内部存储器1202的处理器1201、显示器1203和扬声器1208。另外,蜂窝电话1200可以包括用于发送和接收可以连接到无线数据链路的电磁辐射的天线1204、和/或耦合到处理器1201的蜂窝电话收发机1205。蜂窝电话1200通常还包括用于接收用户输入的菜单选择按钮或摇杆开关1206。
典型的蜂窝电话1200还包括声音编码/解码(CODEC)电路1213,其将从麦克风接收的声音数字化为适合于无线传输的数据分组,并且对接收的声音数据分组进行解码以生成模拟信号,模拟信号被提供给扬声器1208以产生声音。另外,处理器1201、无线收发机1205和CODEC 1213中的一个或多个可以包括数字信号处理器(DSP)电路(未单独地示出)。蜂窝电话1200还可以包括用于无线设备之间的低功耗短距离通信的ZigBee收发机(即,IEEE 802.15.4收发机)1213、或者其它类似的通信电路(例如,实现或WiFi协议等的电路)。
可以在多种商业上可得的服务器设备(例如,图13中所示的服务器1300)中的任一种上实现各个方面。这样的服务器1300通常包括耦合到易失性存储器1302和大容量非易失性存储器(例如,磁盘驱动器1303)的处理器1301。服务器1300还可以包括耦合到处理器1301的软盘驱动器、压缩光盘(CD)或DVD光盘驱动器1311。服务器1300还可以包括耦合到处理器1301的网络访问端口1306,所述网络访问端口1306用于与网络1305(例如,耦合到其它通信系统计算机和服务器的局域网)建立数据连接。
其它形式的计算设备也可以受益于各个方面。这样的计算设备通常包括图14中示出的部件,其中,图14示出了示例个人膝上型计算机1400。这样的个人计算机1400通常包括耦合到易失性存储器1402和大容量非易失性存储器(例如,磁盘驱动器1403)的处理器1401。计算机1400还可以包括耦合到处理器1401的压缩光盘(CD)和/或DVD驱动器1404。计算机设备1400还可以包括耦合到处理器1401的多个连接器端口,所述多个连接器端口用于建立数据连接或接收外部存储器设备,例如,用于将处理器1401耦合到网络的网络连接电路1405。计算机1400还可以耦合到键盘1408、诸如鼠标1410之类的定点设备、以及在计算机领域公知的显示器1409。
处理器1201、1301、1401可以是能够由软件指令(应用)配置为执行多种功能(包括下面所描述的各个方面的功能)的任何的可编程微处理器、微型计算机或多个处理器芯片或多个芯片。在一些移动设备中,可以提供多个处理器1301,例如,专用于无线通信功能的一个处理器以及专用于运行其它应用的一个处理器。通常,可以在软件应用被访问并被下载到处理器1201、1301、1401中之前,将它们存储在内部存储器1202、1302、1303、1402中。处理器1201、1301、1401可以包括足以存储应用软件指令的内部存储器。
可以用任意数量的单处理器系统或多处理器系统来实现各个方面。通常,进程是在短时间片段中在处理器上运行的,因此看起来多个进程好像同时运行在单个处理器上。当在时间片段结束时进程被从处理器移除时,与该进程的当前操作状态相关的信息被存储在存储器中,所以当进程返回到处理器上的运行时,进程可以无缝地恢复其操作。这种操作状态数据可以包括进程的地址空间、栈空间、虚拟地址空间、寄存器设置图像(例如,程序计数器、栈指针、指令寄存器、程序状态字等)、计费信息、许可、访问限制和状态信息。
进程可以产生其它进程,并且所产生的进程(即,子进程)可以继承产生进程(即,父进程)的许可和访问限制(即,上下文)中的一些许可和访问限制。进程可以是包括多个轻量级进程或线程的重量级进程,多个轻量级进程或线程是与其它进程/线程共享它们的上下文(例如,地址空间、栈、许可和/或访问限制等)的全部或部分的进程。因此,单个进程可以包括共享单个上下文(即,处理器的上下文)、访问单个上下文和/或在单个上下文内进行操作的多个轻量级进程或线程。
仅作为说明性的例子提供了前述方法描述和过程流图,而不旨在要求或意味着必须按给出的次序来执行各个方面的框。如本领域技术人员所明白的,可以按任何次序来执行前述方面中的框的次序。诸如“之后”、“然后”、“接下来”等的用词并不旨在限制框的次序;这些用词仅用于指导读者了解方法的描述。此外,任何对例如使用冠词“一(a)”、“一个(an)”或“该”的单数形式的权利要求要素的提及,并不被解释为将要素限制为单数形式。
结合本文公开的方面所描述的各种说明性逻辑框、模块、电路和算法框均可以实现成电子硬件、计算机软件或二者的组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和框均围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束。本领域技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为脱离本发明的范围。
被设计为执行本文所述功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件部件或者其任意组合,可以实现或执行用于实现结合本文公开的方面所描述的各种说明性逻辑、逻辑框、模块和电路的硬件。通用处理器可以是微处理器,在替代方案中,该处理器也可以是任何常规的处理器、控制器、微控制器或者状态机。处理器也可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、与DSP内核的结合的一个或多个微处理器,或者任何其它这样的配置。可选地,一些框或方法可以由特定于给定功能的电路来实现。
在一个或多个示例性方面,所描述的功能可以用硬件、软件、固件或其任意组合来实现。如果用软件来实现,可以将这些功能作为一个或多个指令或代码存储在非暂时性计算机可读介质或非暂时性处理器可读介质上。本文所公开的方法或算法的步骤可以体现在可以位于非暂时性计算机可读介质或处理器可读存储介质上的处理器可执行软件模块中。非暂时性计算机可读介质或处理器可读存储介质可以是计算机或处理器可以存取的任何存储介质。通过举例的方式而不是限制的方式,这样的非暂时性计算机可读介质或处理器可读介质可以包括RAM、ROM、EEPROM、闪速存储器、CD-ROM或其它光盘存储器、磁盘存储器或其它磁存储设备、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质。如本文中所使用的,磁盘(disk)和光盘(disc)包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上文的组合也应当包括在非暂时性计算机可读介质和处理器可读介质的保护范围之内。另外,方法或算法的操作可以作为位于非暂时性处理器可读介质和/或计算机可读介质上的代码和/或指令中的一个或任意组合或集合,可以将其并入计算机程序产品中。
为使本领域中的任何技术人员能够实现或者使用本发明,提供了前面对所公开的方面的描述。对于本领域技术人员来说,对这些方面的各种修改都将是显而易见的,并且,本文所定义的总体原理可以在不脱离本发明的精神和保护范围的情况下应用于其它方面。因此,本发明并不旨在受限于本文示出的方面,而是与以下的权利要求以及本文所公开的原理和新颖性特征的最广范围相一致。
Claims (40)
1.一种预提取资源的方法,包括:
由在计算设备的处理器中执行的第一进程对HTML文档进行扫描,以发现脚本;
由第二进程推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源;
通过发出下载所发现的资源的请求,来推测性地预提取资源;以及
丢弃通过推测性地执行所发现的脚本而生成的结果。
2.根据权利要求1所述的方法,其中,推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源包括:
推测性地执行所发现的脚本,以发现在所述计算设备的电子显示器上渲染所述HTML文档所需要的资源。
3.根据权利要求1所述的方法,其中,推测性地执行所发现的脚本包括:
与浏览器操作的执行并行地来推测性地执行所发现的脚本。
4.根据权利要求1所述的方法,其中,推测性地执行所发现的脚本包括:
与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本。
5.根据权利要求1所述的方法,其中,推测性地预提取资源包括:
与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源。
6.根据权利要求1所述的方法,其中,推测性地执行所发现的脚本包括:
执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分。
7.根据权利要求1所述的方法,其中,推测性地执行所发现的脚本包括:
仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分。
8.根据权利要求1所述的方法,其中,并行地来推测性地执行所发现的脚本包括:
基于启发法来执行所发现的脚本。
9.根据权利要求1所述的方法,还包括:
限制由推测性地执行所发现的脚本而生成的数据结构的大小。
10.根据权利要求1所述的方法,其中:
由第一进程对HTML文档进行扫描以发现脚本包括:由HTML扫描器对所述HTML文档进行扫描;以及
由第二进程推测性地执行所发现的脚本包括:由沙盒脚本执行引擎推测性地执行所发现的脚本。
11.一种计算设备,包括:
用于由第一进程对HTML文档进行扫描以发现脚本的单元;
用于由第二进程推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源的单元;
用于通过发出下载所发现的资源的请求来推测性地预提取资源的单元;以及
用于丢弃通过推测性地执行所发现的脚本而生成的结果的单元。
12.根据权利要求11所述的计算设备,其中,用于推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源的单元包括:
用于推测性地执行所发现的脚本以发现在所述计算设备的电子显示器上渲染所述HTML文档所需要的资源的单元。
13.根据权利要求11所述的计算设备,其中,用于推测性地执行所发现的脚本的单元包括:
用于与浏览器操作的执行并行地来推测性地执行所发现的脚本的单元。
14.根据权利要求11所述的计算设备,其中,用于推测性地执行所发现的脚本的单元包括:
用于与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本的单元。
15.根据权利要求11所述的计算设备,其中,用于推测性地预提取资源的单元包括:
用于与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源的单元。
16.根据权利要求11所述的计算设备,其中,用于推测性地执行所发现的脚本的单元包括:
用于执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分的单元。
17.根据权利要求11所述的计算设备,其中,用于推测性地执行所发现的脚本的单元包括:
用于仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分的单元。
18.根据权利要求11所述的计算设备,其中,用于并行地来推测性地执行所发现的脚本的单元包括:
用于基于启发法来执行所发现的脚本的单元。
19.根据权利要求11所述的计算设备,还包括:
用于限制由推测性地执行所发现的脚本而生成的数据结构的大小的单元。
20.根据权利要求11所述的计算设备,其中,
用于由第一进程对HTML文档进行扫描以发现脚本的单元包括:用于由HTML扫描器对所述HTML文档进行扫描的单元;以及
用于由第二进程推测性地执行所发现的脚本的单元包括:用于由沙盒脚本执行引擎推测性地执行所发现的脚本的单元。
21.一种计算设备,包括:
处理器,其配置有处理器可执行指令,以执行包括以下操作的操作:
由第一进程对HTML文档进行扫描以发现脚本;
由第二进程推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源;
通过发出下载所发现的资源的请求,来推测性地预提取资源;以及
丢弃通过推测性地执行所发现的脚本而生成的结果。
22.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源包括:
推测性地执行所发现的脚本以发现在所述计算设备的电子显示器上渲染所述HTML文档所需要的资源。
23.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本包括:
与浏览器操作的执行并行地来推测性地执行所发现的脚本。
24.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本包括:
与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本。
25.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得推测性地预提取资源包括:
与执行其它脚本并行地并且与浏览器操作的执行并发地来预提取资源。
26.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本包括:
执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分。
27.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得推测性地执行所发现的脚本包括:
仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分。
28.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得并行地来推测性地执行所发现的脚本包括:
基于启发法来执行所发现的脚本。
29.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行还包括以下操作的操作:
限制由推测性地执行所发现的脚本而生成的数据结构的大小。
30.根据权利要求21所述的计算设备,其中,所述处理器配置有处理器可执行指令以执行操作,使得:
由第一进程对HTML文档进行扫描以发现脚本包括:由HTML扫描器对所述HTML文档进行扫描;以及
由第二进程推测性地执行所发现的脚本包括:由沙盒脚本执行引擎推测性地执行所发现的脚本。
31.一种非暂时性计算机可读存储介质,其上存储有处理器可执行软件指令,所述处理器可执行软件指令被配置为使处理器执行用于预提取资源的操作,所述操作包括:
由第一进程对HTML文档进行扫描,以发现脚本;
由第二进程推测性地执行所发现的脚本,以发现在所述脚本或所述HTML文档中没有明确引用的资源;
通过发出下载所发现的资源的请求,来推测性地预提取资源;以及
丢弃通过推测性地执行所发现的脚本而生成的结果。
32.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得推测性地执行所发现的脚本以发现在所述脚本或所述HTML文档中没有明确引用的资源包括:
推测性地执行所发现的脚本,以发现在电子显示器上渲染所述HTML文档所需要的资源。
33.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得推测性地执行所发现的脚本包括:
与浏览器操作的执行并行地来推测性地执行所发现的脚本。
34.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得推测性地执行所发现的脚本包括:
与执行其它脚本并行地并且与浏览器操作的执行并发地来执行所发现的脚本。
35.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得推测性地预提取资源包括:
与执行其它脚本并行地并且与浏览器操作的执行并发地,来预提取资源。
36.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得推测性地执行所发现的脚本包括:
执行所发现的脚本中的被确定为最有可能与发现外部资源相关的选择部分。
37.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得推测性地执行所发现的脚本包括:
仅执行所发现的脚本中的与被识别为与发现外部资源相关的模式相对应的部分。
38.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得并行地来推测性地执行所发现的脚本包括:
基于启发法来执行所发现的脚本。
39.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行还包括以下操作的操作:
限制由推测性地执行所发现的脚本而生成的数据结构的大小。
40.根据权利要求31所述的非暂时性计算机可读存储介质,其中,所存储的处理器可执行软件指令被配置为使处理器执行操作,使得:
由第一进程对HTML文档进行扫描以发现脚本包括:由HTML扫描器对所述HTML文档进行扫描;以及
由第二进程推测性地执行所发现的脚本包括:由沙盒脚本执行引擎推测性地执行所发现的脚本。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261683996P | 2012-08-16 | 2012-08-16 | |
US61/683,996 | 2012-08-16 | ||
US201261684601P | 2012-08-17 | 2012-08-17 | |
US61/684,601 | 2012-08-17 | ||
US13/722,098 US9898445B2 (en) | 2012-08-16 | 2012-12-20 | Resource prefetching via sandboxed execution |
US13/722,098 | 2012-12-20 | ||
PCT/US2013/045693 WO2014028111A1 (en) | 2012-08-16 | 2013-06-13 | Speculative resource prefetching via sandboxed execution |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104603756A true CN104603756A (zh) | 2015-05-06 |
CN104603756B CN104603756B (zh) | 2018-11-30 |
Family
ID=50100980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380043240.3A Expired - Fee Related CN104603756B (zh) | 2012-08-16 | 2013-06-13 | 经由沙盒执行的推测性的资源预提取 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9898445B2 (zh) |
EP (1) | EP2885705B1 (zh) |
JP (1) | JP6254592B2 (zh) |
CN (1) | CN104603756B (zh) |
IN (1) | IN2015MN00078A (zh) |
WO (1) | WO2014028111A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484383A (zh) * | 2015-08-31 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 页面渲染方法、装置及设备 |
CN108091354A (zh) * | 2017-12-13 | 2018-05-29 | 深圳市沃特沃德股份有限公司 | 车载系统歌词解析方法和装置 |
CN108196964A (zh) * | 2017-12-29 | 2018-06-22 | 北京奇虎科技有限公司 | 一种将数据流模块化的方法和装置 |
CN111221626A (zh) * | 2020-01-03 | 2020-06-02 | 北京字节跳动网络技术有限公司 | 一种沙盒系统环境的创建方法、装置、介质和电子设备 |
CN112434235A (zh) * | 2020-11-06 | 2021-03-02 | 金蝶云科技有限公司 | 网页图片加载方法、装置、计算机设备和存储介质 |
CN112784265A (zh) * | 2021-02-05 | 2021-05-11 | 北京火绒网络科技有限公司 | 一种虚拟沙盒针对混淆代码的优化方法 |
CN113360200A (zh) * | 2020-03-05 | 2021-09-07 | 北京沃东天骏信息技术有限公司 | 一种目标程序植入页面运行的方法和装置 |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9912718B1 (en) | 2011-04-11 | 2018-03-06 | Viasat, Inc. | Progressive prefetching |
US11983233B2 (en) | 2011-04-11 | 2024-05-14 | Viasat, Inc. | Browser based feedback for optimized web browsing |
US20140053064A1 (en) | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Predicting the usage of document resources |
US20140143648A1 (en) * | 2012-11-16 | 2014-05-22 | Vladimir Kolesnikov | Bolt Shadow Workers |
US9785621B2 (en) * | 2012-11-26 | 2017-10-10 | Akamai Technologies, Inc. | Progressive consolidation of web page resources |
US9195778B2 (en) * | 2013-03-05 | 2015-11-24 | Qualcomm Innvoation Center, Inc. | Systems, methods, and apparatus for prefetching node data for linked data structure traversal |
US9565233B1 (en) * | 2013-08-09 | 2017-02-07 | Google Inc. | Preloading content for requesting applications |
US8924850B1 (en) * | 2013-11-21 | 2014-12-30 | Google Inc. | Speeding up document loading |
US20150278512A1 (en) * | 2014-03-28 | 2015-10-01 | Intel Corporation | Virtualization based intra-block workload isolation |
JP6277828B2 (ja) * | 2014-03-31 | 2018-02-14 | 富士通株式会社 | 編集補助プログラム、編集補助方法および編集補助装置 |
US20150341460A1 (en) * | 2014-05-22 | 2015-11-26 | Futurewei Technologies, Inc. | System and Method for Pre-fetching |
US10855797B2 (en) | 2014-06-03 | 2020-12-01 | Viasat, Inc. | Server-machine-driven hint generation for improved web page loading using client-machine-driven feedback |
US10795547B1 (en) * | 2014-06-11 | 2020-10-06 | Amazon Technologies, Inc. | User-visible touch event queuing |
US10097565B1 (en) | 2014-06-24 | 2018-10-09 | Amazon Technologies, Inc. | Managing browser security in a testing context |
US9317398B1 (en) * | 2014-06-24 | 2016-04-19 | Amazon Technologies, Inc. | Vendor and version independent browser driver |
US9336126B1 (en) | 2014-06-24 | 2016-05-10 | Amazon Technologies, Inc. | Client-side event logging for heterogeneous client environments |
US9430361B1 (en) | 2014-06-24 | 2016-08-30 | Amazon Technologies, Inc. | Transition testing model for heterogeneous client environments |
US20160012146A1 (en) * | 2014-07-10 | 2016-01-14 | MyMojo Corporation | Client Web Browser and Method for Constructing a Website DOM Module With Client-Side Functional Code |
US11095743B2 (en) | 2014-07-16 | 2021-08-17 | Tensera Networks Ltd. | Optimized content-delivery network (CDN) for the wireless last mile |
US10432748B2 (en) * | 2014-07-16 | 2019-10-01 | Tensera Networks Ltd. | Efficient content delivery over wireless networks using guaranteed prefetching at selected times-of-day |
US10169481B2 (en) * | 2015-02-18 | 2019-01-01 | Adobe Systems Incorporated | Method for intelligent web reference preloading based on user behavior prediction |
US9600682B2 (en) * | 2015-06-08 | 2017-03-21 | Accenture Global Services Limited | Mapping process changes |
US9811505B2 (en) * | 2015-07-20 | 2017-11-07 | Sas Institute Inc. | Techniques to provide processing enhancements for a text editor in a computing environment |
RU2606877C1 (ru) | 2015-09-28 | 2017-01-10 | Общество С Ограниченной Ответственностью "Яндекс" | Система и способ обработки данных в исполняемой на компьютере системе |
CN108701130B (zh) | 2015-10-20 | 2023-06-20 | 维尔塞特公司 | 使用自动浏览群集更新提示模型 |
US9733927B2 (en) * | 2015-11-11 | 2017-08-15 | International Business Machines Corporation | Detection of software or hardware incompatibilities in software packages |
US20170147407A1 (en) * | 2015-11-24 | 2017-05-25 | International Business Machines Corporation | System and method for prediciting resource bottlenecks for an information technology system processing mixed workloads |
US10083029B2 (en) * | 2016-11-09 | 2018-09-25 | Red Hat, Inc. | Detect application defects by correlating contracts in application dependencies |
CN110574033B (zh) * | 2017-08-22 | 2023-07-25 | 谷歌有限责任公司 | 减少多媒体内容传递的远程过程调用 |
CN107766036B (zh) * | 2017-10-13 | 2020-09-18 | 深圳市金证科技股份有限公司 | 一种模块的构建方法、构建装置及终端设备 |
WO2019171237A1 (en) | 2018-03-05 | 2019-09-12 | Tensera Networks Ltd. | Application preloading in the presence of user actions |
US11922187B2 (en) | 2018-03-05 | 2024-03-05 | Tensera Networks Ltd. | Robust application preloading with accurate user experience |
US12099856B2 (en) | 2018-03-05 | 2024-09-24 | Tensera Networks Ltd. | Robust application preloading with accurate user experience |
KR20200100958A (ko) | 2019-02-19 | 2020-08-27 | 삼성전자주식회사 | 어플리케이션을 프리페치하는 전자 장치 및 방법 |
US11301539B2 (en) | 2019-02-21 | 2022-04-12 | Bank Of America Corporation | Just-in-time front end template generation using logical document object models |
WO2021019415A1 (en) | 2019-07-30 | 2021-02-04 | Tensera Networks Ltd. | Pre-rendering of application user-interfaces in user devices |
US11489845B1 (en) * | 2019-09-24 | 2022-11-01 | Menlo Security, Inc. | Speculative rendering |
US11816034B2 (en) | 2020-10-26 | 2023-11-14 | International Business Machines Corporation | Fast cache tracking to support aggressive prefetching |
WO2022118131A1 (en) | 2020-12-03 | 2022-06-09 | Tensera Networks | Preloading of applications having an existing task |
WO2022130156A1 (en) | 2020-12-20 | 2022-06-23 | Tensera Networks Ltd. | Preloading of applications transparently to user |
US11734381B2 (en) * | 2021-12-07 | 2023-08-22 | Servicenow, Inc. | Efficient downloading of related documents |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001052061A2 (en) * | 2000-01-14 | 2001-07-19 | Sun Microsystems, Inc. | Method and apparatus for using an assist processor to pre-fetch data values for a primary processor |
CN1465019A (zh) * | 2000-10-24 | 2003-12-31 | 皇家菲利浦电子有限公司 | 预取被参考资源的方法和设备 |
CN101075236A (zh) * | 2006-06-12 | 2007-11-21 | 腾讯科技(深圳)有限公司 | 一种加快浏览器网页显示的装置和方法 |
US20100312858A1 (en) * | 2009-06-04 | 2010-12-09 | Microsoft Corporation | Network application performance enhancement using speculative execution |
US20110145321A1 (en) * | 2009-12-15 | 2011-06-16 | Facebook Inc. | Setting Cookies in Conjunction with Phased Delivery of Structured Documents |
US20110307951A1 (en) * | 2010-06-11 | 2011-12-15 | M86 Security, Inc. | System and method for blocking the transmission of sensitive data using dynamic data tainting |
Family Cites Families (101)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7281203B2 (en) | 1998-09-29 | 2007-10-09 | Netscape Communications Corporation | Selecting a DTD for transforming malformed layout expressions into wellformed ones |
US6292936B1 (en) | 1998-11-12 | 2001-09-18 | International Business Machines Corporation | Enabling multiple runtime processors in an interpreter-based embedded scripting system |
US6662341B1 (en) | 1999-05-20 | 2003-12-09 | Microsoft Corporation | Method and apparatus for writing a windows application in HTML |
US20020078165A1 (en) * | 2000-12-14 | 2002-06-20 | International Business Machines Corporation | System and method for prefetching portions of a web page based on learned preferences |
WO2002057909A2 (en) | 2001-01-16 | 2002-07-25 | Sun Microsystems, Inc. | Value speculation on an assist processor to facilitate prefetching for a primary processor |
US20040015574A1 (en) * | 2001-09-24 | 2004-01-22 | Teleware, Inc. | Multimedia communication management system with external system management |
US7234136B2 (en) | 2001-11-02 | 2007-06-19 | Sun Microsystems, Inc. | Method and apparatus for selecting references for prefetching in an optimizing compiler |
US20060075070A1 (en) * | 2002-04-02 | 2006-04-06 | Patrick Merissert-Coffinieres | Development and deployment of mobile and desktop applications within a flexible markup-based distributed architecture |
US20040098306A1 (en) | 2002-09-30 | 2004-05-20 | Fitzpatrick Brian F. | Platform system and method for extending sales and use of a resource of motivational programs |
US20040088375A1 (en) | 2002-11-01 | 2004-05-06 | Sethi Bhupinder S. | Method for prefetching Web pages to improve response time networking |
US7331038B1 (en) | 2003-07-02 | 2008-02-12 | Amazon.Com, Inc. | Predictive prefetching to improve parallelization of document generation subtasks |
US7698453B2 (en) | 2003-07-29 | 2010-04-13 | Oribital Data Corporation | Early generation of acknowledgements for flow control |
US20050138381A1 (en) | 2003-08-01 | 2005-06-23 | Stickle Thomas C. | Dynamic content security processor system for XML documents |
US8140489B2 (en) | 2004-03-24 | 2012-03-20 | Oracle International Corporation | System and method for analyzing content on a web page using an embedded filter |
US7487227B2 (en) | 2004-06-03 | 2009-02-03 | Alcatel-Lucent Usa Inc. | Scripting engine having a sequencer table and a plurality of secondary tables for network communication software |
US7908653B2 (en) * | 2004-06-29 | 2011-03-15 | Intel Corporation | Method of improving computer security through sandboxing |
US7519962B2 (en) | 2004-10-07 | 2009-04-14 | Thomson Financial Llc | Command script parsing using local and extended storage for command lookup |
CN101375284B (zh) | 2004-10-25 | 2012-02-22 | 安全第一公司 | 安全数据分析方法和系统 |
US7620890B2 (en) | 2004-12-30 | 2009-11-17 | Sap Ag | Presenting user interface elements to a screen reader using placeholders |
US8069406B2 (en) | 2005-02-11 | 2011-11-29 | Flash Networks, Inc. | Method and system for improving user experience while browsing |
US7694008B2 (en) | 2005-05-04 | 2010-04-06 | Venturi Wireless | Method and apparatus for increasing performance of HTTP over long-latency links |
US7814410B2 (en) | 2005-09-12 | 2010-10-12 | Workman Nydegger | Initial server-side content rendering for client-script web pages |
US8117531B1 (en) | 2005-09-23 | 2012-02-14 | Google Inc. | Interpreted language translation system and method |
US7836303B2 (en) * | 2005-12-09 | 2010-11-16 | University Of Washington | Web browser operating system |
US8176416B1 (en) | 2006-03-17 | 2012-05-08 | Wells Fargo Bank, N.A. | System and method for delivering a device-independent web page |
US8020089B1 (en) | 2006-10-23 | 2011-09-13 | Adobe Systems Incorporated | Rendering hypertext markup language content |
US20080098300A1 (en) | 2006-10-24 | 2008-04-24 | Brilliant Shopper, Inc. | Method and system for extracting information from web pages |
US7941609B2 (en) | 2007-02-23 | 2011-05-10 | Microsoft Corporation | HTTP acceleration by prediction and pre-fetching |
US7921353B1 (en) | 2007-04-09 | 2011-04-05 | Oracle America, Inc. | Method and system for providing client-server injection framework using asynchronous JavaScript and XML |
US8001551B2 (en) * | 2007-04-24 | 2011-08-16 | Microsoft Corporation | Providing localized resources for client-side script execution |
US7689665B2 (en) * | 2007-04-27 | 2010-03-30 | Microsoft Corporation | Dynamically loading scripts |
WO2008141434A1 (en) | 2007-05-17 | 2008-11-27 | Fat Free Mobile Inc. | Method and system for transcoding web pages by limiting selection through direction |
US10019570B2 (en) * | 2007-06-14 | 2018-07-10 | Microsoft Technology Licensing, Llc | Protection and communication abstractions for web browsers |
US8966053B2 (en) | 2007-07-12 | 2015-02-24 | Viasat, Inc. | Methods and systems for performing a prefetch abort operation for network acceleration |
US8549099B2 (en) | 2007-07-12 | 2013-10-01 | Viasat, Inc. | Methods and systems for javascript parsing |
US20090112975A1 (en) * | 2007-10-31 | 2009-04-30 | Microsoft Corporation | Pre-fetching in distributed computing environments |
US8954989B1 (en) | 2007-11-19 | 2015-02-10 | Appcelerator, Inc. | Flexible, event-driven JavaScript server architecture |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
US8176205B2 (en) | 2008-02-14 | 2012-05-08 | Research In Motion Limited | Method, server and system for optimizing HTML-based content |
WO2009103742A2 (en) * | 2008-02-18 | 2009-08-27 | Martin Boesgaard | Authenticating a web page with embedded javascript |
US8595693B2 (en) * | 2008-07-29 | 2013-11-26 | International Business Machines Corporation | Model driven deployment of composite applications |
JP5226425B2 (ja) | 2008-08-13 | 2013-07-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報処理装置、情報処理方法およびプログラム |
US20100050089A1 (en) | 2008-08-20 | 2010-02-25 | Company 100, Inc. | Web browser system of mobile communication terminal, using proxy server |
US8347352B2 (en) * | 2008-11-03 | 2013-01-01 | Mediamind Technologies Ltd. | Method and system for securing a third party communication with a hosting web page |
US8432404B2 (en) * | 2008-12-15 | 2013-04-30 | Leonovus Usa Inc. | Media action script acceleration method |
US20100175049A1 (en) | 2009-01-07 | 2010-07-08 | Microsoft Corporation | Scope: a structured computations optimized for parallel execution script language |
US20100180192A1 (en) | 2009-01-09 | 2010-07-15 | Cerner Innovation, Inc. | Dynamically configuring a presentation layer associated with a webpage delivered to a client device |
US9258136B2 (en) * | 2009-01-19 | 2016-02-09 | Koninklijke Philips N.V. | Browser with dual scripting engine for privacy protection |
US8250653B2 (en) * | 2009-04-30 | 2012-08-21 | Microsoft Corporation | Secure multi-principal web browser |
US20110010690A1 (en) | 2009-07-07 | 2011-01-13 | Howard Robert S | System and Method of Automatically Transforming Serial Streaming Programs Into Parallel Streaming Programs |
US9058402B2 (en) * | 2012-05-29 | 2015-06-16 | Limelight Networks, Inc. | Chronological-progression access prioritization |
US20110029899A1 (en) * | 2009-08-03 | 2011-02-03 | FasterWeb, Ltd. | Systems and Methods for Acceleration and Optimization of Web Pages Access by Changing the Order of Resource Loading |
US8468360B2 (en) | 2009-09-04 | 2013-06-18 | Panasonic Corporation | Client terminal, server, server-client system, cooperation processing method, program and recording medium |
US20110066676A1 (en) | 2009-09-14 | 2011-03-17 | Vadim Kleyzit | Method and system for reducing web page download time |
JP5316338B2 (ja) | 2009-09-17 | 2013-10-16 | ソニー株式会社 | 情報処理装置、データ取得方法及びプログラム |
US8683319B2 (en) | 2009-10-06 | 2014-03-25 | Telefonaktiebolaget L M Ericsson (Publ) | Shared script files in multi-tab browser |
US8627298B2 (en) * | 2009-12-14 | 2014-01-07 | International Business Machines Corporation | Using appropriate level of code to be executed in runtime environment using metadata describing versions of resources being used by code |
US8479286B2 (en) | 2009-12-15 | 2013-07-02 | Mcafee, Inc. | Systems and methods for behavioral sandboxing |
US8108377B2 (en) * | 2009-12-15 | 2012-01-31 | Facebook, Inc. | Predictive resource identification and phased delivery of structured documents |
US20120246017A1 (en) * | 2009-12-28 | 2012-09-27 | Google Inc. | Distributing content |
US9003380B2 (en) | 2010-01-12 | 2015-04-07 | Qualcomm Incorporated | Execution of dynamic languages via metadata extraction |
US9058489B2 (en) | 2010-01-25 | 2015-06-16 | Samsung Electronics Co., Ltd. | Marking documents with executable text for processing by computing systems |
US8499283B2 (en) | 2010-02-09 | 2013-07-30 | Webroot Inc. | Detection of scripting-language-based exploits using parse tree transformation |
KR101092024B1 (ko) * | 2010-02-19 | 2011-12-12 | 박희정 | 웹 서비스의 실시간 취약성 진단 및 결과정보 제공 서비스 시스템 |
US9626343B2 (en) * | 2010-04-05 | 2017-04-18 | Facebook, Inc. | Caching pagelets of structured documents |
EP2558923A4 (en) * | 2010-04-12 | 2014-11-19 | Google Inc | EXTENSION FRAMEWORK FOR AN ENTRY METHOD EDITOR |
US9043385B1 (en) * | 2010-04-18 | 2015-05-26 | Viasat, Inc. | Static tracker |
US9075663B2 (en) | 2010-05-12 | 2015-07-07 | Samsung Electronics Co., Ltd. | Cloud-based web workers and storages |
US8600803B1 (en) | 2010-05-18 | 2013-12-03 | Google Inc. | Incentivizing behavior to address pricing, tax, and currency issues in an online marketplace for digital goods |
US20110289484A1 (en) * | 2010-05-19 | 2011-11-24 | Also Energy | Method and System for Script Processing for Web-Based Applications |
US8977653B1 (en) | 2010-06-17 | 2015-03-10 | Google Inc. | Modifying web pages to reduce retrieval latency |
US8375296B2 (en) | 2010-06-30 | 2013-02-12 | Samsung Electronics Co., Ltd. | Reusing style sheet assets |
US9021047B2 (en) * | 2010-07-31 | 2015-04-28 | Unwired Planet, Llc | Method and system for delivering embedded objects in a webpage to a user agent using a network device |
US20120110437A1 (en) * | 2010-10-28 | 2012-05-03 | Microsoft Corporation | Style and layout caching of web content |
US20120110433A1 (en) * | 2010-10-28 | 2012-05-03 | Microsoft Corporation | Parallel web page processing |
US8850307B2 (en) | 2010-12-17 | 2014-09-30 | Qualcomm Innovation Center, Inc. | Method and apparatus for receiving display limited web page content |
US8510237B2 (en) * | 2011-03-15 | 2013-08-13 | Qualcomm Incorporated | Machine learning method to identify independent tasks for parallel layout in web browsers |
US9104475B2 (en) | 2011-04-07 | 2015-08-11 | Qualcomm Innovation Center, Inc. | Methods and apparatus for managing operations of a web browser by predicting time period of subsequent script execution activity |
US20140365861A1 (en) * | 2011-04-25 | 2014-12-11 | Google Inc. | Prefetching binary data for use by a browser plugin |
US8413047B2 (en) * | 2011-05-12 | 2013-04-02 | Qualcomm Incorporated | Concurrent parsing and processing of HTML and JAVASCRIPT® |
US8812658B1 (en) * | 2011-05-20 | 2014-08-19 | Amazon Technologies, Inc. | Pre-fetching of network page content |
US8752035B2 (en) | 2011-05-31 | 2014-06-10 | Microsoft Corporation | Transforming dynamic source code based on semantic analysis |
WO2012162816A1 (en) | 2011-06-03 | 2012-12-06 | 1722779 Ontario Inc. | System and method for semantic knowledge capture |
US8959427B1 (en) | 2011-08-05 | 2015-02-17 | Google Inc. | System and method for JavaScript based HTML website layouts |
US9158590B2 (en) * | 2011-08-08 | 2015-10-13 | International Business Machines Corporation | Dynamically acquiring computing resources in a networked computing environment |
US8516360B2 (en) * | 2011-08-24 | 2013-08-20 | Qualcomm Innovation Center, Inc. | Controlled parallel compilation and execution of JavaScripts |
CN103907113A (zh) | 2011-09-14 | 2014-07-02 | 诺基亚公司 | 用于分布式脚本处理的方法和装置 |
US8341245B1 (en) * | 2011-09-26 | 2012-12-25 | Google Inc. | Content-facilitated speculative preparation and rendering |
US8549108B2 (en) * | 2011-09-29 | 2013-10-01 | Riverbed Technology, Inc. | Optimized prefetching of compound data |
US8954492B1 (en) * | 2011-11-30 | 2015-02-10 | F5 Networks, Inc. | Methods for inlining content externally referenced in a web page prior to providing the web page to a requestor and devices thereof |
CN102438045B (zh) | 2011-12-07 | 2015-07-08 | 深圳市深信服电子科技有限公司 | Web页面的预取方法、系统以及访问web页面的方法 |
US9569557B2 (en) * | 2011-12-29 | 2017-02-14 | Chegg, Inc. | Cache management in HTML eReading application |
US9519782B2 (en) * | 2012-02-24 | 2016-12-13 | Fireeye, Inc. | Detecting malicious network content |
US20130227388A1 (en) | 2012-02-28 | 2013-08-29 | Microsoft Corporation | Persistent Storage of Profile Data for Script Compilation |
WO2013167169A1 (en) * | 2012-05-08 | 2013-11-14 | Nokia Siemens Networks Oy | Method and apparatus |
US9160624B2 (en) * | 2012-07-03 | 2015-10-13 | Opera Software Ireland Limited | Linked list scripting engine |
US20140053063A1 (en) | 2012-08-14 | 2014-02-20 | Microsoft Corporation | User interface control framework for stamping out controls using a declarative template |
US20140053064A1 (en) | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Predicting the usage of document resources |
US20140053056A1 (en) | 2012-08-16 | 2014-02-20 | Qualcomm Incorporated | Pre-processing of scripts in web browsers |
US9015348B2 (en) * | 2013-07-19 | 2015-04-21 | Limelight Networks, Inc. | Dynamically selecting between acceleration techniques based on content request attributes |
-
2012
- 2012-12-20 US US13/722,098 patent/US9898445B2/en active Active
-
2013
- 2013-06-13 EP EP13731601.4A patent/EP2885705B1/en not_active Not-in-force
- 2013-06-13 IN IN78MUN2015 patent/IN2015MN00078A/en unknown
- 2013-06-13 WO PCT/US2013/045693 patent/WO2014028111A1/en active Application Filing
- 2013-06-13 CN CN201380043240.3A patent/CN104603756B/zh not_active Expired - Fee Related
- 2013-06-13 JP JP2015527457A patent/JP6254592B2/ja not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001052061A2 (en) * | 2000-01-14 | 2001-07-19 | Sun Microsystems, Inc. | Method and apparatus for using an assist processor to pre-fetch data values for a primary processor |
CN1465019A (zh) * | 2000-10-24 | 2003-12-31 | 皇家菲利浦电子有限公司 | 预取被参考资源的方法和设备 |
CN101075236A (zh) * | 2006-06-12 | 2007-11-21 | 腾讯科技(深圳)有限公司 | 一种加快浏览器网页显示的装置和方法 |
US20100312858A1 (en) * | 2009-06-04 | 2010-12-09 | Microsoft Corporation | Network application performance enhancement using speculative execution |
US20110145321A1 (en) * | 2009-12-15 | 2011-06-16 | Facebook Inc. | Setting Cookies in Conjunction with Phased Delivery of Structured Documents |
US20110307951A1 (en) * | 2010-06-11 | 2011-12-15 | M86 Security, Inc. | System and method for blocking the transmission of sensitive data using dynamic data tainting |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484383A (zh) * | 2015-08-31 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 页面渲染方法、装置及设备 |
CN108091354A (zh) * | 2017-12-13 | 2018-05-29 | 深圳市沃特沃德股份有限公司 | 车载系统歌词解析方法和装置 |
CN108196964A (zh) * | 2017-12-29 | 2018-06-22 | 北京奇虎科技有限公司 | 一种将数据流模块化的方法和装置 |
CN111221626A (zh) * | 2020-01-03 | 2020-06-02 | 北京字节跳动网络技术有限公司 | 一种沙盒系统环境的创建方法、装置、介质和电子设备 |
CN113360200A (zh) * | 2020-03-05 | 2021-09-07 | 北京沃东天骏信息技术有限公司 | 一种目标程序植入页面运行的方法和装置 |
CN112434235A (zh) * | 2020-11-06 | 2021-03-02 | 金蝶云科技有限公司 | 网页图片加载方法、装置、计算机设备和存储介质 |
CN112434235B (zh) * | 2020-11-06 | 2024-06-04 | 金蝶云科技有限公司 | 网页图片加载方法、装置、计算机设备和存储介质 |
CN112784265A (zh) * | 2021-02-05 | 2021-05-11 | 北京火绒网络科技有限公司 | 一种虚拟沙盒针对混淆代码的优化方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2885705B1 (en) | 2017-12-06 |
EP2885705A1 (en) | 2015-06-24 |
JP2015534144A (ja) | 2015-11-26 |
CN104603756B (zh) | 2018-11-30 |
WO2014028111A1 (en) | 2014-02-20 |
JP6254592B2 (ja) | 2017-12-27 |
US9898445B2 (en) | 2018-02-20 |
US20140053057A1 (en) | 2014-02-20 |
IN2015MN00078A (zh) | 2015-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104603756A (zh) | 经由沙盒执行的推测性的资源预提取 | |
CN104704489B (zh) | 预测文档资源的使用 | |
JP5989248B2 (ja) | ウェブブラウザにおけるスクリプトの事前処理 | |
CN114041117A (zh) | 用于代码优化的语法图的持续注释 | |
Cascaval et al. | Zoomm: a parallel web browser engine for multicore mobile devices | |
US20170054790A1 (en) | System and Method for Object Compression and State Synchronization | |
US8782514B1 (en) | Parallel XML parsing using meta-DFAs | |
US11023234B2 (en) | Method and system for restructuring of collections for synchronization | |
Bijo et al. | A formal model of data access for multicore architectures with multilevel caches | |
Prokopec | Learning Concurrent Programming in Scala | |
Kelly | Applying functional programming theory to the design of workflow engines. | |
Black et al. | Modular isa-independent full-system simulation | |
US11954023B2 (en) | Garbage collection prefetching state machine | |
US20240192934A1 (en) | Framework for development and deployment of portable software over heterogenous compute systems | |
Gorostiaga et al. | Runtime verification of real-time event streams using the tool HStriver | |
이윤성 | Optimizing Machine Learning Inference Systems with White Box Approaches | |
Dong et al. | FasTensor User Interface | |
Lu | Exploiting multi-core processors for the service oriented architecture paradigm: parallel xml processing and concurrent service orchestration | |
Soulé | Reusable Software Infrastructure for Stream Processing | |
Sbîrlea et al. | SCnC: Efficient Unification of Streaming with Dynamic Task Parallelism |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181130 Termination date: 20200613 |
|
CF01 | Termination of patent right due to non-payment of annual fee |