CN112306528B - 一种数据更新方法及装置 - Google Patents

一种数据更新方法及装置 Download PDF

Info

Publication number
CN112306528B
CN112306528B CN202011215451.9A CN202011215451A CN112306528B CN 112306528 B CN112306528 B CN 112306528B CN 202011215451 A CN202011215451 A CN 202011215451A CN 112306528 B CN112306528 B CN 112306528B
Authority
CN
China
Prior art keywords
compiled
module
hash value
content
client
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
CN202011215451.9A
Other languages
English (en)
Other versions
CN112306528A (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.)
Beijing Sohu New Media Information Technology Co Ltd
Original Assignee
Beijing Bodian Zhihe 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 Beijing Bodian Zhihe Technology Co ltd filed Critical Beijing Bodian Zhihe Technology Co ltd
Priority to CN202011215451.9A priority Critical patent/CN112306528B/zh
Publication of CN112306528A publication Critical patent/CN112306528A/zh
Application granted granted Critical
Publication of CN112306528B publication Critical patent/CN112306528B/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/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration 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)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本申请提供一种数据更新方法及装置,服务端从项目文件中获取对应待编译模块名称的模块;对模块进行编译,将生成的该模块的第一hash值和第一编译内容发送给客户端,客户端将接收到的模块的第一hash值和第一编译内容进行保存;当服务端监听到编译后的模块中的第一编译内容发生变化时,对编译后的模块进行重新编译,将重新编译的模块的第二hash值发送给客户端,客户端将第二hash值与第一hash值进行比较,若不一致,将第二hash值返回给服务端,服务端在接收到客户端返回的第二hash值时,将第二编译内容发送给客户端,客户端对接收到的第二编译内容进行运行实现数据更新。本发明,能够提高开发人员的工作效率。

Description

