一种JS代码的裁剪方法、装置、介质和电子设备制造方法及图纸

技术编号:24408984 阅读:19 留言:0更新日期:2020-06-06 08:20
本发明专利技术提供了一种JS代码的裁剪方法、装置、介质和电子设备,其中,JS代码的裁剪方法包括:在打包器的加载器中调用自定义转换函数;在自定义转换函数中解析文件的抽象语法树,得到用于对JS代码进行裁剪的裁剪依赖信息,并调用定制化转换函数;在定制化转换函数中根据裁剪依赖信息和第一裁剪目标对JS代码的抽象语法树进行转换,得到符合第一裁剪目标的第一裁剪后JS代码。本发明专利技术通过在定制化转换函数中根据裁剪依赖信息和裁剪目标对JS代码的抽象语法树进行转换,得到裁剪后JS代码,该裁剪后的JS代码能够符合当前用户的裁剪需求,从而实现了定制化裁剪JS代码。

A cutting method, device, medium and electronic equipment of JS code

【技术实现步骤摘要】
一种JS代码的裁剪方法、装置、介质和电子设备
本专利技术涉及计算机
,具体而言,涉及一种JS代码的裁剪方法、装置、介质和电子设备。
技术介绍
JavaScript是一种解释型的脚步语言,主要用于网页应用编程。实现一个网页应用的代码通常由HTML(HyperTextMark-upLanguage,超文本标记语言)、CSS(CascadingStyleSheets,层叠样式表)和JS三部分组成。HTML代码实现网页的结构,CSS代码实现网页样式,JS代码实现网页的交互。用户访问一个网页时,浏览器会先请求对应的资源,比如JS代码,然后解析资源并呈现给用户。如果请求资源越大,请求时间就越长,用户看到白屏的时间就会比较长,用户体验就会比较差。因此,在JS的开发中,开发者需要采用各种技术来减少JS代码的体积,比如代码混淆、代码压缩和代码裁剪等。在现代的JS开发中,一般会采用Webpack对代码进行打包处理。Webpack提供了一种摇树功能,用来移除未被引用的JS代码,即死代码。但这个功能生效有一个前提,必须使用ES2015模块语法,使用其他模块语法的代码,比如Commonjs,无法使用摇树功能。在一个规范的开发流程中,开发的代码需要依次运行在开发环境、测试环境和生产环境中。不同的运行环境对代码的要求是不一样的。在开发环境中,为了便于开发,会包含一些接口模拟或类型检测代码。在测试环境中,为了便于定位问题,会包含一些调试和详细的日志打印代码。而在生产环境中,为了尽可能地减少代码体积,应该只包含业务功能代码,其他的辅助性代码,比如调试代码,都应该去掉。为了满足不同运行环境对代码的不同要求,可以为每个运行环境均编写对应的一套代码,但这种处理方法,不仅编写效率低,还浪费了大量的人力和物力,提高了开发成本。因此,在长期的研发当中,专利技术人对现有不同运行环境下的JS代码的处理方法进行了大量的研究,提出了一种JS代码裁剪方法,以解决上述技术问题之一。
技术实现思路
本专利技术的目的在于提供一种JS代码的裁剪方法、装置、介质和电子设备,能够解决上述提到的至少一个技术问题。具体方案如下:根据本专利技术的具体实施方式,第一方面,本专利技术提供一种JS代码的裁剪方法,包括:在打包器的加载器中调用自定义转换函数;在所述自定义转换函数中解析文件的抽象语法树,得到用于对JS代码进行裁剪的裁剪依赖信息,并调用定制化转换函数;在所述定制化转换函数中根据所述裁剪依赖信息和第一裁剪目标对所述JS代码的所述抽象语法树进行转换,得到符合所述第一裁剪目标的第一裁剪后JS代码。根据本专利技术的具体实施方式,第二方面,本专利技术提供一种JS代码的裁剪装置,包括:自定义转换函数调用单元,用于在打包器的加载器中调用自定义转换函数;解析单元,用于在所述自定义转换函数调用单元调用的所述自定义转换函数中解析文件的抽象语法树,得到用于对JS代码进行裁剪的裁剪依赖信息;定制化转换函数调用单元,用于调用定制化转换函数;转换单元,用于在所述定制化转换函数调用单元调用的所述定制化转换函数中根据所述解析单元解析出的所述裁剪依赖信息和第一裁剪目标对所述JS代码的所述抽象语法树进行转换,得到符合所述第一裁剪目标的第一裁剪后JS代码。根据本专利技术的具体实施方式,第三方面,本专利技术提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如上任一项所述的JS代码的裁剪方法。根据本专利技术的具体实施方式,第四方面,本专利技术提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上任一项所述的JS代码的裁剪方法。本专利技术实施例的上述方案与现有技术相比,至少具有以下有益效果:本公开实施例通过提供一种JS代码的裁剪方法、装置、介质和电子设备,通过在定制化转换函数中根据裁剪依赖信息和裁剪目标对JS代码的抽象语法树进行转换,得到裁剪后JS代码,该裁剪后的JS代码能够符合当前用户的裁剪需求,从而实现了定制化裁剪JS代码。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本专利技术的实施例,并与说明书一起用于解释本专利技术的原理。显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:图1示出了根据本专利技术实施例的JS代码的裁剪方法流程图;图2示出了根据本专利技术的实施例的JS代码的裁剪装置结构示意图;图3示出了根据本专利技术的实施例的电子设备连接结构示意图。具体实施方式为了使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术作进一步地详细描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。在本专利技术实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本专利技术。在本专利技术实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。应当理解,尽管在本专利技术实施例中可能采用术语第一、第二、第三等来描述……,但这些……不应限于这些术语。这些术语仅用来将……区分开。例如,在不脱离本专利技术实施例范围的情况下,第一……也可以被称为第二……,类似地,第二……也可以被称为第一……。取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者装置中还存在另外的相同要素。下面结合附图详细说明本专利技术的可选实施例。实施例1如图1所示,根据本公开实施例的具体实施方式,第一方面,本公开实施例提供一种JS代码的裁剪方法,具体包括如下方法步骤:S102:在打包器的加载器中调用自定义转换函数。在实际应用中,加载器可以本文档来自技高网
...

