一种原型发布平台上线感知的页面自动刷新方法、系统、设备及存储介质

来源:爱集微 #网页缓存一致性# #版本指纹# #前端自动刷新# #专利交底书#
26

一、发明名称

技术交底书

一种原型发布平台上线感知的页面自动刷新方法、系统、设备及存储介质

发明人

郭阔

联系方式

13261089257

邮箱

guokuo@ijiwei.com

专利类型

发明专利

一种原型发布平台上线感知的页面自动刷新方法、系统、设备及存储介质

二、发明内容概述

2.1 技术背景与应用场景

本发明涉及网页内容分发与缓存一致性技术领域,具体涉及平台托管页面在版本发布后的客户端上线感知与自动刷新技术。原型演示与评审平台将设计人员制作的原型页面托管为可供在线访问的静态页面集合,并通过门户页面向产品、研发、测试及其他协作人员提供项目浏览、原型播放、对比走查等能力。在实际协作过程中,门户页面、原型播放页面以及对比页面通常被长时间保持在浏览器的打开状态,其停留时长可达数小时乃至数日。

与此同时,平台侧的版本发布极为频繁:设计人员重新导出原型、整包更新、平台自身前端资源部署,以及注入到原型页面中用于实现评论与批注等能力的页面内脚本更新,都会改变平台对外提供的前端资源。若已打开的页面继续运行其加载时刻获得的旧版本前端资源,则用户实际观察到的行为与平台当前版本不一致,容易产生“问题已经修复但仍然复现”的误判,并带来反复的口头通知与人工刷新成本。

因此,需要一种能够使已经打开的页面自主感知平台上线动作、并在不打断用户的前提下自动进入新版本的机制。

2.2 现有技术存在的问题

  1. 依赖人工通知与手动刷新:上线后需要逐一通知协作人员刷新页面,沟通成本高;未刷新的页面持续运行旧版本,用户往往将旧版本已修复的问题作为新问题反复反馈。

  2. 采用短有效期强制过期策略:通过设置较短的缓存有效期或禁用缓存,使资源在下次加载时回源校验。该方式一方面牺牲页面加载性能,另一方面仅能作用于“下一次资源加载”,对于已经完成加载并持续运行的页面实例无法产生作用,已打开页面仍停留在旧版本。

  3. 采用长连接推送刷新指令:需要建设长连接基础设施并维护连接生命周期与订阅关系;服务重启或网络抖动期间连接断开还需额外的重连与补偿逻辑,对于内网工具型平台而言建设与维护成本偏高。

  4. 轮询业务数据接口获取版本信息:版本字段混杂在数据量较大的业务接口响应中,轮询开销大;并且该方式存在两类典型技术障碍——其一,若页面的协商缓存校验值未纳入版本信息,则刷新请求命中协商缓存而复用旧版本资源,页面再次巡检仍判定版本不一致并再次刷新,形成“检测到新版本—刷新—仍是旧版本—再检测—再刷新”的循环;其二,在存在多层嵌套框架的原型播放器中,外层页面与内层框架页面各自执行巡检,会引发整页刷新与局部刷新的重复触发,造成页面抖动。

  5. 由人工维护版本号:版本号容易漏改或忘记推进;并且当一次部署仅改动注入到受管页面中的页面内脚本而不改动样式与脚本资源目录时,人工维护的版本号不发生变化,已打开页面不会感知到该次上线,恰好遗漏了平台最频繁的迭代场景之一。

2.3 本发明要解决的技术问题

本发明主要解决以下技术问题:在页面被长时间保持在打开状态、且平台侧频繁发布新版本的情况下,如何使已打开的页面以极低的系统开销自动感知平台已上线新版本;如何在刷新后保证所获取的确为新版本资源,避免因协商缓存复用旧资源而形成反复刷新循环;如何在不引入长连接基础设施的前提下实现准实时的上线感知;在存在多层嵌套框架的页面中如何避免重复刷新;如何使正在页面内进行编辑且尚未提交的用户不被强制刷新打断且不丢失编辑内容;如何在刷新后恢复用户刷新前所处的视图现场;以及如何使版本标识随发布自动演进,无需人工维护且不遗漏仅改动页面内脚本的部署。

2.4 核心技术构思

