一种软件更新方法、装置、介质及设备与流程

文档序号:26003510发布日期:2021-07-23 21:21阅读:86来源:国知局
一种软件更新方法、装置、介质及设备与流程

本公开涉及软件更新技术领域,更为具体来说,本公开涉及一种软件更新方法、装置、介质及设备。



背景技术:

目前在前端在产品开发过程中,每个版本都需要对涉及到的javascript文件进行修改,但是往往在修改的过程中,需求涉及的改动量在大部分的情况下只是修改现有文件内其中一小部分,而对于用户来说,无论修改多少都是需要全量下载最新的文件后才可以使用的,这样在频繁发版更新文件的情况下,用户可能需要消耗较多的流量来进行文件下载。



技术实现要素:

为解决现有技术的软件更新方法存在用户可能需要消耗较多的流量的技术问题,本公开提供了一种软件更新方法,包括:

对javascript文件按照预设规则进行文件重新命名,其中,重新命名后的javascript文件包含版本号信息;

利用浏览器的本地存储对重新命名后的文件对应的javascript文件完整代码内容进行缓存;

接收用户发起的获取javascript文件请求,按照预设规则获取所需文件名和版本号信息;

判断更新文件和旧版本文件的版本号信息的差值是否超过预设阈值;

如果差值超过预设阈值的版本号信息的数值,则将需要更新的文件全部数据返回给浏览器不再进行增量计算处理;

如果差值小于等于预设阈值的版本号信息的数值,则继续进行文件增量内容计算;

读取待更新版本文件全部代码内容,连同旧版本文件内容,进行滚动查找比较;

接收滚动查找比较输出的结果,进行逆向解析并进行软件更新拼接。

进一步,所述对javascript文件按照预设规则进行文件重新命名中,每次对所述javascript文件更新后对当前版本号信息进行加一处理。

进一步,所述利用浏览器的本地存储对重新命名后的文件对应的javascript文件完整代码内容进行缓存具体包括:

利用html5判断当前浏览器内的本地存储中有无缓存;

如果没有缓存则请求全部javascript文件;

如果有缓存则取出当前缓存的javascript文件的代码版本号将其按照预定的格式拼接为需要增量升级的文件名并在浏览器内的本地存储中进行缓存。

进一步,所述文件增量内容计算具体包括:

通过服务端浏览器读取旧版本javascript文件的全部代码数据,并对所述代码数据进行处理。

进一步,所述对所述代码数据进行处理的过程具体包括:

读取旧版本javascript文件所有内容,去除文件中的所有的换行符;

将文件代码内容按照既定长度分段读取,每段既定长度设为20,读取过程中每段索引值等于当前代码段首字符在整个文件内容内所在位置的索引;

通过计算当前代码段内容以计算md5值;

将所有计算得到的md5值,连同对应的代码段索引缓存在一个map结果集中,其中,所述结果集为一个以md5为键值的数组,数组内存放具有相同md5的代码段索引值。

进一步,所述读取待更新版本文件全部代码内容,连同旧版本文件内容,进行滚动查找比较具体包括:

读取更新文件所有内容,去除所有的换行符;

将文件代码内容按照既定长度分段读取,每段既定长度设为20,读取过程中每段索引值等于当前代码段首字符在整个文件内容内所在位置的索引;

计算当前代码段内容的md5值;

查看当前代码段的md5值在旧文件结果集中是否有记录;

如果没有以该md5值为键值的数据,则暂存当前代码段首字符,同时将代码开始位置往前移动一个字符,重复从读取更新文件内容的步骤开始滚动匹配;

如果有以该md5值为键值的数据,则取出对应的值,根据当前代码段的索引值,取数组中离该索引差值的绝对值最小的那个索引数据作为查找结果。

将暂存的所有代码字符串取出,保存到结果集中;

将查找的索引值保存到结果集中;

重复上述流程直到所有的更新代码匹配完毕得到完整的结果集;

全部匹配完毕后将结果集内的索引值进一步合并;

将合并处理后的结果集返回给浏览器。

进一步,所述逆向解析流程具体包括:

创建一个新的变量拼接所有的代码段并对遍历到信息进行判断,根据不同的遍历到的信息返回不同的结果:

