CN110989992B - 资源处理方法及装置 - Google Patents

资源处理方法及装置 Download PDF

Info

Publication number
CN110989992B
CN110989992B CN201911044927.4A CN201911044927A CN110989992B CN 110989992 B CN110989992 B CN 110989992B CN 201911044927 A CN201911044927 A CN 201911044927A CN 110989992 B CN110989992 B CN 110989992B
Authority
CN
China
Prior art keywords
dependency
array
file
tree
public
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.)
Active
Application number
CN201911044927.4A
Other languages
English (en)
Other versions
CN110989992A (zh
Inventor
龙佳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuxian Shenghuo Beijing Information Technology Co ltd
Original Assignee
Wuxian Shenghuo Beijing Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuxian Shenghuo Beijing Information Technology Co ltd filed Critical Wuxian Shenghuo Beijing Information Technology Co ltd
Priority to CN201911044927.4A priority Critical patent/CN110989992B/zh
Publication of CN110989992A publication Critical patent/CN110989992A/zh
Application granted granted Critical
Publication of CN110989992B publication Critical patent/CN110989992B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本公开是关于资源处理方法及装置。该方法包括:获取网页的入口嘉瓦脚本JS文件的依赖树;解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。本公开通过分析网页的入口JS文件的依赖树得到资源的依赖关系,从而无需开发者人工分析依赖,提高了准确性与开发效率,通过依赖分析后自动注入公共资源,统一公共资源引入版本与合并规则,从而使每一个公共资源的缓存利用率达到最大化,进而提高页面加载性能,提升用户体验。

Description

资源处理方法及装置
技术领域
本公开涉及通信技术领域,尤其涉及资源处理方法及装置。
背景技术
在开网页(web)项目时,需要依赖许多公共嘉瓦脚本(JS,JavaScript)资源,这些公共JS资源可能会被多个项目同时依赖,而在打包构建时,公共JS资源会与项目JS资源合并在一起,导致打包出来的JS文件较大,文件发布到内容分发网络(CDN,Content DeliveryNetwork)后导致浪费磁盘空间,同时,浏览器缓存资源是通过CDN地址作为标示,导致多个项目中无法利用同一个公共资源的缓存,降低页面加载性能,影响用户体验,从而间接带来用户流失,给公司造成损失。
针对该问题,相关技术中采用的方案是将公共资源通过CDN的方式引入,项目中不打包公共资源,从而减少项目资源文件大小,提高页面加载性能。
但是,在相关技术中公共资源通过CDN引入以后,导致项目代码中对公共资源的依赖不够清晰,无法从代码中直观的查找到资源的依赖关系,不利于开发者开发与维护;开发者需人为分析公共资源的相互依赖关系,效率较低,也存在遗漏以及错误的可能,从而导致项目无法正常运行;由于每个项目引入的公共资源版本不同,同时存在对不同公共资源合并的策略不一致,最终CDN地址会不一致,导致项目重复加载资源,影响页面加载性能。
发明内容
为克服相关技术中存在的问题,本公开实施例提供一种资源处理方法及装置。所述技术方案如下:
根据本公开实施例的第一方面,提供一种资源处理方法,包括:
获取网页的入口嘉瓦脚本JS文件的依赖树;
解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;
将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。
在一个实施例中,所述获取网页的入口嘉瓦脚本JS文件的依赖树,包括:
获取网页的入口JS文件的地址;
将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
在一个实施例中,所述解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组,包括:
遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;
将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;
过滤掉各所述叶子节点中的非公共资源;
依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;
将所述叶子节点数组中的叶子节点按照包名进行排序;
将所述叶子节点数组插入到二维依赖数组中;
遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;
将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组。
在一个实施例中,所述将所述依赖数组中的公共资源文件以外联的脚本script方式注入到所述网页的页面,包括:
解析所述网页的第一超文本标记语言html内容,得到第一html语法树;
遍历所述第一html语法树,获取到注入inject标签;
解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;
遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;
使用所生成的script节点替换对应的所述inject节点,得到第二html语法树;
根据所述第二html语法树,生成所述网页的第二html内容。
本公开的实施例提供的技术方案可以包括以下有益效果:该技术方案通过分析网页的入口JS文件的依赖树得到资源的依赖关系,从而无需开发者人工分析依赖,提高了准确性与开发效率,通过依赖分析后自动注入公共资源,统一公共资源引入版本与合并规则,从而使每一个公共资源的缓存利用率达到最大化,进而提高页面加载性能,提升用户体验。
根据本公开实施例的第二方面,提供一种资源处理装置,包括:
获取模块,用于获取网页的入口嘉瓦脚本JS文件的依赖树;
解析模块,用于解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;
配置模块,用于将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
注入模块,用于将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。
在一个实施例中,所述获取模块,包括:
获取子模块,用于获取网页的入口JS文件的地址;
解析子模块,用于将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
查找子模块,用于依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
在一个实施例中,所述解析模块遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;过滤掉各所述叶子节点中的非公共资源;依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;将所述叶子节点数组中的叶子节点按照包名进行排序;将所述叶子节点数组插入到二维依赖数组中;遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组。
在一个实施例中,所述注入模块解析所述网页的第一超文本标记语言html内容,得到第一html语法树;遍历所述第一html语法树,获取到注入inject标签;解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;使用所生成的script节点替换对应的所述inject节点,得到第二html语法树;根据所述第二html语法树,生成所述网页的第二html内容。
根据本公开实施例的第三方面,提供一种资源处理装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
获取网页的入口嘉瓦脚本JS文件的依赖树;
解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;
将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。
根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现上述第一方面所述方法的步骤。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1是根据一示例性实施例示出的资源处理方法的流程图。
图2是根据一示例性实施例示出的资源处理方法的流程图。
图3是根据一示例性实施例示出的入口JS文件的依赖树的示意图。
图4是根据一示例性实施例示出的叶子节点数组的示意图。
图5是根据一示例性实施例示出的叶子节点数组的示意图。
图6是根据一示例性实施例示出的叶子节点数组的示意图。
图7是根据一示例性实施例示出的依赖树的示意图。
图8是根据一示例性实施例示出的叶子节点数组的示意图。
图9是根据一示例性实施例示出的叶子节点数组的示意图。
图10是根据一示例性实施例示出的依赖树的示意图。
图11是根据一示例性实施例示出的依赖树的示意图。
图12是根据一示例性实施例示出的二维依赖数组的示意图。
图13是根据一示例性实施例示出的二维依赖数组的示意图。
图14是根据一示例性实施例示出的公共资源依赖数组的示意图。
图15是根据一示例性实施例示出的依赖关系的示意图。
图16是根据一示例性实施例示出的资源处理装置的框图。
图17是根据一示例性实施例示出的资源处理装置的框图。
图18是根据一示例性实施例示出的资源处理装置的框图。
图19是根据一示例性实施例示出的资源处理装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
为了解决相关技术中存在的上述问题,本公开实施例提供了一种资源处理方法,该方法包括:获取网页的入口JS文件的依赖树;解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;将所述公共资源依赖数组中的公共资源以外联的脚本(script)方式注入到所述网页的页面。本公开实施例提供的资源处理方法,通过分析网页的入口JS文件的依赖树得到资源的依赖关系,从而无需开发者人工分析依赖,提高了准确性与开发效率,通过依赖分析后自动注入公共资源,统一公共资源引入版本与合并规则,从而使每一个公共资源的缓存利用率达到最大化,进而提高页面加载性能,提升用户体验。
基于上述分析,提出以下各具体实施例。
图1是根据一示例性实施例示出的一种资源处理方法的流程图,该方法的执行主体可以为服务器;如图1所示,该方法包括以下步骤101-104:
在步骤101中,获取网页的入口JS文件的依赖树。
示例的,通过递归解析入口JS文件依赖关系得到依赖树。可选的,获取网页的入口JS文件的依赖树的实现方式可以包括:获取网页的入口JS文件的地址,将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖,依次递归遍历查找所述入口JS文件的依赖的子依赖得到所述入口JS文件的依赖树。
在步骤102中,解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组。
示例的,将依赖树通过一系列的递归遍历处理最终得到一个公共资源依赖数组。可选的,解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组的实现方式可以包括:遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组,并将叶子节点数组中的重复的多个叶子节点只保留一个叶子节点;将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;过滤掉各所述叶子节点中的非公共资源,公共依赖包都是以包名的方式引入,例如‘@vdian/sheer’,而非公共依赖包则是以相对路径的方式引入,例如‘./util/index.js’;依次查找所述过滤后的依赖树中是否存在叶子节点:如果存在,则将该叶子节点从所述叶子节点数组中移除;如果不存在,则查找下一个叶子节点。将所述叶子节点数组中的叶子节点按照包名进行排序;排序是为了统一依赖先后顺序,例如a,b与b,a,如果不进行排序,则会由于项目之间引入顺序不同而导致CDN地址不一致,从而无法最大化利用缓存,同一批叶子节点之间的先后顺序可以随意调换,但是不同批次之间由于存在依赖关系,不可随意调动,该步骤最终得到类似于[{"name":"@vdian/sheer"},{"name":"@vdian/v-collect"}]的依赖数组。将所述叶子节点数组插入到二维依赖数组中;该步骤最终得到例如[[{"name":"axios’"},{"name":"vue"}],[{"name":"@vdian/sheer"},{"name":"@vdian/v-collect"}]]的二维依赖数组,二维数组中的元素先后顺序表示不同批次的叶子节点,同时也表示不同批次的依赖顺序,递归遍历步骤上述步骤,一直到所有节点遍历完成,最终得到入口文件的二维依赖数组。遍历所述二维依赖数组,通过远程配置接口获取每一个公共资源的版本号与内容分发网络CDN地址,追加到公共资源的版本号(version)与CDN地址(url)字段中,远程配置接口是用于配置公共资源的版本号与CDN地址,用于集中控制公共资源包的管理。将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组;以所述入口JS文件绝对路径地址作为关键字,将所述一维依赖数组缓存至依赖关系中。
在步骤103中,将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问。
示例的,将公共资源从webpack构建中移除,防止webpack将公共资源与项目资源打包在一起,例如:获取webpack传入的依赖包名称;查找依赖包是否在依赖数组中,如果存在,则将该依赖包忽略,配置成以全局变量方式访问,变量名称为包名,如果不存在,则退出,执行一次依赖包查找。
在步骤104中,将所述公共资源依赖数组中的公共资源以外联的script方式注入到所述网页的页面。
示例的,通过解析html页面中的inject标签,查找到入口JS文件的公共资源依赖数组,然后将公共资源以外联的script方式替换inject标签。可选的,解析所述网页的第一超文本标记语言html内容,得到第一html语法树;遍历所述第一html语法树,获取到注入inject标签;解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;使用所生成的script节点替换对应的所述inject节点,得到第二html语法树;根据所述第二html语法树,生成所述网页的第二html内容。
本公开实施例提供的技术方案,通过分析网页的入口JS文件的依赖树得到资源的依赖关系,从而无需开发者人工分析依赖,提高了准确性与开发效率,通过依赖分析后自动注入公共资源,统一公共资源引入版本与合并规则,从而使每一个公共资源的缓存利用率达到最大化,进而提高页面加载性能,提升用户体验。
图2是根据一示例性实施例示出的一种资源处理方法的流程图。如图2所示,在图1所示实施例的基础上,本公开涉及的资源处理方法可以包括以下步骤201-212:
在步骤201中,获取网页的入口JS文件的依赖树。
示例的,通过递归解析入口JS文件依赖关系得到依赖树。可选的,获取网页的入口JS文件的依赖树的实现方式可以包括:获取网页的入口JS文件的地址,将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖,依次递归遍历查找所述入口JS文件的依赖的子依赖得到所述入口JS文件的依赖树。参见图3示出的入口JS文件的依赖树的示意图。
在步骤202中,遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组。
示例的,在图3示出的入口JS文件的依赖树的示意图的基础上,第一次遍历依赖树得到的叶子节点数组如图4所示。
在步骤203中,将叶子节点数组中的叶子节点去重,得到去重后的叶子节点数组;过滤掉各所述叶子节点中的非公共资源。
示例的,在图3示出的入口JS文件的依赖树的示意图的基础上,第一次去重后的叶子节点数组如图5所示,过滤掉各叶子节点中的非公共资源之后的叶子节点数组如图6所示。
在步骤204中,将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树。
示例的,在图3示出的入口JS文件的依赖树的示意图的基础上,第一次过滤掉叶子节点后得到的新依赖树如图7所示。
在步骤205中,依次查找所述过滤后的依赖树中是否存在上述叶子节点数组中的叶子节点:如果存在,则转到步骤206;如果不存在,则查找下一个叶子节点。
在步骤206中,将该叶子节点从所述叶子节点数组中移除。
示例的,在图7示出的第一次过滤掉叶子节点后得到的依赖树的示意图的基础上,过滤掉新依赖树中存在的上述叶子节点数组中的叶子节点之后的叶子节点数组如图8所示。
在步骤207中,将所述叶子节点数组中的叶子节点按照包名进行排序;将所述叶子节点数组插入到二维依赖数组中。
示例的,对图8所示的叶子节点数组中的叶子节点按照包名进行排序得到的叶子节点数组如图9所示;将该叶子节点数组插入到二维依赖数组中。
在步骤208中,判断入口JS文件的依赖树的所有节点是否遍历完成:若是,则转到步骤209;若不是,则转到步骤202。
示例的,在图3示出的入口JS文件的依赖树的示意图的基础上,第二次过滤掉叶子节点后得到的依赖树如图10所示,第三次过滤掉叶子节点后得到的依赖树如图11所示,图11示出的依赖树再无其他依赖,则退出递归遍历,转到步骤209。经过上述递归过程之后,得到的二维依赖数组如图12所示。
在步骤209中,遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址。
示例的,在图12示出的二维依赖数组的示意图的基础上,为每一个公共资源追加版本号与CDN地址之后得到的二维依赖数组如图13所示。
在步骤210中,将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组。
示例的,参见图14示出的入口JS文件所依赖的公共资源依赖数组的示意图。参见图15,以入口JS文件绝对路径地址为关键字,将图14的公共资源依赖数组缓存至依赖关系中。
在步骤211中,将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问。
在步骤212中,将所述公共资源依赖数组中的公共资源以外联的script方式注入到所述网页的页面。
本公开实施例提供的技术方案,通过分析依赖树获取包的依赖关系,根据包的依赖关系控制打包的策略,从而统一CDN路径,提高缓存利用率,提升了用户体验,优化了页面加载性能,同时也可以动态控制包的更新版本,无需开发者手动干预,提高了开发者开发体验与效率,同时也提高了公共资源的缓存利用率。
下述为本公开装置实施例,可以用于执行本公开方法实施例。
图16是根据一示例性实施例示出的一种资源处理装置的框图。该装置可以采用各种方式来实施,例如在服务器中中实施装置的全部组件,或者,在服务器侧以耦合的方式实施装置中的组件;该装置可以通过软件、硬件或者两者的结合实现上述本公开涉及的方法,如图16所示,该资源处理装置包括:获取模块1601、解析模块1602、配置模块1603及注入模块1604,其中:
获取模块1601被配置为获取网页的入口嘉瓦脚本JS文件的依赖树;
解析模块1602被配置为解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;
配置模块1603被配置为将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
注入模块1604被配置为将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。
本公开实施例提供的装置能够用于执行图1所示实施例的技术方案,其执行方式和有益效果类似,此处不再赘述。
在一种可能的实施方式中,如图17所示,图16示出的资源处理装置还可以包括把获取模块1601配置成包括:获取子模块1701、解析子模块1702及查找子模块1703,其中:
获取子模块1701被配置为获取网页的入口JS文件的地址;
解析子模块1702被配置为将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
查找子模块1703被配置为依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
在一种可能的实施方式中,所述解析模块1602遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;过滤掉各所述叶子节点中的非公共资源;依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;将所述叶子节点数组中的叶子节点按照包名进行排序;将所述叶子节点数组插入到二维依赖数组中;遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组。
在一种可能的实施方式中,所述注入模块1604解析所述网页的第一超文本标记语言html内容,得到第一html语法树;遍历所述第一html语法树,获取到注入inject标签;解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;使用所生成的script节点替换对应的所述inject节点,得到第二html语法树;根据所述第二html语法树,生成所述网页的第二html内容。
图18是根据一示例性实施例示出的一种资源处理装置1800的框图,资源处理装置1800适用于服务器,资源处理装置1800包括:
处理器1801;
用于存储处理器可执行指令的存储器1802;
其中,处理器1801被配置为:
获取网页的入口嘉瓦脚本JS文件的依赖树;
解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;
将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。
在一个实施例中,处理器1801还被配置为:
获取网页的入口JS文件的地址;
将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
在一个实施例中,处理器1801还被配置为:
遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;
将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;
过滤掉各所述叶子节点中的非公共资源;
依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;
将所述叶子节点数组中的叶子节点按照包名进行排序;
将所述叶子节点数组插入到二维依赖数组中;
遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;
将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组。
在一个实施例中,处理器1801还被配置为:
解析所述网页的第一超文本标记语言html内容,得到第一html语法树;
遍历所述第一html语法树,获取到注入inject标签;
解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;
遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;
使用所生成的script节点替换对应的所述inject节点,得到第二html语法树;
根据所述第二html语法树,生成所述网页的第二html内容。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图19是根据一示例性实施例示出的一种资源处理装置的框图。例如,资源处理装置1900可以被提供为一服务器。资源处理装置1900包括处理组件1902,其进一步包括一个或多个处理器,以及由存储器1903所代表的存储器资源,用于存储可由处理组件1902的执行的指令,例如应用程序。存储器1903中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1902被配置为执行指令,以执行上述方法。
资源处理装置1900还可以包括一个电源组件1906被配置为执行资源处理装置1900的电源管理,一个有线或无线网络接口1905被配置为将装置1900连接到网络,和一个输入输出(I/O)接口1908。资源处理装置1900可以操作基于存储在存储器1903的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
在示例性实施例中,还提供了一种非临时性计算机可读存储介质,当存储介质中的指令由资源处理装置1900的处理器执行时,使得资源处理装置1900能够执行如下方法,方法包括:
获取网页的入口嘉瓦脚本JS文件的依赖树;
解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组;
将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面。
在一个实施例中,所述获取网页的入口嘉瓦脚本JS文件的依赖树,包括:
获取网页的入口JS文件的地址;
将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
在一个实施例中,所述解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组,包括:
遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;
将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;
过滤掉各所述叶子节点中的非公共资源;
依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;
将所述叶子节点数组中的叶子节点按照包名进行排序;
将所述叶子节点数组插入到二维依赖数组中;
遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;
将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组。
在一个实施例中,所述将所述依赖数组中的公共资源文件以外联的脚本script方式注入到所述网页的页面,包括:
解析所述网页的第一超文本标记语言html内容,得到第一html语法树;
遍历所述第一html语法树,获取到注入inject标签;
解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;
遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;
使用所生成的script节点替换对应的所述inject节点,得到第二html语法树;
根据所述第二html语法树,生成所述网页的第二html内容。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

Claims (6)

1.一种资源处理方法,其特征在于,所述方法包括:
获取网页的入口嘉瓦脚本JS文件的依赖树;
解析所述依赖树,得到入口JS文件所依赖的公共资源依赖数组;
将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面;
所述解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组,包括:
遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;
将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;
过滤掉各所述叶子节点中的非公共资源;
依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;
将所述叶子节点数组中的叶子节点按照包名进行排序;
将所述叶子节点数组插入到二维依赖数组中;
遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;
将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组;
所述将所述依赖数组中的公共资源文件以外联的脚本script方式注入到所述网页的页面,包括:
解析所述网页的第一超文本标记语言html内容,得到第一html语法树;
遍历所述第一html语法树,获取到注入inject标签;
解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;
遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;
使用所生成的script节点替换对应的inject节点,得到第二html语法树;
根据所述第二html语法树,生成所述网页的第二html内容。
2.根据权利要求1所述的方法,其特征在于,所述获取网页的入口嘉瓦脚本JS文件的依赖树,包括:
获取网页的入口JS文件的地址;
将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
3.一种资源处理装置,其特征在于,所述装置包括:
获取模块,用于获取网页的入口嘉瓦脚本JS文件的依赖树;
解析模块,用于解析所述依赖树,得到入口JS文件所依赖的公共资源依赖数组;
配置模块,用于将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
注入模块,用于将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面;
所述解析模块遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;过滤掉各所述叶子节点中的非公共资源;依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;将所述叶子节点数组中的叶子节点按照包名进行排序;将所述叶子节点数组插入到二维依赖数组中;遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组;
所述注入模块解析所述网页的第一超文本标记语言html内容,得到第一html语法树;遍历所述第一html语法树,获取到注入inject标签;解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;使用所生成的script节点替换对应的inject节点,得到第二html语法树;根据所述第二html语法树,生成所述网页的第二html内容。
4.根据权利要求3所述的装置,其特征在于,所述获取模块,包括:
获取子模块,用于获取网页的入口JS文件的地址;
解析子模块,用于将所述入口JS文件解析为语法树,获取所述入口JS文件的依赖;
查找子模块,用于依次递归遍历查找所述入口JS文件的依赖的子依赖,得到所述入口JS文件的依赖树。
5.一种资源处理装置,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
获取网页的入口嘉瓦脚本JS文件的依赖树;
解析所述依赖树,得到入口JS文件所依赖的公共资源依赖数组;
将所述公共资源依赖数组中的公共资源的访问方式配置成以全局变量的方式访问;
将所述公共资源依赖数组中的公共资源以外联的脚本script方式注入到所述网页的页面;
所述解析所述依赖树,得到所述入口JS文件所依赖的公共资源依赖数组,包括:
遍历所述依赖树,获取所有的叶子节点,得到叶子节点数组;
将所述依赖树过滤掉各所述叶子节点,得到过滤后的依赖树;
过滤掉各所述叶子节点中的非公共资源;
依次查找所述过滤后的依赖树中是否存在叶子节点;如果存在,则将该叶子节点从所述叶子节点数组中移除;
将所述叶子节点数组中的叶子节点按照包名进行排序;
将所述叶子节点数组插入到二维依赖数组中;
遍历所述二维依赖数组,获取每一个公共资源的版本号与内容分发网络CDN地址;
将所述二维依赖数组转换为一维依赖数组,得到所述入口JS文件所依赖的公共资源依赖数组;
所述将所述依赖数组中的公共资源文件以外联的脚本script方式注入到所述网页的页面,包括:
解析所述网页的第一超文本标记语言html内容,得到第一html语法树;
遍历所述第一html语法树,获取到注入inject标签;
解析所述网页的html页面中的inject标签,查找所述入口JS文件所依赖的公共资源依赖数组;
遍历所述公共资源依赖数组中的公共资源,依次生成对应的script节点;
使用所生成的script节点替换对应的inject节点,得到第二html语法树;
根据所述第二html语法树,生成所述网页的第二html内容。
6.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1-2中任一项所述方法的步骤。
CN201911044927.4A 2019-10-30 2019-10-30 资源处理方法及装置 Active CN110989992B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911044927.4A CN110989992B (zh) 2019-10-30 2019-10-30 资源处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911044927.4A CN110989992B (zh) 2019-10-30 2019-10-30 资源处理方法及装置

Publications (2)

Publication Number Publication Date
CN110989992A CN110989992A (zh) 2020-04-10
CN110989992B true CN110989992B (zh) 2023-10-31

Family

ID=70082658

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911044927.4A Active CN110989992B (zh) 2019-10-30 2019-10-30 资源处理方法及装置

Country Status (1)

Country Link
CN (1) CN110989992B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111596935A (zh) * 2020-04-27 2020-08-28 五八有限公司 一种脚本打包方法、装置、电子设备及存储介质
CN113590190A (zh) * 2021-06-30 2021-11-02 支付宝(杭州)信息技术有限公司 依赖树生成方法、装置及设备
CN114816558B (zh) * 2022-03-07 2023-06-30 深圳市九州安域科技有限公司 一种脚本注入方法、设备及计算机可读存储介质

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5295065A (en) * 1990-06-01 1994-03-15 Motorola, Inc. Resource-lot association coordinator
CN102081633A (zh) * 2009-11-27 2011-06-01 阿里巴巴集团控股有限公司 一种JavaScript文件的管理方法、装置和系统
CN103970845A (zh) * 2014-04-28 2014-08-06 南京邮电大学 基于程序切片技术的网页过滤方法
CN106528229A (zh) * 2016-11-03 2017-03-22 北京像素软件科技股份有限公司 一种游戏热更新方法及装置
CN106990976A (zh) * 2016-01-21 2017-07-28 阿里巴巴集团控股有限公司 一种网页脚本加载方法和装置
CN107451296A (zh) * 2017-08-21 2017-12-08 南京焦点领动云计算技术有限公司 一种基于组件的网站模块化渲染方法
CN109634654A (zh) * 2018-12-04 2019-04-16 北京马上慧科技术有限公司 一种页面封装方法、装置、系统、计算机设备和存储介质
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN110019055A (zh) * 2018-06-06 2019-07-16 平安普惠企业管理有限公司 无配置文件压缩方法、压缩装置、压缩终端及存储介质
CN110175844A (zh) * 2019-05-07 2019-08-27 深圳前海微众银行股份有限公司 一种区块链中智能合约的发布方法及装置
CN110245279A (zh) * 2019-05-06 2019-09-17 阿里巴巴集团控股有限公司 依赖树生成方法、装置、设备及存储介质

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5295065A (en) * 1990-06-01 1994-03-15 Motorola, Inc. Resource-lot association coordinator
CN102081633A (zh) * 2009-11-27 2011-06-01 阿里巴巴集团控股有限公司 一种JavaScript文件的管理方法、装置和系统
CN103970845A (zh) * 2014-04-28 2014-08-06 南京邮电大学 基于程序切片技术的网页过滤方法
CN106990976A (zh) * 2016-01-21 2017-07-28 阿里巴巴集团控股有限公司 一种网页脚本加载方法和装置
CN106528229A (zh) * 2016-11-03 2017-03-22 北京像素软件科技股份有限公司 一种游戏热更新方法及装置
CN107451296A (zh) * 2017-08-21 2017-12-08 南京焦点领动云计算技术有限公司 一种基于组件的网站模块化渲染方法
CN110019055A (zh) * 2018-06-06 2019-07-16 平安普惠企业管理有限公司 无配置文件压缩方法、压缩装置、压缩终端及存储介质
CN109634654A (zh) * 2018-12-04 2019-04-16 北京马上慧科技术有限公司 一种页面封装方法、装置、系统、计算机设备和存储介质
CN109857405A (zh) * 2019-02-02 2019-06-07 Oppo广东移动通信有限公司 应用程序安装包的编译方法、装置、存储介质及终端
CN110245279A (zh) * 2019-05-06 2019-09-17 阿里巴巴集团控股有限公司 依赖树生成方法、装置、设备及存储介质
CN110175844A (zh) * 2019-05-07 2019-08-27 深圳前海微众银行股份有限公司 一种区块链中智能合约的发布方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
赵益民 ; 叶宏 ; 杨明伟 ; .机载嵌入式系统构件间依赖关系处理方法研究.航空计算技术.2016,(第06期),全文. *

Also Published As

Publication number Publication date
CN110989992A (zh) 2020-04-10

Similar Documents

Publication Publication Date Title
CN110989992B (zh) 资源处理方法及装置
US10949178B1 (en) Method and system for decomposing a global application programming interface (API) graph into an application-specific API subgraph
US10452765B2 (en) Web content rewriting, including responses
CN111045678A (zh) 页面执行动态代码的方法、装置、设备及存储介质
US20130159968A1 (en) Language service provider management using application context
US9032378B2 (en) Available symbol set generation using untyped variable
Pagán et al. Querying large models efficiently
Zhu et al. Incremental learning of system log formats
CN107391528B (zh) 前端组件依赖信息搜索方法及设备
US20130159976A1 (en) Abstract syntax tree transformation
US20070266050A1 (en) Method, Device and System for Extending a Mark-Up Language
CN113419740A (zh) 程序数据流的分析方法、装置、电子设备及可读存储介质
CN116483850A (zh) 数据处理方法、装置、设备以及介质
CN115599386A (zh) 代码生成方法、装置、设备及存储介质
Goel et al. Jawa: Web Archival in the Era of {JavaScript}
US11392663B2 (en) Response based on browser engine
CN112835901A (zh) 文件存储方法及装置、计算机设备、计算机可读存储介质
CN117008920A (zh) 引擎系统、请求处理方法、装置、计算机设备及存储介质
CN112287266A (zh) 一种网页配置的处理方法及其装置、设备及存储介质
CN114816364A (zh) 基于Swagger动态生成范本文件的方法、装置及应用
CN115328353A (zh) 一种生成iconfont资源的方法、装置以及介质
CN114816437A (zh) 一种逆向生成Java实体类的方法、系统和设备
CN109471966B (zh) 一种自动获取目标数据源的方法及系统
Święcicki et al. How is server software configured? examining the structure of configuration files
CN111310002B (zh) 一种基于分发器和配置表组合的泛型爬虫系统

Legal Events

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