本发明的核心在于:第一,由服务端根据平台前端资源集合中各资源文件的修改时间自动导出版本指纹,使发布这一动作必然推高指纹数值,从而无需人工维护版本号,且发布后指纹立即演进而无需重启服务;第二,将版本指纹通过两条通道下发至客户端——对于门户类顶层页面,将指纹作为字段挂载在其既有的业务轮询响应中,使该页面在不产生任何额外请求的前提下完成版本比对,对于独立页面以及被嵌入播放的受管页面,则由随页面一同下发的页面内脚本按其周期请求独立的轻量版本端点完成比对;第三,在页面下发时按请求将当前版本指纹替换写入页面中的版本占位符,使每一份下发的页面自带其生成时刻对应的版本,从而将本页版本与平台当前版本的比对转化为页面本地可完成的比较;第四,将版本指纹纳入页面及前端资源的协商缓存校验值计算,使版本变化必然导致校验值变化,进而使刷新请求必然回源取回新版本资源;第五,由最外层浏览上下文统一执行巡检与刷新决策,处于内层框架中的页面不执行巡检,从而以一次整页刷新带走全部嵌套层;第六,在执行刷新前先检测用户是否处于尚未提交的编辑状态,处于编辑状态时仅输出一次提示并推迟至后续巡检轮次执行,同时在刷新前将当前视图状态序列化写入页面地址,刷新完成后解析并恢复。

由此,原本只能依靠人工通知或长连接推送才能解决的“已打开页面停留在旧版本”问题,被转化为由页面自身以无状态轮询与本地比对即可完成的确定性判断,且该判断在协商缓存、嵌套框架、未提交编辑等干扰条件下仍然成立。

2.5 主要技术效果

  1. 平台发布新版本后,已打开的页面可在秒级至十余秒量级内自动进入新版本,无需人工通知与手动刷新。

  2. 版本端点响应体为字节级,且服务端对版本指纹的计算结果设置秒级短缓存,巡检产生的服务端开销可忽略;门户页面复用既有业务轮询,不产生额外请求。

  3. 版本指纹纳入协商缓存校验值计算,使刷新必然取回新版本资源,消除刷新后仍是旧版本所导致的反复刷新循环。

  4. 由最外层浏览上下文统一决策,多层嵌套框架页面仅刷新一次,避免整页刷新与局部刷新的重复触发与页面抖动。

  5. 处于编辑状态的用户不被强制刷新打断,编辑内容随做随存不丢失,退出编辑后的下一轮巡检自动完成刷新。

  6. 刷新后依据页面地址中的视图状态自动恢复至刷新前所处的项目、页面及浏览位置,用户视角为内容已更新而位置未改变。

  7. 版本指纹由资源修改时间自动导出,随发布自动演进,无需人工维护,且覆盖仅改动页面内脚本的部署场景。

  8. 门户类页面处于不可见状态时自动降低巡检频次,并在恢复可见时立即执行一次巡检;受管页面的页面内脚本在页面不可见时跳过本轮巡检,兼顾感知及时性与资源占用。

2.6 与相关常见方案的实质区别

  1. 与人工通知加手动刷新相比,本发明由页面自主完成版本比对与刷新,不依赖人员传达与用户操作,也不依赖发布方掌握页面的打开情况。

  2. 与短有效期强制过期策略相比,后者仅能影响尚未发生的资源加载,无法作用于已经加载完成并持续运行的页面实例;本发明通过页面携带版本与平台当前版本的持续比对,直接作用于已打开的页面实例,且不必牺牲正常加载性能。

  3. 与长连接推送方案相比,本发明服务端无需维持连接状态、订阅关系与重连逻辑,以无状态请求加服务端短缓存即可实现准实时感知,部署与运维成本显著更低。

  4. 与单纯的版本轮询相比,本发明进一步将版本指纹纳入协商缓存校验值计算,使刷新结果具备确定性,并通过最外层浏览上下文统一决策消除嵌套框架下的重复刷新,二者共同保证该轮询机制在真实的浏览器缓存与嵌套结构中可用。

  5. 与人工维护版本号或构建号相比,本发明的版本指纹由资源文件的修改时间自动导出,发布即演进、无需人工干预,且指纹采集范围覆盖样式资源目录、脚本资源目录以及注入到受管页面中的页面内脚本源文件,能够覆盖仅改动页面内脚本的上线场景。

2.7 实测数据与后续验证建议

在现有实施例中,对平台的前端资源执行一次模拟部署:处于空闲状态的门户页面在约八秒内完成自动刷新;原型播放页面在约二十秒内完成自动刷新,且重载后其页面内脚本即为新版本,未出现重复刷新。处于画布编辑状态时执行模拟部署,页面未执行刷新且仅提示一次,结束编辑后在下一轮巡检完成刷新。