如果遍历到的结果是数组,则取出第一个数值,在缓存的旧版本代码内找到对应的索引位置;取出第二个数值,将该数值乘以既定长度作为截取长度;以二者为依据将在本地缓存的旧版本对应的位置截取代码段拼接到变量中;

如果遍历到的结果是单索引值,根据索引值和既定长度,在本地缓存的旧代码中取出对应的代码段拼接到变量中;

如果遍历到的结果是字符串,直接将代码字符串拼接在代码段中。

进一步,还包括:

将软件更新拼接后的完整代码和代码版本号缓存至浏览器的本地存储中,用于下次软件更新。

为实现上述技术目的,本公开还能够提供一种软件更新装置,包括:

重命名模块,用于对javascript文件按照预设规则进行文件重新命名,其中,重新命名后的javascript文件包含版本号信息;

存储模块,用于利用浏览器的本地存储对重新命名后的文件对应的javascript文件完整代码内容进行缓存;

接收模块,用于接收用户发起的获取javascript文件请求,按照预设规则获取所需文件名和版本号信息;

判断模块,用于判断更新文件和旧版本文件的版本号信息的差值是否超过预设阈值;

如果差值超过预设阈值的版本号信息的数值,则将需要更新的文件全部数据返回给浏览器不再进行增量计算处理;

如果差值小于等于预设阈值的版本号信息的数值,则继续进行文件增量内容计算;

滚动查找模块,用于读取待更新版本文件全部代码内容,连同旧版本文件内容,进行滚动查找比较;

逆解析模块,用于接收滚动查找比较输出的结果,进行逆向解析并进行软件更新拼接。

为实现上述技术目的,本公开还能够提供一种计算机存储介质,其上存储有计算机程序,计算机程序被处理器执行时用于实现上述的软件更新方法的步骤。

为实现上述技术目的,本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述的软件更新方法的步骤。

本公开的有益效果为:

(1)本公开以版本号为依据增加了缓存处理,在版本号不变的情况下,无需二次请求文件下载

(2)本公开对于改动文件实现了只下载文件的增量内容,极大的减少了流量浪费。。

附图说明

图1示出了本公开的实施例1的流程示意图;

图2示出了本公开的实施例2的结构示意图;

图3示出了本公开的实施例4的结构示意图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在附图中示出了根据本公开实施例的各种结构示意图。这些图并非是按比例绘制的,其中为了清楚表达的目的,放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状以及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。

实施例一:

如图1所示:

本公开提供了一种软件更新方法,包括:

s101:对javascript文件按照预设规则进行文件重新命名,其中,重新命名后的javascript文件包含版本号信息;

s102:利用浏览器的本地存储对重新命名后的文件对应的javascript文件完整代码内容进行缓存;

s103:接收用户发起的获取javascript文件请求,按照预设规则获取所需文件名和版本号信息;

s104:判断更新文件和旧版本文件的版本号信息的差值是否超过预设阈值;

如果差值超过预设阈值的版本号信息的数值,则将需要更新的文件全部数据返回给浏览器不再进行增量计算处理;

如果差值小于等于预设阈值的版本号信息的数值,则继续进行文件增量内容计算;

s105:读取待更新版本文件全部代码内容,连同旧版本文件内容,进行滚动查找比较;

s106:接收滚动查找比较输出的结果,进行逆向解析并进行软件更新拼接。

进一步,所述对javascript文件按照预设规则进行文件重新命名中,每次对所述javascript文件更新后对当前版本号信息进行加一处理。

进一步,所述利用浏览器的本地存储对重新命名后的文件对应的javascript文件完整代码内容进行缓存具体包括:

利用html5判断当前浏览器内的本地存储中有无缓存;

如果没有缓存则请求全部javascript文件;

如果有缓存则取出当前缓存的javascript文件的代码版本号将其按照预定的格式拼接为需要增量升级的文件名并在浏览器内的本地存储中进行缓存。

进一步,所述文件增量内容计算具体包括:

通过服务端浏览器读取旧版本javascript文件的全部代码数据,并对所述代码数据进行处理。

进一步,所述对所述代码数据进行处理的过程具体包括:

读取旧版本javascript文件所有内容,去除文件中的所有的换行符;

将文件代码内容按照既定长度分段读取,每段既定长度设为20,读取过程中每段索引值等于当前代码段首字符在整个文件内容内所在位置的索引;

通过计算当前代码段内容以计算md5值;