一种数据更新方法及装置
技术领域
本发明涉及计算机技术领域,更具体地说,涉及一种数据更新方法及装置。
背景技术
随着计算机技术的快速发展,前端开发的速度也越来越快。为了简化前端开发的复杂度,在本地开发前端时可以基于webpack打包工具以模块化的方式实现前端的维护和扩展。
目前利用webpack实现前端开发的过程具体为:利用包含热更新功能的webpack对从入口文件输入的项目文件进行依赖解析生成目标主文件,其中项目文件包括多个模块。利用包含热更新功能的webpack实现前端开发能够在不刷新页面的情况下查看依赖解析后完产生的效果,不对页面进行刷新能够避免未改动代码的模块对应的表单项的内容丢失,其中页面包含多个表单项。但是这种方式只有一个入口文件,即前端使用的开源框架为单页应用,且这种方式在对输入的项文件进行依赖解析生成目标主文件时会对项目文件中所有的模块的代码进行编译。当项目迭代到足够复杂时,该项目中的模块会随着项目的复杂度增多,每次改动代码webpack重新编译的时间会变长。如果开发人员在改动代码时只想验证页面中一个或者几个表单项,开发人员想要查看改动代码后产生的效果,需要等到所有模块的代码编译完成后才能查看改动代码后产生的效果,编译的时间长就会影响开发人员的工作效率。
因此,如何提供一种只对改动代码对应的模块进行编译的方式以提高开发人员的工作效率,是本申请亟待解决的问题。
发明内容
有鉴于此,本发明实施例提供一种数据更新方法及装置,以提高开发人员的工作效率为目的。
本发明第一方面公开一种数据更新方法,应用于服务端,所述方法包括:
获取至少一个待编译模块名称;
从项目文件中获取对应所述待编译模块名称的模块;
对所述模块进行编译,生成所述模块的第一hash值和第一编译内容,所述第一编译内容包括第一js文件和第一json文件,并将所述模块的第一hash值和所述第一编译内容发送给客户端;
监听编译后的模块中的所述第一编译内容是否发生变化;
若发生变化,对所述编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,所述第二编译内容包括第二js文件和第二json文件,并将所述第二hash值发送给客户端;
当接收到所述客户端返回的所述第二hash值时,将所述第二编译内容发送给所述客户端,使所述客户端运行所述第二编译内容。
可选的,所述获取至少一个待编译模块名称,包括:
获取命令行;
基于预先配置的webpack插件对命令行进行解析,确定是否解析出至少一个待编译模块名称;
若是,获取解析出的至少一个待编译模块名称;
若否,从预先设置的配置文件中获取所述至少一个待编译模块名称。
可选的,所述从项目文件中获取对应所述待编译模块名称的模块,包括:
利用预先配置的webpack插件和所述待编译模块名称对项目文件中的模块进行过滤;
获取所述项目文件中对应所述待编译模块名称的模块。
可选的,所述将所述第二编译内容发送给所述客户端,包括:
获取所述第二hash值对应的所述重新编译后的模块的绝对路径;
基于所述绝对路径获取对应所述重新编译后的模块的第二编译内容;
将所述第二编译内容发送给所述客户端。
本发明第二方面公开一种数据更新方法,应用于客户端,所述方法包括:
接收所述服务端发送的所述模块的第一hash值和第一编译内容,并将所述第一hash值和所述第一编译内容进行保存;
接收所述服务端发送的所述第二hash值,并将所述第二hash值和所述第一hash值进行比较;
若所述第二hash值与所述第一hash值不一致,将所述第二hash值返回给所述服务端;
接收所述服务端发送的所述第二编译内容,并运行所述第二编译内容。
本发明第三方面公开一种数据更新装置,应用于服务端,所述装置包括:
第一获取单元,用于获取至少一个待编译模块名称;
第二获取单元,用于从项目文件中获取对应所述待编译模块名称的模块;
第一编译单元,用于对所述模块进行编译,生成所述模块的第一hash值和第一编译内容,所述第一编译内容包括第一js文件和第一json文件,并将所述模块的第一hash值和所述第一编译内容发送给客户端;
监听单元,用于监听编译后的模块中的所述第一编译内容是否发生变化;
第二编译单元,用于若发生变化,对所述编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,所述第二编译内容包括第二js文件和第二json文件,并将所述第二hash值发送给客户端;
第一发送单元,用于当接收到所述客户端返回的所述第二hash值时,将所述第二编译内容发送给所述客户端,使所述客户端运行所述第二编译内容。
可选的,所述第一获取单元,包括:
命令行获取单元,用于获取命令行;
解析单元,用于基于预先配置的webpack插件对命令行进行解析,确定是否解析出至少一个待编译模块名称;
第三获取单元,用于若是,获取解析出的至少一个待编译模块名称;
第四获取单元,用于若否,从预先设置的配置文件中获取所述至少一个待编译模块名称。
可选的,所述第二获取单元,包括:
过滤单元,用于利用预先配置的webpack插件和所述待编译模块名称对项目文件中的模块进行过滤;
第五获取单元,用于获取所述项目文件中获取对应所述待编译模块名称的模块。
可选的,所述第二编译单元,包括:
绝对路径获取单元,用于获取所述第二hash值对应的所述重新编译后的模块的绝对路径;
第六获取单元,用于基于所述绝对路径获取对应所述重新编译后的模块的第二编译内容;
第二发送单元,用于将所述第二编译内容发送给所述客户端。
本发明第四方面公开一种数据更新装置,应用于客户端,所述装置包括:
第一接收单元,用于接收所述服务端发送的所述模块的第一hash值和第一编译内容,并将所述第一hash值和所述第一编译内容进行保存;
比较单元,用于接收所述服务端发送的所述第二hash值,并将所述第二hash值和所述第一hash值进行比较;
返回单元,用于若所述第二hash值与所述第一hash值不一致,将所述第二hash值返回给所述服务端;
运行单元,用于接收所述服务端发送的所述第二编译内容,并运行所述第二编译内容。
本发明提供一种数据更新方法及装置,通过从项目文件中获取对应待编码模块名称的模块,以便在编译时只对待编译模块名称对应的模块进行编译而不用对项目文件中所有的模块进行编译,进而减少编译时间;并且,在服务端监听到编译后的模块的第一编译内容发明变化时,对该编译后的模块进行重新编译,并将重新编译后的模块的第二hash值发送客户端,以便客户端在比对第一hash值和第二hash值不一致的情况下,将第二hash值发送给服务端,服务端在接收到第二hash值时将第二编译内容发送给客户端,以便客户端运行接收到的第二编译内容进而实现数据更新,通过服务端监听编译后的模块是否发生变化,只有在监听到发生时才对编译后的模块进行重新编译,并且只对发生变化的编译后的模块进行编译,进一步减少了编译时间,减少了开发人员等待改动代码后产生的效果的时间,进而提高开发人员的工作效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种数据更新方法的流程示意图;
图2为发明实施例提供的一种获取至少一个待编译模块名称的方法的流程示意图;
图3为本发明实施例提供的另一种数据更新方法的流程示意图;
图4为本发明实施例提供的另一种数据更新方法的流程示意图;
图5为本发明实施例提供的一种数据更新装置的结构示意图;
图6为本发明实施例提供的另一种数据更新装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
参见图1,示出了本发明实施例提供的一种数据更新方法的流程示意图,该数据更新方法具体包括以下步骤:
S101:服务端获取至少一个待编译模块名称。
在本申请实施例中,服务器有两种方式获取待编译模块名称,第一种,在获取命令行的情况下,通过获取到的命令行,并根据预先设置的webpack插件对命令行进行解析,若能够解析出至少一个待编译模块名称,则获取解析输出的至少一个待编译模块名称;若未能解析出至少一个待编译模块名称,从预先设置的配置文件中获取至少一个待编译模块名称。第二种,在未获取命令行的情况下,直接从预先设置的配置文件中获取至少一个待编译模块名称。
参见图2,示出了发明实施例提供的一种获取至少一个待编译模块名称的方法的流程示意图,该方法具体包括以下步骤:
S201:获取命令行。
在申请实施例中,以一级路由为粒度(即,一个模块为一个路由),在项目主入口配置根路由(即,提供一个入口文件)。其中,根路由为项目访问的根路径,根路径可以为www.focus.cn/。
在本申请实施例中,可以通过借助http模块服务,以及通过websocket建立服务端和客户端的长连接。在基于http模块启动服务后,基于websocket建立服务端和客户端的长连接,通过服务端确定访问根路径的项目,并获取与该项目匹配的命令行,以便判断与项目匹配的命令行是否携带有至少一个待编译模块的名称。
S202:基于预先设置的webpack插件对命令行进行解析,确定是否解析出至少一个待编译模块名称;若是,执行步骤S203;若否,执行步骤S204。
在本申请实施例中,预先设置有webpack插件,服务端在获取到命令行后,利用预先设置的webpack插件对所获取到的命令行进行解析,若能够解析出至少一个待编译模块名称,则获取解析出的至少一个待编译模块名称;若未能解析出至少一个待编译模块名称,执行步骤S204。
S203:获取解析出的至少一个待编译模块名称。
在本申请实施例中,若服务端利用预先设置的webpack插件能够从命令行中解析出至少一个待编译模块名称,通过代码(例如:process.argv)获取解析出的至少一个待编译模块名称。
S204:从预先设置的配置文件中获取至少一个待编译模块名称。
在本申请实施例中,针对每个项目而言,预先设置与该项目对应的配置文件。若利用预先设置的webpack插件未能从与项目对应的命令行中解析出至少一个待编译模块名称,从预先设置的与该项目对应的配置文件中获取至少一个待编译模块名称。
S102:服务端从项目文件中获取对应待编译模块名称的模块。
在本申请实施例中,服务端在确定访问根路径的项目后,还可以遍历所确定的项目的项目文件,确定该项目文件中所有可配置的模块;在获取到至少一个待编译模块名称后,利用预先配置的webpack插件和所获取的待编译模块名称对项目文件所有可配置的模块进行过滤,进而获取项目文件中对应所获取的待编译模块名称对应的模块。
比如,遍历项目文件确定该项目文件中所有可配置的模块一共有3个模块,且这3个模块对应的模块名称分别为模块1、模块2和模块3。若获取的待编译模块名称为模块1和模块2,利用预先设置的webpack插件将该项目文件中除模块1对应的模块和模块2对应的模块以外的模块进行过滤,即利用预先设置的webpack插件将项目文件中模块3对应的模块进行过滤,进而获取项目文件中模块1对应的模块和模块2对应的模块。
S103:服务端对模块进行编译,生成模块的第一hash值和第一编译内容,并将模块的第一hash值和第一编译内容发送给客户端;
在本申请实施例中,服务端在从项目文件中获取到待编译模块名称的模块后,对所获取到的模块进行编译,生成该模块的第一hash值和第一编译内容;通过websocket将生成的模块的第一hash值和第一编译内容发送给客户端,以便客户端将接收到的模块的第一hash值和第一编译内容进行存储。其中,第一编译内容包括第一js文件和json文件。
S104:客户端接收服务端发送的模块的第一hash值和第一编译内容,将模块的第一hash值和第一编译内容进行存储;
在本申请实施例中,客户端在接收到服务端发送的模块的第一hash值和第一编译内容后,将接收到的模块的第一hash值和第一编译内容进行存储。
S105:服务端监听编译后的模块中的第一编译内容是否发生变化;若发生变化,执行步骤S106;
在具体执行步骤S105的过程中,服务端通过监听编译后的模块中的第一编译内容是否发生变化,当服务端监听到编译后的模块中的第一编译内容发生变化时,对该编译后的模块进行重新编译。
在本申请实施例中,服务端确定编译后的模块的第一编译内容发生变化的方式可以为:当服务端监听得开发人员对编译后的模块中的第一js文件中的代码进行改动并保存时,确定编译后的模块的第一编译内容发生变化。有关于服务端确定编译后的模块的第一编译内容是否发生变化的方式,发明人可根据自己的需求进行设置,本申请实施例不加以限定。
S106:服务端对编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容;
在本申请实施例中,当服务端监听到编译后的模块的第一编译内容发生变化时,对该编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,以便将重新编译后的模块的第二hash值发给客户端。其中,第二编译内容包括第二js文件和第二json文件。
S107:服务端将第二hash值发送给客户端;
在本申请实施例中,服务端对第一编译内容发生变化的编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容后,将重新编译后的模块的第二hash值发给客户端。
S108:客户端接收服务端发送的第二hash值,并将第二hash值和第一hash值进行比较;若第一hash值和第二hash值不一致,执行步骤S108;
在本申请实施例中,客户端在接收到服务端发送的重新编译后的模块的第二hash值后,将接收到的第二hash值与预先存储的第一hash值进行比较,在第一hash值和第二hash值不一致的情况下,将第二hash值返回给服务端。
进一步的,在本申请实施例中,客户端在第二hash值与预先存储的第一hash值不一致的情况下,将该第二hash值替换预先存储的第一hash值,即将之前存储的第一hash值删除,并将该第二hash值进行存储。
S109:客户端将第二hash值返回给服务端;
在本申请实施例中,在第一hash值和第二hash值不一致的情况下,将第二hash值返回给服务端。
S110:服务端当接收客户端返回的第二hash值时,将第二编译内容发送给客户端;
在本申请实施例中,当服务端接收到客户端返回的第二hash值时,获取与接收到的第二hash值对应的重新编译后的模块的绝对路径,并基于所获取到的绝对路径获取对应重新编译后的模块的第二编译内容,进而通过websocket将所获取到的第二编译内容发送给客户端。其中,通过基于所获取到的绝对路径能够快速获取到对应重新编译后的模块的第二编译内容。
S111:客户端接收服务器发送的第二编译内容,并运行第二编译内容。
在本申请实施例中,当客户端接收服务端发送的第二编译内容后,运行所获取到的第二编译内容进而实现数据更新。
在本申请实施例中,本申请人发现,现有的热更新方式是客户端在第二hash值和预先存储的第一hash值不一致的情况下,通过ajax向服务端请求重新编译后的模块,在获取到服务端返回的重新编译后的模块,通过jsonp向服务端请求重新编译的模块的第二编译内容,在获取到第二编译内容后,运行所获取到的第二编译内容。现有的热更新方式客户端在第二hash值和预先存储的第一hash值不一致的情况下需要向服务端请求重新编译后的模块,只有在接收服务端返回的重新编译后的模块后,才能通过jsonp向服务端请求重新编译的模块的第二编译内容。本申请提供的热更新方式客户端在第二hash值和预先存储的第一hash值不一致的情况下,直接向服务端返回第二hash值,服务端在接收到第二hash值后直接通过websocket将重新编译的模块的第二编译内容发送给客户端,不需要通过客户端ajax向服务端请求重新编译后的模块,也不需要通过jsonp向服务端请求重新编译的模块的第二编译内容,提高了热更新的响应速度,进一步减少编译时间,进而提供开发人员工作效率。
本发明提供一种数据更新方法,通过从项目文件中获取对应待编码模块名称的模块,以便在编译时只对待编译模块名称对应的模块进行编译而不用对项目文件中所有的模块进行编译,进而减少编译时间;并且,在服务端监听到编译后的模块的第一编译内容发明变化时,对该编译后的模块进行重新编译,并将重新编译后的模块的第二hash值发送客户端,以便客户端在比对第一hash值和第二hash值不一致的情况下,将第二hash值发送给服务端,服务端在接收到第二hash值时将第二编译内容发送给客户端,以便客户端运行接收到的第二编译内容进而实现数据更新,通过服务端监听编译后的模块是否发生变化,只有在监听到发生时才对编译后的模块进行重新编译,并且只对发生变化的编译后的模块进行编译,进一步减少了编译时间,减少了开发人员等待改动代码后产生的效果的时间,进而提高开发人员的工作效率。
为了更好对上述内容进行理解,下面进行举例说明。
在基于http模块启动服务后,基于websocket建立服务端和客户端的长连接,通过服务端确定访问根路径的项目,并获取与该项目匹配的命令行;基于预先设置的webpack对所获取的命令行进行解析,若解析出的待编译模块名称为模块1,通过代码(例如:process.argv)获取模块1(待编译模块名称)。
若服务端遍历所确定的项目的项目文件确定该项目文件中所有可配置的模块一共有3个模块,且这3个模块对应的模块名称分别为第一模块对应的模块名称为模块1、第二模块对应的模块名称为模块2和第三模块对应的模块名称模块3。利用预先设置的webpack插件将该项目文件中除第一模块以外的模块进行过滤,即预先设置的webpack插件将项目文件中的第二模块和第三模块进行过滤,进而获取项目文件中的第一模块。
服务端对第一模块进行编译,生成第一模块的第一hash值和第一编译内容,并将编译后的第一模块的第一hash值和第一编译内容给客户端,以便客户端将接收的第一模块的第一hash值和第一编译内容进行保存。
服务端监听编译后的第一模块中的第一编译内容是否发生变化,当服务端监听到开发人员对编译后的第一模块中的js文件中的代码进行改动并保存时,确定编译后的第一模块中的第一编译内容发生变化,对编译后的第一模块进行重新编译,生成重新编译后的第一模块的第二hash值和第二编译内容,并将重新编译后的第一模块的第二hash值发送给客户端。
当客户端接收到服务端发送的重新编译后的第一模块的第二hash值后,将第一hash值和第二hash值进行比较,在第一hash值和第二hash值不一致的情况下,将该第二hash值返回给服务端。服务端在接收到客户端返回的第二hash值后,获取与接收到第二hash值对应的重新编译后的第一模块的绝对路径,并基于所获取的绝对路径获取对应重新编译后的第一模块的第二编译内容,进而将所获取的第二编译内容发送给客户端,以便客户端运行接收到的第二编译内容进而实现数据更新。
下面分别从服务端和客户端的角度对本发明实施例提供的数据更新方法进行介绍。
参见图3,示出了本发明实施例提供的一种数据更新方法的流程示意图,该数据更新方法适用于服务端,具体包括以下步骤:
S301:获取至少一个待编译模块名称。
在本申请实施例中,在基于http模块启动服务后,基于websocket建立服务端和客户端的长连接,通过服务端确定访问根路径的项目,并获取与该项目匹配的命令行;基于预先设置的webpack插件对所获取的命令行进行解析,确定是否解析出至少一个待编译模块名称;若是,获取解析出的至少一个待编译模块名称;若否,从与该项目对应的预先设置的配置文件中获取至少一个待编译模块名称。
S302:从项目文件中获取对应待编译模块名称的模块。
在本申请实施例中,在获取待编译模块名称的模块后,利用预先配置的webpack插件和所获取的待编译模块名称对项目文件所有可配置的模块进行过滤,进而获取项目文件中对应所获取的待编译模块名称对应的模块。
S303:对模块进行编译,生成模块的第一hash值和第一编译内容,并将模块的第一hash值和所述第一编译内容发送给客户端。
在本申请实施例中,第一编译内容包括第一js文件和json文件。
S304:监听编译后的模块中的第一编译内容是否发生变化;若发生变化,执行步骤S305。
在本申请实施例中,服务端通过监听编译后的模块中的第一编译内容是否发生变化,当服务端监听到编译后的模块中的第一编译内容发生变化时,对该编译后的模块进行重新编译。
S305:对编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,并将第二hash值发送给客户端。
在本申请实施例中,当服务端监听到编译后的模块的第一编译内容发生变化时,对该编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,并将重新编译后的模块的第二hash值发给客户端,以便客户端在接收到服务端发送的重新编译后的模块的第二hash值后,将接收到的第二hash值与预先存储的第一hash值进行比较,在第一hash值和第二hash值不一致的情况下,将第二hash值返回给服务端。其中,第二编译内容包括第二js文件和第二json文件。
S306:当接收到客户端返回的第二hash值时,将第二编译内容发送给客户端,使客户端运行第二编译内容。
在本申请实施例中,当服务端接收到客户端返回的第二hash值时,获取与接收到的第二hash值对应的重新编译后的模块的绝对路径,并基于所获取到的绝对路径获取对应重新编译后的模块的第二编译内容,进而通过websocket将所获取到的第二编译内容发送给客户端,以便客户端在接收服务端发送的第二编译内容后,运行所获取到的第二编译内容。
本发明实施例提供的一种数据更新方法,应用于服务器端,从项目文件中获取对应待编码模块名称的模块,以便在编译时只对待编译模块名称对应的模块进行编译而不用对项目文件中所有的模块进行编译,进而减少编译时间;并且,在监听到编译后的模块的第一编译内容发明变化时,对该编译后的模块进行重新编译,并将重新编译后的模块的第二hash值发送客户端,以便客户端在比对第一hash值和第二hash值不一致的情况下,将第二hash值发送给服务端,服务端在接收到第二hash值时将第二编译内容发送给客户端,以便客户端运行接收到的第二编译内容进而实现数据更新;通过监听编译后的模块是否发生变化,只有在监听到发生时才对编译后的模块进行重新编译,并且只对发生变化的编译后的模块进行编译,进一步减少了编译时间,减少了开发人员等待改动代码后产生的效果的时间,进而提高开发人员的工作效率。
参见图4,示出了本发明实施例提供的一种数据更新方法,该数据更新方法应用于客户端,具体包括以下步骤:
S401:接收服务端发送的模块的第一hash值和第一编译内容,并将第一hash值和第一编译内容进行保存。
在本申请实施例中,客户端在接收到服务端发送的模块的第一hash值和第一编译内容后,将接收到的模块的第一hash值和第一编译内容进行存储。
S402:接收服务端发送的第二hash值,并将第二hash值和第一hash值进行比较;若第二hash值和第一hash值一致,执行步骤S403。
在本申请实施例中,客户端在接收到服务端发送的重新编译后的模块的第二hash值后,将接收到的第二hash值与预先存储的第一hash值进行比较,在第一hash值和第二hash值不一致的情况下,将第二hash值返回给服务端。
S403:将第二hash值返回给服务端。
S404:接收服务端发送的第二编译内容,并运行第二编译内容。
在本申请实施例中,当客户端接收服务端发送的第二编译内容后,运行所获取到的第二编译内容进而实现数据更新。
本发明实施例提供一种数据更新方法,应用于客户端,当接收到服务端发送的重新编译的模块的第二hash值时,将接收到的第二hash值与预先存储的第一hash值进行比较,在第一hash值和第二hash值不一致的情况下,直接向服务端返回第二hash值;当接收到服务端返回的第二编译内容时,运行接收到第二编译内容,不需要通过ajax向服务端请求重新编译后的模块,也不需要通过jsonp向服务端请求重新编译的模块的第二编译内容,提高了热更新的响应速度,进一步减少编译时间,进而提供开发人员工作效率。
与上述本发明实施例公开的一种数据更新方法相对应,如图5所示,本发明实施例还提供了一种数据更新装置的结构示意图,该数据更新装置包括:
第一获取单元51,用于获取至少一个待编译模块名称;
第二获取单元52,用于从项目文件中获取对应待编译模块名称的模块;
第一编译单元53,用于对模块进行编译,生成模块的第一hash值和第一编译内容,第一编译内容包括第一js文件和第一json文件,并将模块的第一hash值和第一编译内容发送给客户端;
监听单元54,用于监听编译后的模块中的第一编译内容是否发生变化;
第二编译单元55,用于若发生变化,对编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,第二编译内容包括第二js文件和第二json文件,并将的第二hash值发送给客户端;
第一发送单元56,用于当接收到客户端返回的第二hash值时,将第二编译内容发送给客户端,使客户端运行第二编译内容。
上述本发明实施例公开的数据更新装置中各个单元具体的原理和执行过程,与上述本发明实施例图3公开的数据更新方法相同,可参见上述本发明实施例图3公开的数据更新方法中相应的部分,这里不再进行赘述。
本发明实施例提供一种数据更新装置,从项目文件中获取对应待编码模块名称的模块,以便在编译时只对待编译模块名称对应的模块进行编译而不用对项目文件中所有的模块进行编译,进而减少编译时间;并且,在监听到编译后的模块的第一编译内容发明变化时,对该编译后的模块进行重新编译,并将重新编译后的模块的第二hash值发送客户端,以便客户端在比对第一hash值和第二hash值不一致的情况下,将第二hash值发送给服务端,服务端在接收到第二hash值时将第二编译内容发送给客户端,以便客户端运行接收到的第二编译内容;通过监听编译后的模块是否发生变化,只有在监听到发生时才对编译后的模块进行重新编译,并且只对发生变化的编译后的模块进行编译,进一步减少了编译时间,减少了开发人员等待改动代码后产生的效果的时间,进而提高开发人员的工作效率。
优选的,第一获取单元,包括:
命令行获取单元,用于获取命令行;
解析单元,用于基于预先配置的webpack插件对命令行进行解析,确定是否解析出至少一个待编译模块名称;
第三获取单元,用于若是,获取解析出的至少一个待编译模块名称;
第四获取单元,用于若否,从预先设置的配置文件中获取至少一个待编译模块名称。
优选的,第二获取单元,包括:
过滤单元,用于利用预先配置的webpack插件和待编译模块名称对项目文件中的模块进行过滤;
第五获取单元,用于获取项目文件中获取对应待编译模块名称的模块。
优选的,第二编译单元,包括:
绝对路径获取单元,用于获取第二hash值对应的重新编译后的模块的绝对路径;
第六获取单元,用于基于绝对路径获取对应重新编译后的模块的第二编译内容;
第二发送单元,用于将第二编译内容发送给客户端。
与上述本发明实施例公开的一种数据更新方法相对应,如图6所示,本发明实施例还提供了另一种数据更新装置的结构示意图,该数据更新装置包括:
第一接收单元61,用于接收服务端发送的模块的第一hash值和第一编译内容,并将第一hash值和第一编译内容进行保存;
比较单元62,用于接收服务端发送的第二hash值,并将第二hash值和第一hash值进行比较;
返回单元63,用于若第二hash值与第一hash值不一致,将第二hash值返回给服务端;
运行单元64,用于接收服务端发送的第二编译内容,并运行第二编译内容。
上述本发明实施例公开的数据更新装置中各个单元具体的原理和执行过程,与上述本发明实施例图4公开的数据更新方法相同,可参见上述本发明实施例图4公开的数据更新方法中相应的部分,这里不再进行赘述。
本发明实施例提供的一种数据更新装置,当接收到服务端发送的重新编译的模块的第二hash值时,将接收到的第二hash值与预先存储的第一hash值进行比较,在第一hash值和第二hash值不一致的情况下,直接向服务端返回第二hash值;当接收到服务端返回的第二编译内容时,运行接收到第二编译内容,不需要通过ajax向服务端请求重新编译后的模块,也不需要通过jsonp向服务端请求重新编译的模块的第二编译内容,提高了热更新的响应速度,进一步减少编译时间,进而提供开发人员工作效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种数据更新方法,其特征在于,应用于服务端,所述方法包括:
获取至少一个待编译模块名称;其中,所述获取至少一个待编译模块名称,包括:获取命令行;基于预先配置的webpack插件对命令行进行解析,确定是否解析出至少一个待编译模块名称;若是,获取解析出的至少一个待编译模块名称;若否,从预先设置的配置文件中获取所述至少一个待编译模块名称;
从项目文件中获取对应所述待编译模块名称的模块;
对所述模块进行编译,生成所述模块的第一hash值和第一编译内容,所述第一编译内容包括第一js文件和第一json文件,并将所述模块的第一hash值和所述第一编译内容发送给客户端;
监听编译后的模块中的所述第一编译内容是否发生变化;
若发生变化,对所述编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,所述第二编译内容包括第二js文件和第二json文件,并将所述第二hash值发送给客户端;
当接收到所述客户端返回的所述第二hash值时,将所述第二编译内容发送给所述客户端,使所述客户端运行所述第二编译内容。
2.根据权利要求1所述的方法,其特征在于,所述从项目文件中获取对应所述待编译模块名称的模块,包括:
利用预先配置的webpack插件和所述待编译模块名称对项目文件中的模块进行过滤;
获取所述项目文件中对应所述待编译模块名称的模块。
3.根据权利要求1所述的方法,其特征在于,所述将所述第二编译内容发送给所述客户端,包括:
获取所述第二hash值对应的所述重新编译后的模块的绝对路径;
基于所述绝对路径获取对应所述重新编译后的模块的第二编译内容;
将所述第二编译内容发送给所述客户端。
4.一种数据更新方法,其特征在于,应用于客户端,所述方法包括:
接收服务端发送的模块的第一hash值和第一编译内容,并将所述第一hash值和所述第一编译内容进行保存;
接收所述服务端发送的第二hash值,并将所述第二hash值和所述第一hash值进行比较;
若所述第二hash值与所述第一hash值不一致,将所述第二hash值返回给所述服务端;
接收所述服务端发送的第二编译内容,并运行所述第二编译内容;其中,所述第二hash值和所述第二编译内容为所述服务端在监听编译后的模块中的第一编译内容发生变化时,对所述编译后的模块进行重新编译得到。
5.一种数据更新装置,其特征在于,应用于服务端,所述装置包括:
第一获取单元,用于获取至少一个待编译模块名称;其中,所述第一获取单元,包括:命令行获取单元,用于获取命令行;解析单元,用于基于预先配置的webpack插件对命令行进行解析,确定是否解析出至少一个待编译模块名称;第三获取单元,用于若是,获取解析出的至少一个待编译模块名称;第四获取单元,用于若否,从预先设置的配置文件中获取所述至少一个待编译模块名称;
第二获取单元,用于从项目文件中获取对应所述待编译模块名称的模块;
第一编译单元,用于对所述模块进行编译,生成所述模块的第一hash值和第一编译内容,所述第一编译内容包括第一js文件和第一json文件,并将所述模块的第一hash值和所述第一编译内容发送给客户端;
监听单元,用于监听编译后的模块中的所述第一编译内容是否发生变化;
第二编译单元,用于若发生变化,对所述编译后的模块进行重新编译,生成重新编译后的模块的第二hash值和第二编译内容,所述第二编译内容包括第二js文件和第二json文件,并将所述第二hash值发送给客户端;
第一发送单元,用于当接收到所述客户端返回的所述第二hash值时,将所述第二编译内容发送给所述客户端,使所述客户端运行所述第二编译内容。
6.根据权利要求5所述的装置,其特征在于,所述第二获取单元,包括:
过滤单元,用于利用预先配置的webpack插件和所述待编译模块名称对项目文件中的模块进行过滤;
第五获取单元,用于获取所述项目文件中获取对应所述待编译模块名称的模块。
7.根据权利要求5所述的装置,其特征在于,所述第二编译单元,包括:
绝对路径获取单元,用于获取所述第二hash值对应的所述重新编译后的模块的绝对路径;
第六获取单元,用于基于所述绝对路径获取对应所述重新编译后的模块的第二编译内容;
第二发送单元,用于将所述第二编译内容发送给所述客户端。
8.一种数据更新装置,其特征在于,应用于客户端,所述装置包括:
第一接收单元,用于接收服务端发送的模块的第一hash值和第一编译内容,并将所述第一hash值和所述第一编译内容进行保存;
比较单元,用于接收所述服务端发送的第二hash值,并将所述第二hash值和所述第一hash值进行比较;
返回单元,用于若所述第二hash值与所述第一hash值不一致,将所述第二hash值返回给所述服务端;
运行单元,用于接收所述服务端发送的第二编译内容,并运行所述第二编译内容;其中,所述第二hash值和所述第二编译内容为所述服务端在监听编译后的模块中的第一编译内容发生变化时,对所述编译后的模块进行重新编译得到。
CN202011215451.9A 2020-11-04 2020-11-04 一种数据更新方法及装置 Active CN112306528B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011215451.9A CN112306528B (zh) 2020-11-04 2020-11-04 一种数据更新方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011215451.9A CN112306528B (zh) 2020-11-04 2020-11-04 一种数据更新方法及装置