在方案实施过程中实测并修正的问题包括:其一,页面注入内容的协商缓存校验值原先仅依据文件大小与文件修改时间计算,未纳入版本指纹,导致部署后刷新请求命中协商缓存而复用旧的页面内脚本,旧脚本再次判定版本不一致并再次刷新,实测形成反复刷新循环,将版本指纹纳入协商缓存校验值后该循环消除;其二,版本指纹曾以三十二位整数形式截断,毫秒级时间戳截断后溢出为负值导致指纹异常,已改为采用完整毫秒数值;其三,将页面内脚本文本摘要与版本指纹一并纳入页面协商缓存校验值后,校验值随注入内容变化而变化,可覆盖仅改动页面内脚本的部署。

后续正式申请或答复审查意见时,可进一步通过可重复测试补充上线感知时延分布、巡检请求在服务端请求总量中的占比、页面不可见降频前后的资源占用对比以及连续多次部署下的刷新次数等指标。未实际采集的数据不在本交底书中作估算。

三、技术方案的详细说明

3.1 系统总体架构

本发明可以由版本指纹生成模块、版本发布与注入模块、版本端点模块、巡检决策模块、协商缓存协同模块、编辑态保护模块以及现场恢复模块组成。各模块可以部署于同一服务器,也可以以服务化方式部署。

其中,版本指纹生成模块负责采集平台前端资源集合中各资源文件的修改时间并导出当前版本指纹,同时以服务端短缓存控制采集开销;版本发布与注入模块负责在页面下发时将当前版本指纹替换写入页面中的版本占位符,并可将版本指纹作为资源地址中的版本参数;版本端点模块负责提供独立于业务数据接口的轻量版本查询能力;巡检决策模块负责在页面内周期性获取平台当前版本指纹并与本页携带的版本比对,且仅在页面为最外层浏览上下文时执行刷新决策;协商缓存协同模块负责将版本指纹纳入页面及资源的协商缓存校验值计算;编辑态保护模块负责在触发刷新前检测用户是否处于尚未提交的编辑状态并决定是否推迟刷新;现场恢复模块负责在刷新前序列化当前视图状态并在刷新后恢复。

3.2 方法总体流程

  1. 服务端采集平台前端资源集合中各资源文件的修改时间,取其中的最大值作为当前版本指纹,并以服务端短缓存保存该指纹。

  2. 页面下发时,将当前版本指纹替换写入所下发页面中的版本占位符,使所下发页面携带其生成时刻对应的页面版本。

  3. 门户类顶层页面在其既有的业务轮询响应中获取平台当前版本指纹,并将该指纹与本页启动时获得的页面版本进行比对,不因此产生额外请求。

  4. 独立页面以及被嵌入播放的受管页面,由随页面一同下发的页面内脚本按其周期请求独立的轻量版本端点,将端点返回的版本指纹与本页携带的页面版本进行比对。

  5. 仅当页面为最外层浏览上下文时执行上述巡检与刷新决策;处于内层框架中的页面不执行巡检,由最外层浏览上下文统一执行整页刷新。

  6. 巡检发现版本不一致时,先检测用户是否处于尚未提交的编辑状态:处于空闲状态时执行整页刷新;处于编辑状态时仅输出一次提示,并在后续巡检轮次中重新检测。

  7. 门户类页面处于不可见状态时降低巡检频次,并在恢复可见时立即执行一次巡检;受管页面的页面内脚本在页面不可见时跳过本轮巡检。

  8. 刷新前将当前视图状态序列化写入页面地址的视图片段,刷新完成后解析该片段并恢复至刷新前的视图。

  9. 服务端在构造页面及前端资源的协商缓存校验值时纳入版本指纹,使版本变化必然导致校验值变化,从而使刷新请求不命中协商缓存而回源获取新版本资源。

  10. 一旦触发刷新即置位单次触发标志,避免同一版本差异在多轮巡检中重复触发刷新。

3.3 版本指纹的生成与演进

版本指纹由平台前端资源集合的修改时间导出。所述前端资源集合至少包括样式资源目录与脚本资源目录下的资源文件;在一次部署仅改动注入到受管页面中的页面内脚本而不改动上述目录时,为使该次部署同样能够推高版本指纹,还将页面内脚本的源文件纳入指纹采集范围。