将所有计算得到的md5值,连同对应的代码段索引缓存在一个map结果集中,其中,所述结果集为一个以md5为键值的数组,数组内存放具有相同md5的代码段索引值。

进一步,所述读取待更新版本文件全部代码内容,连同旧版本文件内容,进行滚动查找比较具体包括:

读取更新文件所有内容,去除所有的换行符;

将文件代码内容按照既定长度分段读取,每段既定长度设为20,读取过程中每段索引值等于当前代码段首字符在整个文件内容内所在位置的索引;

计算当前代码段内容的md5值;

查看当前代码段的md5值在旧文件结果集中是否有记录;

如果没有以该md5值为键值的数据,则暂存当前代码段首字符,同时将代码开始位置往前移动一个字符,重复从读取更新文件内容的步骤开始滚动匹配;

如果有以该md5值为键值的数据,则取出对应的值,根据当前代码段的索引值,取数组中离该索引差值的绝对值最小的那个索引数据作为查找结果。

将暂存的所有代码字符串取出,保存到结果集中;

将查找的索引值保存到结果集中;

重复上述流程直到所有的更新代码匹配完毕得到完整的结果集;

全部匹配完毕后将结果集内的索引值进一步合并;

将合并处理后的结果集返回给浏览器。

进一步,所述逆向解析流程具体包括:

创建一个新的变量拼接所有的代码段并对遍历到信息进行判断,根据不同的遍历到的信息返回不同的结果:

如果遍历到的结果是数组,则取出第一个数值,在缓存的旧版本代码内找到对应的索引位置;取出第二个数值,将该数值乘以既定长度作为截取长度;以二者为依据将在本地缓存的旧版本对应的位置截取代码段拼接到变量中;

如果遍历到的结果是单索引值,根据索引值和既定长度,在本地缓存的旧代码中取出对应的代码段拼接到变量中;

如果遍历到的结果是字符串,直接将代码字符串拼接在代码段中。

进一步,还包括:

将软件更新拼接后的完整代码和代码版本号缓存至浏览器的本地存储中,用于下次软件更新。

下面结合一个具体实施例详解本公开的实施例一的技术方案:

s1:对javascript文件按照预设规则进行重新文件命名,其中,重新命名后的javascript文件包含版本号信息,每次对所述javascript文件更新后在当前版本号信息进行加一处理。

具体地,在文件系统的前后端约定javascript文件命名规则:文件名-版本号.js,首个版本的版本号都为1.0.0,例如:

文件名:pulgin-1.0.0.js,每更新一次文件,版本号增1,命名为:pulgin-1.0.1.js,

每次开发完成js文件后将文件升级一个版本号,上传至服务端。

s2:利用浏览器的localstorage进行版本号和对应的js文件完整代码内容缓存

localstorage:

在html5中,新加入了一个localstorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localstorage中一般浏览器支持的是5m大小,这个在不同的浏览器中localstorage会有所不同。

具体地,利用h5判断当前浏览器内的localstorage中有无缓存;

如果没有缓存则请求全量javascript文件;

如果有缓存则取出当前缓存的代码版本号将其按照约定的格式拼接需要增量升级的文件名。

s3:用户发起获取javascript文件请求,服务端javaservlet在接收到用户发起的请求后,按照预设规则获取所需文件名和版本号信息。

具体地,其中,按如下规则获取所需文件名和版本:

(1)按”/”分割请求url,得到url分割数组,取分割数组中最后一个位置的数据,即当前请求需要获取的javascript文件名

(2)判断请求javascript文件名内是否包含下划线’_’符号

(3)如果没有下划线符号,则请求的是全量文件,将对应版本的javascript文件进行全量文件数据返回给浏览器

(4)如果含有下划线符号,将文件名按中划线’-’和下划线’_’进行二次分割,得到旧版本文件版本号和升级的文件版本号,依次进行后续增量升级步骤。

s4:在服务端比较升级文件和旧文件的版本号信息的差值,

如果超出了预设阈值的版本号信息的数值,则将需要升级的文件全量数据返回给浏览器不再进行增量计算处理;

如果差值小于等于预设阈值,则进行后续文件增量内容计算的步骤。

s5:对javascript文件进行文件增量内容计算:

具体地,首先需要通过服务端读取旧版本javascript文件的全部代码数据,并进行相关处理