Publications (2)

Publication Number Publication Date
CN112306528A CN112306528A (zh) 2021-02-02
CN112306528B true CN112306528B (zh) 2023-12-08

Family

ID=74325551

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011215451.9A Active CN112306528B (zh) 2020-11-04 2020-11-04 一种数据更新方法及装置

Country Status (1)

Country Link
CN (1) CN112306528B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112990167B (zh) * 2021-05-19 2021-08-10 北京焦点新干线信息技术有限公司 图像处理方法及装置、存储介质及电子设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017000592A1 (zh) * 2015-06-30 2017-01-05 中兴通讯股份有限公司 数据处理方法、装置及系统
CN107704234A (zh) * 2017-08-22 2018-02-16 北京三快在线科技有限公司 前端工程构建方法、装置、电子设备及可读存储介质
CN108536431A (zh) * 2018-04-04 2018-09-14 浙江小泰科技有限公司 一种全局命令行创建前端项目方法及系统
CN110209458A (zh) * 2019-06-06 2019-09-06 广州小鹏汽车科技有限公司 一种窗口绘制方法及装置
CN110231935A (zh) * 2019-06-12 2019-09-13 上海达梦数据库有限公司 一种脚本执行和更新的方法、装置、设备和存储介质
CN110309451A (zh) * 2018-03-02 2019-10-08 拉扎斯网络科技(上海)有限公司 一种web预加载页面的生成方法及装置
CN111443921A (zh) * 2020-03-27 2020-07-24 中国平安财产保险股份有限公司 web前端项目的分包部署方法、系统和计算机设备
CN111581569A (zh) * 2020-04-01 2020-08-25 车智互联(北京)科技有限公司 一种网页资源更新方法及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017000592A1 (zh) * 2015-06-30 2017-01-05 中兴通讯股份有限公司 数据处理方法、装置及系统
CN107704234A (zh) * 2017-08-22 2018-02-16 北京三快在线科技有限公司 前端工程构建方法、装置、电子设备及可读存储介质
CN110309451A (zh) * 2018-03-02 2019-10-08 拉扎斯网络科技(上海)有限公司 一种web预加载页面的生成方法及装置
CN108536431A (zh) * 2018-04-04 2018-09-14 浙江小泰科技有限公司 一种全局命令行创建前端项目方法及系统
CN110209458A (zh) * 2019-06-06 2019-09-06 广州小鹏汽车科技有限公司 一种窗口绘制方法及装置
CN110231935A (zh) * 2019-06-12 2019-09-13 上海达梦数据库有限公司 一种脚本执行和更新的方法、装置、设备和存储介质
CN111443921A (zh) * 2020-03-27 2020-07-24 中国平安财产保险股份有限公司 web前端项目的分包部署方法、系统和计算机设备
CN111581569A (zh) * 2020-04-01 2020-08-25 车智互联(北京)科技有限公司 一种网页资源更新方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Webpack DevServer;Mohamed Bouzid;《Webpack for Beginners》;79-95 *
Windows Shellcode自动构建方法研究;朱帅 等;《信息网络安全》(第04期);15-25 *
基于模块化的前端开发框架的研究与实现;杨婷;《中国优秀硕士学位论文全文数据库 信息科技辑》;I138-821 *