指纹的取值为所述采集范围内各文件修改时间的最大值,优选采用完整的毫秒级数值,以避免数值截断造成的溢出或回绕。指纹采用惰性计算与服务端短缓存相结合的方式:每次取用时先检查缓存是否在有效期内,有效期内直接返回缓存值,超出有效期时重新遍历目录并读取文件状态。由此,发布新的资源文件必然推高指纹,且无需重启服务,也无需人工维护版本号。

3.4 轻量版本端点与分级巡检

版本端点为独立于业务数据接口的查询端点,其响应体仅包含当前版本指纹字段,响应长度为字节级。服务端对版本指纹的计算结果设置秒级短缓存(优选三秒),版本端点、页面下发与门户业务响应复用同一缓存结果,使高频巡检不会穿透到指纹计算所需的目录遍历与文件状态读取;版本端点响应本身不设置客户端缓存,以保证页面取到的始终是服务端当前认定的最新指纹。

巡检按页面类型分级:门户类顶层页面复用其既有的业务轮询,在业务响应中携带版本指纹,前台状态下巡检周期优选五秒,页面不可见时降为十五秒,并在恢复可见时立即执行一次巡检;独立页面以及受管页面内的注入脚本巡检周期优选十五秒,页面不可见时跳过本轮。

页面内脚本在执行巡检前先判断自身是否位于最外层浏览上下文,并判断是否已经置位单次触发标志;在端点不可达时放弃本轮巡检而不产生副作用;此外,页面内脚本在启动巡检前还校验版本占位符是否已被实际替换,在检测到版本占位符未被替换时不启动巡检,以避免页面下发过程中替换失败所导致的误触发刷新。

3.5 多层页面框架的刷新决策

原型播放器通常以多层嵌套框架组织:外层为平台页面或播放器壳,内层为被嵌入的原型页面。若外层与内层各自执行巡检,则一次上线会引发多次刷新,且局部刷新与整页刷新相互叠加造成抖动。

本发明规定仅由最外层浏览上下文执行巡检与刷新决策,处于内层框架中的页面在检测到自身并非最外层浏览上下文时不执行巡检。由此,一次版本变化仅触发一次整页刷新,该刷新同时带走全部嵌套层,内层页面随之获得新版本资源。

3.6 与协商缓存的协同

服务端在构造页面或资源的协商缓存校验值时,除文件大小与文件修改时间外,进一步纳入以下至少一项:页面注入内容的文本摘要、当前版本指纹、以及用于区分页面呈现模式的标记。由此,版本指纹发生变化时协商缓存校验值必然变化,客户端刷新时所携带的条件请求头与服务端当前校验值不匹配,服务端返回完整响应而非缓存命中指示,客户端由此取回新版本资源。

若协商缓存校验值不纳入版本指纹,则存在如下问题:页面刷新时请求命中协商缓存而复用旧版本资源,旧版本资源中的页面内脚本再次检测到版本不一致并再次触发刷新,而再次刷新仍命中协商缓存,从而形成反复刷新循环。

此外,对于样式与脚本等静态资源,可将版本指纹作为资源地址中的版本参数,使资源地址随版本变化而变化,从而在资源层面进一步避免缓存复用。上述两条路径可以单独使用,也可以组合使用。

3.7 编辑态检测与延迟刷新

巡检确定需要刷新时,先读取表征用户是否处于尚未提交的编辑状态的检测信号。所述检测信号可以由页面内维护的状态标志提供,例如画布编辑状态标志、表单脏数据标志或输入焦点状态,本发明不限定其具体实现。

处于空闲状态时,立即执行整页刷新。处于编辑状态时,不执行刷新,仅输出一次提示,并通过提示去重标志避免重复提示;在后续巡检轮次中重新读取该检测信号,待用户结束编辑后执行刷新。由于编辑内容采用随做随存的保存策略,推迟刷新不会造成编辑内容丢失。对于不存在编辑交互场景的受管页面,可以省略该检测步骤。

3.8 现场恢复

页面在视图切换过程中持续将当前视图状态序列化写入页面地址的视图片段,使刷新发生前页面地址已携带刷新前的视图状态。所述视图状态至少包括当前所处对象的类型与标识,例如项目标识、文件标识,或者项目标识与具体原型页面路径的组合;在需要时还可以包括浏览位置信息。

刷新完成后,页面在首次数据到位时解析所述视图片段并恢复至对应视图。由于标识中可能包含非 ASCII 字符,其在页面地址中以百分号编码形式存在,解析时先按原样匹配,匹配不到时再进行解码后匹配。当原型改版导致所述具体页面路径在新版本中不存在时,退回至该项目的入口视图而不是恢复失败。对于浏览位置,可以在渲染完成后的若干时间点分别执行一次还原,以应对异步渲染与内容重排造成的位置漂移。