其中,对所述javascript文件的处理过程具体包括:

(1)读取旧版本javascript文件所有内容,去除文件中的所有的换行符。

(2)将文件代码内容按照既定长度分段读取,每段既定长度chunklength设为20,每段索引值等于当前代码段首字符在整个文件内容内所在位置索引,每次读取一段。

(3)计算当前代码段内容来计算md5值

(4)所有计算的md5值,连同对应的代码段索引缓存在一个map结果集中,该结果集以md5为key,value是一个数组,数组内存放具有相同md5的代码段索引值。

格式如下所示:

s6:服务端读取待升级版本文件全部代码内容,连同旧版本文件内容结果集,进行滚动查找比较

具体的滚动查找流程如下:

s6.1:读取文件所有内容,去除所有的换行符。

s6.2:将新文件代码内容按照既定长度分段读取,每段既定长度chunklength设为20,每段索引值等于当前代码段首字符在整个文件内容内所在位置索引,每次读取一段。

s6.3:计算当前代码段内容的md5值

s6.4:查看当前代码段的md5值在旧文件结果集中是否有记录

s6.5:如果没有以该md5值为key的数据,则暂存当前代码段首字符,同时将代码开始位置往前移动一个字符,重复从步骤s6.1开始滚动匹配s6.6:如果有以该md5值为key的数据,则取出对应的value,即旧文件的代码段索引数组。根据当前代码段的索引值,取数组中离该索引差值的绝对值最小的那个索引数据作为查找结果。

s6.7:将第s6.4步暂存的所有代码字符串取出,保存到结果集arraylist中

s6.8:将第s6.5步查找的索引值保存到结果集arraylist中。

s6.9:重复流程直到所有的代码端匹配完毕得到完整的结果集。

s6.10:全部匹配完毕后将结果集内的索引值进一步合并,也即连续相邻的索引合并为一个具有两个数据的数组,第一个值为旧文件的代码段索引,第二个值为连续的代码段个数。

s6.11:服务端将合并处理后的结果集返回给浏览器。

举一个简化的例子,如下述所示:

(1)假设旧文件代码全部内容为:,

functiononerror(){

returntrue;

};

(2)新文件代码全部内容为:

functiononerror1(){

returnfalse;

};

(3)假定chunklength的长度为5,那么旧文件分割后的代码段结果集为

(4)滚动查找比较流程结束后,得到的结果集arraylist为

