一种更换JS引擎的方法及装置与流程

文档序号:12824514阅读:309来源:国知局
一种更换JS引擎的方法及装置与流程

本发明涉及js引擎技术领域,更具体的,涉及一种更换js引擎的方法及装置。



背景技术:

浏览器内核主要分为两个模块:一个模块负责解析html网页的webcore,而另一个模块的作用是解析javascript脚本,我们一般称之为javascript引擎。javascript引擎简称js引擎,是一个专门处理javascript脚本的虚拟机,目前主要包括jscore和v8两种引擎。

javascript中所有事物,包括字符串、数值、数组和函数等都是对象,对象是带有属性和方法的特殊数据类型。javascript支持三种对象,内置对象、浏览器私有对象和自定义对象。对象包含两个要素:1.用来描述对象特性的一组数据,也就是若干变量,通常称为属性。2.用来操作对象特性的若干动作,也就是若干函数,通常称为方法。

由于浏览器要适应不同的环境,所以替换js引擎在所难免,例如从jscore引擎替换到v8引擎,就需要对浏览器模块做一定的修改。对于内置对象,大多数主流的js引擎已经实现了,替换js引擎也不必再去实现。但是,浏览器私有对象则不同,主流的js引擎并没有实现,因为私有对象是根据需求来设计的,所以更换js引擎后一般都要重新将私有对象实现一遍。

私有对象的实现方法,首先要创建所有私有对象的idl文件;然后根据私有对象的idl文件运行perl脚本,自动生成对象的外层文件jsmyobject.cpp,运行程序时,浏览器的binding模块就会调用外层文件里的函数;最后创建myobject.cpp(myobject表示对象的名称),并在其中实现私有对象的具体内容,供外层文件jsmyobject.cpp使用。

由于浏览器私有对象比较多,如果重新实现,开发周期就比较长,造成更换js引擎的成本较高。



技术实现要素:

有鉴于此,本发明提供了一种更换js引擎的方法及装置,构造中间层的公共接口函数,通过调用公共接口函数联结更换后的js引擎,不需要再次修改私有对象的内容,缩短更换js引擎的开发周期,降低开发成本。

具体技术方案如下:

一种更换js引擎的方法,所述方法包括:

生成每个私有对象符合目标js引擎语法的外层文件;

当浏览器的binding模块调用各个所述外层文件时,实现目标js引擎对webcore的桥接;

根据目标js引擎的结构定义各个所述私有对象的公共接口函数,并将所述公共接口函数的声明写入头文件中;

调用所述头文件中的所述公共接口函数,运行所述目标js引擎。

优选的,所述生成每个私有对象符合目标js引擎语法的外层文件,包括:

按所述目标js引擎中idl文件的语法规则,对原js引擎中每个私有对象的idl文件的语法进行修改,得到多个修改后的idl文件;

分别将各个所述修改后的idl文件写入perl脚本;

运行各个所述perl脚本,生成各个所述私有对象的外层文件。

优选的,所述公共接口函数包括:创建和销毁对象类函数、属性设置函数、编码转换函数、执行js脚本函数、基本数据类型转换函数、数组操作函数、保护和解除保护函数,以及内存回收函数。

一种更换js引擎的装置,所述装置包括:

生成单元,用于生成每个私有对象符合目标js引擎语法的外层文件;

桥接单元,用于当浏览器的binding模块调用各个所述外层文件时,实现目标js引擎对webcore的桥接;

定义单元,用于根据目标js引擎的结构定义各个所述私有对象的公共接口函数,并将所述公共接口函数的声明写入头文件中;

调用单元,用于调用所述头文件中的所述公共接口函数,运行所述目标js引擎。

优选的,所述生成单元包括:

修改子单元,用于按所述目标js引擎中idl文件的语法规则,对原js引擎中每个私有对象的idl文件的语法进行修改,得到多个修改后的idl文件;

写入子单元,用于分别将各个所述修改后的idl文件写入perl脚本;

生成子单元,用于运行各个所述perl脚本,生成各个所述私有对象的外层文件。

优选的,所述公共接口函数包括:创建和销毁对象类函数、属性设置函数、编码转换函数、执行js脚本函数、基本数据类型转换函数、数组操作函数、保护和解除保护函数,以及内存回收函数。

相对于现有技术,本发明的有益效果如下:

本发明提供的更换js引擎的方法及装置,在将私有对象外层文件都实现后,并完成目标js引擎对webcore的桥接后,通过根据目标js引擎的结构定义各个私有对象的公共接口函数,实现更换js引擎时私有对象中间层的过渡。定义各个私有对象的公共接口函数,避免了现有技术中需要针对每个私有对象依次创建包含相应私有对象具体实现函数的内层文件,也就是说,避免了对各个私有对象实现函数的再次修改,缩短了更换js引擎的开发周期,降低了更换js引擎的开发成本。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例公开的一种更换js引擎的方法流程图;

图2为本发明实施例公开的一种更换js引擎的方法流程图;

图3为本发明实施例公开的一种更换js引擎的装置结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,本实施例公开了一种更换js引擎的方法,包括以下步骤:

s101:生成每个私有对象符合目标js引擎语法的外层文件;

需要说明的是,本实施例中的原js引擎指的是浏览器中目前运行的js引擎,也就是需要被替换掉的js引擎;目标引擎指的是浏览器为了适应不同的环境需要的新的js引擎,也就是浏览器更换后的js引擎。

现有常用的js引擎有jscore和v8两种引擎,不同js引擎中规定的语法是不同的。

具体的,请参阅图2,s101一种优选的实施方法包括以下步骤:

s201:按所述目标js引擎中idl文件的语法规则,对原js引擎中每个私有对象的idl文件的语法进行修改,得到多个修改后的idl文件;

需要说明的是,每个私有对象都对应一个idl文件,idl文件中列出了相对应的私有对象的专有属性和方法。可以理解的是,每个私有对象的专有属性和方法不同,也就是说,每个私有对象对应的idl文件的内容不同。

修改后的idl文件中对于私有对象的专有属性和方法与原idl文件相同,修改后的idl文件的语法符合目标js引擎的语法规则。

s202:分别将各个所述修改后的idl文件写入perl脚本;

s203:运行各个所述perl脚本,生成各个所述私有对象的外层文件。

具体的,运行perl脚本后自动生成与perl脚本中的idl文件内容相对应的私有对象的外层文件jsmyobject.cpp,myobject表示私有对象的名称。

可见s101完成了原js引擎中各个私有对象的外层文件在目标js引擎中的实现。

s102:当浏览器的binding模块调用各个所述外层文件时,实现目标js引擎对webcore的桥接;

具体的,binding模块与私有对象的实现息息相关,包含目标js引擎桥接webcore的代码。

s103:根据目标js引擎的结构定义各个所述私有对象的公共接口函数,并将所述公共接口函数的声明写入头文件中;

优选的,所述公共接口函数包括:创建和销毁对象类函数、属性设置函数、编码转换函数、执行js脚本函数、基本数据类型转换函数、数组操作函数、保护和解除保护函数,以及内存回收函数。

创建和销毁对象类函数,用于通过接口,创建和销毁某个私有对象的类;

属性设置函数,用于设置私有对象与私有对象之间的从属关系,例如a私有对象是b私有对象的父类;

编码转换函数,用于将私有对象使用的字符串转换成页面对应的编码;

执行js脚本函数,用于输入一段js脚本,运行并将结果输出;

基本数据类型转换函数,用于将私有对象内的数据转换成js脚本的基本类型:字符串、数字、布尔、null、undefined等;

数组操作函数,用于创建数组供私有对象使用、设置和获取数组中某个元素的值;

保护和解除保护函数,用于通过接口保护私有对象,保证私有对象的成员不能被外部改变,或解除对私有对象的保护;

内存回收函数,私有对象可以调用此接口,将js引擎中的内存回收。

需要说明的是,公共接口函数中定义的各个函数是各个私有对象的公共函数,公共接口函数的定义避免了在idl文件中已经列出相应私有对象的专有属性和方法的基础上,实现私有对象具体内容时对每个私有对象的公共函数的重复开发。

也就是说,当定义各个私有对象的公共接口函数后,通过调用这些公共接口函数达到联结替换后的js引擎的目的,不需要再次修改私有对象的内容,直接将idl文件中相应私有对象的专有属性和方法复制过来使用就可以,缩短了更换js引擎的开发周期,降低了更换js引擎的开发成本。

s104:调用所述头文件中的所述公共接口函数,运行所述目标js引擎。

具体的,通过头文件中公共接口函数的声明,调用头文件即调用公共接口函数。

本实施例提供的更换js引擎的方法,在将私有对象外层文件都实现后,并完成目标js引擎对webcore的桥接后,通过根据目标js引擎的结构定义各个私有对象的公共接口函数,实现更换js引擎时私有对象中间层的过渡,并通过调用公共接口函数运行目标js引擎。定义各个私有对象的公共接口函数,避免了现有技术中需要针对每个私有对象依次创建包含相应私有对象具体实现函数的内层文件,也就是说,避免了对各个私有对象实现函数的再次修改,缩短了更换js引擎的开发周期,降低了更换js引擎的开发成本。

基于上述实施例公开的更换js引擎的方法,请参阅图3,本实施例对应公开了一种更换js引擎的装置,具体包括:

生成单元101,用于生成每个私有对象符合目标js引擎语法的外层文件;

桥接单元102,用于当浏览器的binding模块调用各个所述外层文件时,实现目标js引擎对webcore的桥接;

定义单元103,用于根据目标js引擎的结构定义各个所述私有对象的公共接口函数,并将所述公共接口函数的声明写入头文件中;

优选的,所述公共接口函数包括:创建和销毁对象类函数、属性设置函数、编码转换函数、执行js脚本函数、基本数据类型转换函数、数组操作函数、保护和解除保护函数,以及内存回收函数。

调用单元104,用于调用所述头文件中的所述公共接口函数,运行所述目标js引擎。

优选的,所述生成单元101包括:

修改子单元,用于按所述目标js引擎中idl文件的语法规则,对原js引擎中每个私有对象的idl文件的语法进行修改,得到多个修改后的idl文件;

写入子单元,用于分别将各个所述修改后的idl文件写入perl脚本;

生成子单元,用于运行各个所述perl脚本,生成各个所述私有对象的外层文件。

本实施例提供的更换js引擎的装置,在生成单元101将私有对象外层文件都实现后,桥接单元102完成目标js引擎对webcore的桥接后,定义单元103通过根据目标js引擎的结构定义各个私有对象的公共接口函数,实现更换js引擎时私有对象中间层的过渡,调用单元104通过调用公共接口函数运行目标js引擎。定义单元103定义各个私有对象的公共接口函数,避免了现有技术中需要针对每个私有对象依次创建包含相应私有对象具体实现函数的内层文件,也就是说,本实施例提供的更换js引擎的装置避免了对各个私有对象实现函数的再次修改,缩短了更换js引擎的开发周期,降低了更换js引擎的开发成本。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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