3.9 可替代方案

版本指纹可以替换为资源内容哈希、构建号、文件清单摘要或者其他能够随资源变化而单调演进的取值。巡检可以由周期性请求替换为长连接推送,此时版本比对与后续刷新决策流程维持不变。编辑态的检测信号源可以替换。现场恢复的载体可以由页面地址中的视图片段替换为会话存储或本地存储。刷新粒度可以由整页刷新替换为模块级或资源级的局部替换,此时仍沿用版本指纹比对触发该局部替换。

该方法适用于任何服务端内容更新且客户端页面长时间保持打开的系统,包括但不限于文档协作平台、数据大屏、内网工具平台与在线演示平台。

四、具体实施例

4.1 实施例一:门户页面感知上线并自动刷新

门户页面启动时从下发内容中获得页面版本并保存。其后按五秒周期请求业务数据接口,该接口响应中携带平台当前版本指纹。某次轮询得到的版本指纹与本页保存的版本不一致,表明平台已完成一次部署。此时页面读取画布编辑状态标志,确认用户未处于编辑状态,遂将当前所处的项目与页面序列化写入页面地址的视图片段并执行整页刷新。刷新后页面解析该视图片段,回到刷新前的项目与页面,用户观察到内容已更新而位置未改变。若用户正处于画布编辑中,则仅提示一次,待结束编辑后的下一轮轮询完成刷新。

4.2 实施例二:原型播放页面内注入脚本的巡检与刷新

服务端在每次下发原型页面时,读取当前版本指纹并将其替换写入页面内脚本中的版本占位符,使该次下发的页面自带其生成时刻的版本;页面内脚本在启动巡检前还校验版本占位符是否已被实际替换,未被替换时不启动巡检,以避免替换失败导致的误触发刷新。页面加载后,页面内脚本按十五秒周期请求版本端点,将端点返回的版本与本页自带的版本比对。设计人员重新导出原型并触发部署后,版本指纹升高,页面内脚本在下一次巡检中判定版本不一致,置位单次触发标志并执行整页刷新。刷新后重新下发的页面中,页面内脚本已为新版本,其自带的版本与平台当前版本一致,不再触发刷新。

4.3 实施例三:多层嵌套框架播放器中的重复刷新消除

原型播放器以外层壳页面嵌套内层原型页面的方式呈现,两者均包含巡检逻辑。部署发生后,内层页面在执行巡检前判断自身并非最外层浏览上下文,因而不执行巡检与刷新;外层页面判定版本不一致并执行一次整页刷新。该刷新重新加载外层与全部内层页面,内层页面随之获得新版本资源。整个过程仅发生一次刷新,避免了局部刷新与整页刷新叠加所导致的页面抖动。

4.4 实施例四:协商缓存复用导致的反复刷新循环及其消除

在方案实施初期,页面的协商缓存校验值仅由文件大小与文件修改时间构成。部署后,页面内脚本检测到版本不一致并触发刷新,但刷新请求携带的条件请求头与服务端计算出的校验值一致,服务端返回缓存命中指示,浏览器复用本地缓存中的旧页面与旧页面内脚本;旧脚本再次检测到版本不一致并再次刷新,实测形成反复刷新循环。

将版本指纹纳入页面协商缓存校验值的计算后,部署使校验值发生变化,刷新请求的条件请求头不再匹配,服务端返回完整的新页面内容,页面内脚本随之更新为新版并停止触发刷新,循环消除。对于样式与脚本等静态资源,同时把版本指纹作为资源地址中的版本参数,使资源地址随版本变化,进一步避免缓存复用。

4.5 实施例五:编辑态保护下的延迟刷新

用户在门户中编辑画布内容且尚未结束编辑时,平台完成一次部署。巡检判定版本不一致后读取编辑状态标志,确认处于编辑状态,因而不执行刷新,仅输出一次平台已更新的提示。此后每轮巡检继续读取该标志;在用户结束编辑后的第一轮巡检中,标志转为非编辑状态,页面执行整页刷新并按视图片段恢复现场。由于画布编辑内容采用随做随存策略,推迟刷新未造成编辑内容丢失。

4.6 适用范围