[0,5,10,‘r1(){’,20,‘nfals’,30]

(5)进一步合并,得到的结果集为

[[0,3],‘r1(){’,20,‘nfals’,30]

s7:html5端接收后,遍历结果集开始进行逆向解析流程

其中,所述逆向解析流程具体包括:

创建一个新的变量拼接所有的代码段并对所述遍历到信息进行判断:

如果遍历到的结果是数组,则取出第一个数值,在缓存的旧版本代码内找到对应的索引位置;取出第二个数值,将该数值乘以既定段长度chunklength作为截取长度;以二者为依据将在本地缓存的旧版本对应的位置截取代码段拼接到变量中。

如果遍历到的结果是单索引值,根据索引值和既定段长度chunklength,在本地缓存的旧代码中取出对应的代码段拼接到变量中。

如果遍历到的结果是字符串,直接将代码字符串拼接在代码段中。

s8:拼接完成后,将完整代码和代码版本号缓存至浏览器的localstorage中,待下次更新使用。

s9:html5端调用eval函数解释执行变量中拼接的完整代码,整个流程执行结束。

eval()是程序语言中的函数,功能是获取返回值,不同语言大同小异,函数原型是返回值=eval(codestring),如果eval函数在执行时遇到错误,则抛出异常给调用者。

实施例二:

如图2所示,

本公开还能够提供一种软件更新装置,包括:

重命名模块201,用于对javascript文件按照预设规则进行文件重新命名,其中,重新命名后的javascript文件包含版本号信息;

存储模块202,用于利用浏览器的本地存储对重新命名后的文件对应的javascript文件完整代码内容进行缓存;

接收模块203,用于接收用户发起的获取javascript文件请求,按照预设规则获取所需文件名和版本号信息;

判断模块204,用于判断更新文件和旧版本文件的版本号信息的差值是否超过预设阈值;

如果差值超过预设阈值的版本号信息的数值,则将需要更新的文件全部数据返回给浏览器不再进行增量计算处理;

如果差值小于等于预设阈值的版本号信息的数值,则继续进行文件增量内容计算;

滚动查找模块205,用于读取待更新版本文件全部代码内容,连同旧版本文件内容,进行滚动查找比较;

逆解析模块206,用于接收滚动查找比较输出的结果,进行逆向解析并进行软件更新拼接。

其中,所述的重命名模块201依次与所述存储模块202、所述接收模块203、所述判断模块204、所述滚动查找模块205以及所述逆解析模块206相连接。

实施例三:

本公开还能够提供一种计算机存储介质,其上存储有计算机程序,计算机程序被处理器执行时用于实现上述的软件更新方法的步骤。

本公开的计算机存储介质可以采用半导体存储器或磁芯存储器实现。

半导体存储器,主要用于计算机的半导体存储元件主要有mos和双极型两种。mos元件集成度高、工艺简单但速度较慢。双极型元件工艺复杂、功耗大、集成度低但速度快。nmos和cmos问世后,使mos存储器在半导体存储器中开始占主要地位。nmos速度快,如英特尔公司的1k位静态随机存储器的存取时间为45ns。而cmos耗电省,4k位的cmos静态存储器存取时间为300ns。上述半导体存储器都是随机存取存储器(ram),即在工作过程中可随机进行读出和写入新内容。而半导体只读存储器(rom)在工作过程中可随机读出但不能写入,它用来存放已固化好的程序和数据。rom又分为不可改写的熔断丝式只读存储器──prom和可改写的只读存储器eprom两种。

磁芯存储器,具有成本低,可靠性高的特点,且有20多年的实际使用经验。70年代中期以前广泛使用磁芯存储器作为主存储器。其存储容量可达10位以上,存取时间最快为300ns。国际上典型的磁芯存储器容量为4ms~8mb,存取周期为1.0~1.5μs。在半导体存储快速发展取代磁芯存储器作为主存储器的位置之后,磁芯存储器仍然可以作为大容量扩充存储器而得到应用。

实施例四:

本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述的软件更新方法的步骤。

图3为一个实施例中电子设备的内部结构示意图。如图3所示,该电子设备包括通过系统总线连接的处理器、存储介质、存储器和网络接口。其中,该计算机设备的存储介质存储有操作系统、数据库和计算机可读指令,数据库中可存储有控件信息序列,该计算机可读指令被处理器执行时,可使得处理器实现一种软件更新方法。该电设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该计算机设备的存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行一种软件更新方法。该计算机设备的网络接口用于与终端连接通信。本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

该电子设备包括但不限于智能电话、计算机、平板电脑、可穿戴智能设备、人工智能设备、移动电源等。

所述处理器在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(centralprocessingunit,cpu)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。所述处理器是所述电子设备的控制核心(controlunit),利用各种接口和线路连接整个电子设备的各个部件,通过运行或执行存储在所述存储器内的程序或者模块(例如执行远端数据读写程序等),以及调用存储在所述存储器内的数据,以执行电子设备的各种功能和处理数据。

所述总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。所述总线被设置为实现所述存储器以及至少一个处理器等之间的连接通信。

图3仅示出了具有部件的电子设备,本领域技术人员可以理解的是,图3示出的结构并不构成对所述电子设备的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。

例如,尽管未示出,所述电子设备还可以包括给各个部件供电的电源(比如电池),优选地,电源可以通过电源管理装置与所述至少一个处理器逻辑相连,从而通过电源管理装置实现充电管理、放电管理、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备还可以包括多种传感器、蓝牙模块、wi-fi模块等,在此不再赘述。

进一步地,所述电子设备还可以包括网络接口,可选地,所述网络接口可以包括有线接口和/或无线接口(如wi-fi接口、蓝牙接口等),通常用于在该电子设备与其他电子设备之间建立通信连接。

可选地,该电子设备还可以包括用户接口,用户接口可以是显示器(display)、输入单元(比如键盘(keyboard)),可选地,用户接口还可以是标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备中处理的信息以及用于显示可视化的用户界面。

进一步地,所述计算机可用存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等。

在本发明所提供的几个实施例中,应该理解到,所揭露的设备,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。本公开的范围由所附权利要求及其等价物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

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