【技术保护点】
1.一种JS代码的裁剪方法,其特征在于,包括:/n在打包器的加载器中调用自定义转换函数;/n在所述自定义转换函数中解析文件的抽象语法树,得到用于对JS代码进行裁剪的裁剪依赖信息,并调用定制化转换函数;/n在所述定制化转换函数中根据所述裁剪依赖信息和第一裁剪目标对所述JS代码的所述抽象语法树进行转换,得到符合所述第一裁剪目标的第一裁剪后JS代码。/n

【技术特征摘要】
1.一种JS代码的裁剪方法,其特征在于,包括:
在打包器的加载器中调用自定义转换函数;
在所述自定义转换函数中解析文件的抽象语法树,得到用于对JS代码进行裁剪的裁剪依赖信息,并调用定制化转换函数;
在所述定制化转换函数中根据所述裁剪依赖信息和第一裁剪目标对所述JS代码的所述抽象语法树进行转换,得到符合所述第一裁剪目标的第一裁剪后JS代码。


2.根据权利要求1所述的方法,其特征在于,在所述得到用于对JS代码进行裁剪的裁剪依赖信息之后,所述方法还包括:
读取所述裁剪依赖信息;其中,
所述裁剪依赖信息至少包括以下一项:
使用过的类名信息、使用过的函数名信息。


3.根据权利要求1所述的方法,其特征在于,在所述在打包器的加载器中调用自定义转换函数之前,所述方法还包括:
配置裁剪插件,并在所述裁剪插件中设置所述加载器。


4.根据权利要求3所述的方法,其特征在于,所述在所述裁剪插件中设置所述加载器包括:
在所述裁剪插件中给JS模块设置对应的加载器;和/或,
在所述裁剪插件中给JS的超集TS模块设置对应的加载器。


5.根据权利要求1所述的方法,其特征在于,在所述在所述定制化转换函数中根据所述裁剪依赖信息和第一裁剪目标对所述JS代码的所述抽象语法树进行转换,得到符合所述第一裁剪目标的第一裁剪后JS代码之前,所述方法还包括:
读取所述第一裁剪目标,其中,所述第一裁剪目标是与所述第一裁剪后JS代码匹配的。


6.根据权利要求5所述的方法,其特征在于,在所述读取所述第一裁剪目标之前,所述方法还包括:
通过重写源码对应的第一抽象语法树...

【专利技术属性】
技术研发人员:邬亮赵汝军
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1