本发明优选用于原型演示与评审平台中门户页面、原型播放页面与对比页面的上线感知刷新,也可扩展至其他满足以下条件的系统:其页面由服务端下发且包含前端资源集合;其页面被客户端长时间保持打开;服务端存在频繁的版本发布;以及服务端能够在页面下发时写入版本标识并在资源响应中控制协商缓存校验值。本发明不依赖特定的设计工具、特定的导出格式与特定的嵌套框架实现。

五、关键算法及实现方式

5.1 版本指纹计算

输入:资源目录集合 DIRS,注入脚本源文件集合 PINS,缓存有效期 TTL

  1. 若缓存命中且未超过 TTL,返回缓存中的指纹;

  2. 置最大值 max = 0;

  3. 对 DIRS 中各目录下的每个文件读取其修改时间,以较大者更新 max;

  4. 对 PINS 中各注入脚本源文件执行同样操作;

  5. 取 v = floor(max),采用完整数值而非截断为固定位宽整数;

  6. 写入缓存 { 取值时刻, v },并返回 v。

5.2 版本端点与服务端缓存

  1. 接收到版本查询请求;

  2. 调用版本指纹计算,命中短缓存时直接返回缓存值;

  3. 返回仅包含版本指纹字段的响应,响应长度为字节级。

5.3 页面版本注入

  1. 读取页面模板或页面内脚本文本;

  2. 取当前版本指纹 v;

  3. 将文本中的版本占位符全部替换为 v;

  4. 下发替换后的页面内容;

  5. 对于静态资源,将 v 作为资源地址中的版本参数一并下发。

5.4 巡检与刷新决策

  1. 读取本页自带版本 BOOT;

  2. 若本页并非最外层浏览上下文,则不执行本流程;

  3. 若页面处于不可见状态,则跳过本轮;

  4. 获取平台当前版本 CUR;

  5. 若 CUR 为空,或 CUR 等于 BOOT,结束本轮;

  6. 若已置位单次触发标志,结束本轮;

  7. 读取编辑状态标志:处于编辑状态时输出一次提示并结束本轮;

  8. 序列化当前视图状态至页面地址;

  9. 置位单次触发标志,并执行整页刷新。

5.5 协商缓存校验值构造

  1. 取文件大小 size 与文件修改时间 mtime;

  2. 取注入内容的文本摘要 inj、当前版本指纹 ver 以及页面模式标记 mode;

  3. 构造校验值 = "size-mtime-injver"(非默认呈现模式时为 "size-mtime-injver-mode"),其中 size 与 mtime 以十六进制表示并以分隔符连接,其后依次拼接注入内容的定长文本摘要 inj 与当前版本指纹 ver(摘要定长,可直接解析);当页面处于非默认呈现模式时,再追加模式标记 mode;

  4. 将校验值写入响应头;

  5. 请求中的条件请求头与该校验值一致时返回缓存命中指示,否则返回完整内容。

六、附图说明

图1为本发明的整体技术流程图,示出版本指纹生成、页面版本注入、分级巡检、版本比对、编辑态判断、刷新执行以及现场恢复之间的数据流转关系。

图2为版本指纹生成与服务端短缓存示意图,示出资源目录、注入脚本源文件与版本端点共享同一指纹计算结果的关系。

图3为多层嵌套框架页面的刷新决策示意图,示出最外层浏览上下文执行巡检与刷新、内层框架不参与巡检的关系。

图4为协商缓存协同前后对照图,示出未纳入版本指纹时形成“刷新—缓存命中—再次刷新”的循环,以及纳入版本指纹后一次刷新即取回新版本资源的过程。

图5为编辑态保护与现场恢复流程图,示出编辑态检测、提示去重、延迟刷新以及视图状态序列化与恢复的过程。

注:本交底书当前未包含附图,正式申请稿中需根据上述说明绘制图1至图5全部附图,重点突出图4所示的协商缓存协同机制;摘要附图建议选用图1或图4。

七、术语及上位表述对照

交底书术语

建议上位表述

说明

原型 / 原型页

平台托管的静态页面

不限定具体设计工具与导出方式

门户

顶层页面

承载项目浏览与编辑入口的最外层文档

播放器壳 / iframe

内层框架

不限定嵌套层数与具体标签类型

pin / 注入脚本

注入到受管页面中的页面内脚本

随页面一同下发并在页面内执行

版本指纹

由资源修改时间导出的版本标识

表征平台前端资源集合的当前状态

版本端点

轻量版本查询接口

独立于业务数据接口,响应仅含版本标识

巡检

页面内周期性版本比对