Also Published As

Publication number Publication date
CN112306528A (zh) 2021-02-02

Similar Documents

Publication Publication Date Title
US10740215B2 (en) System and method for implementing an API validator tool
Horton et al. Dockerizeme: Automatic inference of environment dependencies for python code snippets
US11150874B2 (en) API specification generation
US11050820B2 (en) Cloud sharing system
US8782613B2 (en) Optimizing applications using source code patterns and performance analysis
CN110659057B (zh) 应用程序热更新方法、装置、存储介质及计算机设备
US10055205B2 (en) Collaborative development of software programs based on service invocations
US10838701B2 (en) Computer speed via metadata-based business rule interpreter
KR20180063240A (ko) 클라우드 기반 컴퓨팅 환경에서 인프라스트럭처를 구축, 최적화, 및 시행하는 시스템 및 방법
US20200117587A1 (en) Log File Analysis
CN110231956B (zh) 应用程序版本构建的方法、系统及装置
CN112306528B (zh) 一种数据更新方法及装置
CN107908406A (zh) web项目穿透性自动更新部署的方法
US20130036108A1 (en) Method and system for assisting users with operating network devices
Lv et al. Potential risk detection system of hyperledger fabric smart contract based on static analysis
CN116523457A (zh) 基于业务流程的工作流处理方法、装置、设备及存储介质
EP3789882A1 (en) Automatic configuration of logging infrastructure for software deployments using source code
CN116132139A (zh) 剧本执行方法、装置、设备、存储介质及程序产品
JP2010267266A (ja) 試験支援装置および試験支援方法
CN110175043A (zh) 协议接口代码版本更新通知的生成方法和装置
CN111459492A (zh) Dubbo服务接口兼容性检测方法、装置、存储介质及设备
CN115422225A (zh) 分布式事务处理方法及事务管理器、中间件、系统
CN115113869A (zh) 基于浏览器的在线网页开发方法及装置
CN114185928A (zh) 通用接口对接系统、方法、设备及存储介质
KR102015545B1 (ko) 소스 코드 변경이 미치는 영향도를 분석하기 위한 시스템

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20231113

Address after: 100190 901-1, Floor 9, Building 3, No. 2 Academy South Road, Haidian District, Beijing

Applicant after: Beijing Bodian Zhihe Technology Co.,Ltd.

Address before: 100190 1001-3, 10th floor, building 3, No.2 Academy of Sciences South Road, Haidian District, Beijing

Applicant before: BEIJING JIAODIAN XINGANXIAN INFORMATION TECHNOLOGY CO.,LTD.

GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20240812

Address after: Room 1201, 12th Floor, Building 3, No. 2 Science Academy South Road, Haidian District, Beijing, 100084

Patentee after: BEIJING SOHU NEW MEDIA INFORMATION TECHNOLOGY Co.,Ltd.

Country or region after: China

Address before: 100190 901-1, Floor 9, Building 3, No. 2 Academy South Road, Haidian District, Beijing

Patentee before: Beijing Bodian Zhihe Technology Co.,Ltd.

Country or region before: China