由页面自身发起,服务端无需维持连接状态

顶层窗口

最外层浏览上下文

用于统一执行刷新决策,内层框架不参与

编辑态

用户尚未提交的页面编辑状态

其检测信号源可替换

ETag

协商缓存校验值

用于条件请求的缓存校验标识

hash 现场

页面地址中的视图状态片段

载体可替换为会话存储或本地存储

版本占位符

页面中预留的版本标识替换标记

页面下发时替换为当前版本指纹

单次触发标志

阻止同一版本差异重复触发刷新的标志

巡检决策使用

可见性分级巡检

依据页面可见状态调整巡检频次或跳过巡检

兼顾感知及时性与资源占用

八、建议的权利要求书

  1. 一种原型发布平台上线感知的页面自动刷新方法,用于对平台托管的页面在所述平台发布新版本后的客户端更新,其特征在于,包括:服务端根据平台前端资源集合中各资源文件的修改时间,确定表征所述平台当前前端资源状态的版本指纹;响应于页面下发请求,将当前所述版本指纹写入所下发页面中的版本占位符,使所下发页面携带其生成时刻对应的页面版本;所述页面加载后,由所述页面周期性获取所述平台的当前版本指纹,并将所述当前版本指纹与所述页面携带的页面版本进行比对;在所述当前版本指纹与所述页面版本不一致时,触发所述页面执行刷新,以重新获取所述平台的新版本前端资源;其中,所述服务端在构造所述页面或所述前端资源的协商缓存校验值时纳入所述版本指纹,使所述版本指纹发生变化时所述协商缓存校验值相应变化,从而使所述刷新所发起的请求不命中协商缓存而回源获取新版本资源。

  2. 根据权利要求1所述的方法,其特征在于,所述服务端根据平台前端资源集合中各资源文件的修改时间确定版本指纹包括:取所述前端资源集合中各资源文件修改时间的最大值作为所述版本指纹;所述版本指纹采用惰性计算与服务端短缓存相结合的方式获得,在所述短缓存有效期内直接返回已缓存的版本指纹,超出所述短缓存有效期时重新遍历所述前端资源集合并读取文件修改时间。

  3. 根据权利要求1所述的方法,其特征在于,所述前端资源集合包括样式资源目录下的资源文件、脚本资源目录下的资源文件,以及注入到受管页面中的页面内脚本的源文件,所述受管页面为由所述平台托管并随页面下发被注入所述页面内脚本的页面;所述版本指纹的取值覆盖所述页面内脚本的源文件,使仅改动所述页面内脚本的部署同样能够改变所述版本指纹。

  4. 根据权利要求1所述的方法,其特征在于,所述版本指纹采用完整的毫秒级数值表示,以避免数值截断造成的溢出或回绕。

  5. 根据权利要求1所述的方法,其特征在于,所述周期性获取所述平台的当前版本指纹包括:对于门户类顶层页面,在其既有的业务轮询响应中获取携带的所述当前版本指纹,所述门户类顶层页面不因所述比对产生额外请求。

  6. 根据权利要求5所述的方法,其特征在于,所述门户类顶层页面在页面可见时以第一周期执行所述业务轮询,在页面不可见时将所述业务轮询的周期调整为大于所述第一周期的第二周期,并在页面由不可见恢复为可见时立即执行一次所述业务轮询。

  7. 根据权利要求1所述的方法,其特征在于,所述周期性获取所述平台的当前版本指纹包括:对于独立页面或者被嵌入播放的受管页面,由随页面一同下发的页面内脚本以预设周期请求独立于所述平台业务数据接口的版本端点,并从所述版本端点的响应中获取所述当前版本指纹;所述版本端点的响应仅包含所述当前版本指纹。

  8. 根据权利要求1所述的方法,其特征在于,所述页面在执行所述比对之前先判断自身是否为最外层浏览上下文;在所述页面并非最外层浏览上下文时,所述页面不执行所述比对与所述刷新,由处于最外层浏览上下文的页面统一执行整页刷新,以使一次版本变化仅触发一次刷新并同时更新全部内层框架中的页面。

  9. 根据权利要求7所述的方法,其特征在于,在所述页面处于不可见状态时跳过本轮比对;以及在所述版本端点不可达时放弃本轮比对且不产生副作用。

  10. 根据权利要求1所述的方法,其特征在于,在触发所述刷新之前置位单次触发标志,所述单次触发标志用于阻止同一版本差异在后续轮次中重复触发刷新。

  11. 根据权利要求1所述的方法,其特征在于,所述协商缓存校验值包括所述版本指纹,以及文件大小、文件修改时间、页面注入内容的文本摘要中的至少一项;当所述页面具有多种呈现模式时,所述协商缓存校验值还纳入用于区分所述呈现模式的标记。

  12. 根据权利要求1所述的方法,其特征在于,还包括:将所述版本指纹作为资源地址中的版本参数下发,使所述前端资源的资源地址随所述版本指纹变化而变化。

  13. 根据权利要求1所述的方法,其特征在于,在所述当前版本指纹与所述页面版本不一致时,还包括:读取表征用户是否处于尚未提交的编辑状态的检测信号;在所述检测信号表示处于编辑状态时,不执行所述刷新并输出一次提示,且在后续轮次中重新读取所述检测信号,待所述检测信号表示编辑结束后执行所述刷新。

  14. 根据权利要求13所述的方法,其特征在于,所述检测信号由页面内维护的状态标志提供,所述状态标志包括画布编辑状态标志、表单脏数据标志或者输入焦点状态中的至少一种。

  15. 根据权利要求1所述的方法,其特征在于,在执行所述刷新之前,将当前视图状态序列化写入页面地址的视图片段;在所述刷新完成后,解析所述视图片段并恢复至所述刷新前的视图;所述视图状态包括当前所处对象的类型与标识,所述标识包括项目标识、文件标识或者项目标识与页面路径的组合。

  16. 根据权利要求15所述的方法,其特征在于,所述解析所述视图片段包括:先按原样匹配所述标识,在匹配不到时对所述标识执行解码后再次匹配;以及在所述页面路径在当前版本中不存在时,退回至所述项目标识对应的入口视图。

  17. 根据权利要求1所述的方法,其特征在于,所述刷新包括整页刷新,或者包括由所述版本指纹比对触发的模块级或者资源级的局部替换。

  18. 根据权利要求7所述的方法,其特征在于,所述页面内脚本在以所述预设周期发起请求之前,还校验所下发页面中的版本占位符是否已被实际替换;在所述版本占位符未被替换时,不启动巡检,以避免页面下发过程中替换失败导致的误触发刷新。

  19. 一种原型发布平台上线感知的页面自动刷新系统,其特征在于,包括:版本指纹生成模块,用于根据平台前端资源集合中各资源文件的修改时间确定版本指纹并以服务端短缓存保存;版本发布与注入模块,用于在页面下发时将当前版本指纹写入所下发页面中的版本占位符;版本端点模块,用于提供独立于业务数据接口的版本查询能力;巡检决策模块,用于在页面内周期性获取平台当前版本指纹并与本页携带的页面版本比对,且仅在页面为最外层浏览上下文时执行刷新决策;协商缓存协同模块,用于将版本指纹纳入页面及前端资源的协商缓存校验值计算;编辑态保护模块,用于在触发刷新前检测用户是否处于尚未提交的编辑状态并决定是否推迟刷新;以及现场恢复模块,用于在刷新前序列化当前视图状态并在刷新后恢复。

  20. 一种电子设备,包括处理器和存储器,所述存储器中存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至18任一项所述的方法。

  21. 一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序在被处理器执行时,使所述处理器实现权利要求1至18任一项所述的方法。

九、摘要

本发明公开一种原型发布平台上线感知的页面自动刷新方法、系统、设备及存储介质。服务端根据前端资源集合中各资源文件的修改时间导出版本指纹,页面下发时将当前版本指纹写入页面中的版本占位符,使页面自带其生成时刻的版本;页面加载后周期性获取平台当前版本指纹并与之比对,门户类顶层页面复用既有业务轮询响应中的版本字段,独立页面与受管页面请求轻量版本端点。仅由最外层浏览上下文执行巡检与刷新决策,一次整页刷新带走全部嵌套层;协商缓存校验值纳入版本指纹,使刷新请求回源取回新版本资源,消除反复刷新循环;刷新前检测未提交编辑状态并推迟刷新,并将视图状态序列化至页面地址以便刷新后恢复现场。

——本文件由技术辅助工具协助补充完善;本内容为技术撰写辅助,不构成法律意见;依赖或提交前,请由合格的专利专业人士审阅。——

责编: 爱集微
来源:爱集微 #网页缓存一致性# #版本指纹# #前端自动刷新# #专利交底书#
THE END

*此内容为集微网原创,著作权归集微网所有,爱集微,爱原创

关闭
加载

PDF 加载中...