文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1. 前言

GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不能被及时同步。为避免前端请求读取缓存,常见方法是在每一个请求后面加上一个随机生成的变量参数,这样可以保证每个请求都不会跟历史请求重复。但是,这样处理是不合理的,我们虽然避免了读取缓存,但是却会导致系统效率降低。

所以,我们要解决的问题应该是:只有当代码更新后,客户前端第一次触发的所有请求都应该不走缓存,而之后,相同请求缓存继续有效。

2.解决思路

核心思想为,在GIS的每次请求后面带上一个version参数,每次更新后version参数的值均发生变化,于是该version对应的任何请求,第一次均会重新从服务端读取最新数据,但是之后的请求由于version不再变化,缓存继续有效。

所以这里我们实际需要解决的问题变为了,如何能够自动化生成更新version。

3.实现方法

此方案主要针对前端version,所以我们要解决如何能够让该version自动赋值到前端JS代码中,而不是每次我们自己手动给一个version值。由于每次前端更新后,均需要使用ant将代码进行再次编译,所以我们的实现方法为:

a.在进行ant编译时生成时间戳变量,再将该变量直接写入到待打包的JS代码中。

b.前端所有JS代码获取时加上version变量参数。

4.补充一点:如果是数据更新了怎么办?

首先,我们将数据分为两种,一种是我们自己GIS业务库中的配置数据,一种是地理服务器中的数据(包括第三方的地理服务器)。如果这两种数据均有更新,我们如何做到前端及时同步?

4.1GIS业务配置库中的配置数据读取

先抛出解决方案:同样,所有数据类请求加上时间戳,让数据类请求均不走前端缓存。

但是,不走前端缓存并不代表不走后端缓存,而这里则是我们已经或者还需进一步优化的地方:业务库中的GIS基本配置项都会在业务服务器启动时读取到内存中,所以如果配置数据做了更新,传统方案上需要业务服务器重启才行,但是目前业务已经提供了数据重载的接口。

所以,当业务数据做了更新后,要么重启业务服务,要么在构建中点击数据重载(会加入到GIS构建中)。这样可以保证,所有的GIS业务配置类数据请求会进入到后台,但是后台中缓存的数据是最新数据,从而既保证数据最新又避免对数据库的压力。

4.2地理服务器中的数据更新

方案1:同样使用随机时间戳来确保每次请求均是最新的数据,此种方法比较简单通用。

方案2:将version概念引入,数据库中增加一个数据version配置,每次地理服务器有更新后对version进行修改,然后使用构建让业务服务器重读配置,前端请求GIS配置时获得数据version,在请求地理服务时带上该version。

建议先以方案1来进行,这样与4.1中的数据请求可以同步,代码上可以统一处理。如果要进行方案2,则需要工程知道地理服务器何时做了更新,然后再在配置中修改version,稍微增加了工程维护量。

5.总结

5.1为什么前端JS和后台数据不用统一的version确保更新

a.如果用统一version,则该version需要使用库中配置(或配置文件),但是JS文件的加载往往是在数据请求之前,如此无法保证在version获得之前的JS文件为最新文件。

b.数据的更新并不代表系统需要重新编译,所以针对数据的version无法和JS版本的version同步。

5.2方案总结

a.前端JS使用ANT编译自动生成版本号。

b.数据请求加上随机时间戳。

                          -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

        如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                             

WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法的更多相关文章

  1. 做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)

    做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个butt ...

  2. 做web项目时对代码修改后浏览器端不生效的应对方法(持续更新)

    做web项目时,经常会遇到修改了代码,但浏览器端没有生效,原因是多种多样的,我会根据我遇到的情况逐步更新解决办法 1.运行的时候采用debug模式,一般情况下使用项目部署按钮右边那个按钮下的tomca ...

  3. IDEA 中项目代码修改后不自动生效,需要执行 mvn clean install 才生效

    问题描述 之前项目运行好好的,代码修改完之后会自动编译,编程体验很好. 有一天发现每次修改代码后需要重新使用mvn clean install命令重新编译,异常麻烦. 检查了 IDEA 的配置,已经配 ...

  4. 系统中同时存在python2和python3时 pip有时候更新后会报错 解决安装的方法如下

    官网原链接:https://pip.pypa.io/en/stable/installing/ Installation Do I need to install pip? pip is alread ...

  5. 关于jdk环境变量配置成了1.6.0_39 32位jdk 的路径 cmd中java -version却还是显示 64位或者其他jdk 路径的解决方法

    其实是c盘或者其他盘的 jdk 安装的太多了,把其他的都卸载掉就行了

  6. vs2017更新后web项目部分后台代码类没有颜色,也没有自动提示输入功能

    vs2017有的版本更新后默认.net framework框架是.net framework4.6.1,将项目的.net framework框架更改为4.6.1,颜色和自动提示出现

  7. js代码从页面移植到文件里失效或js代码改动后不起作用的解决的方法

    近期在做关于站点的项目,总是发生这种问题 写的javascript代码在页面上没有问题,可是将js代码移植到.js的文件里,在页面上进行调用,总是出现失效等错误 另外改动后的js代码,又一次刷新网页仍 ...

  8. Xcode升级更新后,恢复cocoapods以及插件的方法

    今天将手机系统更新到iOS9.3了,在Xcode7.1上做真机调试,提示找不到适合的SDK,才知道必须要升级Xcode才行,于是升级Xcode到7.3. 升级之后遇到很多麻烦,cocoapods没有了 ...

  9. phpstorm 代码注释后,撤销某段代码的注释的,快捷键是什么?

    phpstorm 的代码注释有两种风格,一种是双斜杠,另一种是 /* ...  */风格,两者的快捷键都是开关式(即按第一次为注释,再按一次为撤销注释),快捷键如下: 1.双斜杠注释   Ctrl + ...

随机推荐

  1. Kali学习笔记42:SQL手工注入(4)

    前三篇文章都是在讲发现SQL注入漏洞 如何查询得到所有的信息 那么另一条思路还未尝试过:能否修改数据? 例如这样: '; update users set user='yiqing' where us ...

  2. [Swift]LeetCode519. 随机翻转矩阵 | Random Flip Matrix

    You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix where all ...

  3. [Swift]LeetCode712. 两个字符串的最小ASCII删除和 | Minimum ASCII Delete Sum for Two Strings

    Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...

  4. [Swift]LeetCode836. 矩形重叠 | Rectangle Overlap

    A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...

  5. git push每次提交都要输入用户名的解决方案

    前言 最近把代码从csdn转移到gitee后,每一次git push都需要输入用户名和密码,比较麻烦,那有没有一个办法可以去掉这个步骤呢? 原因 每次都需要输入用户名和密码是因为你采用的是https方 ...

  6. Java面向对象特征之封装

    package practice;/** * @功能 创建动物类,对动物的属性进行封装 * @author square 凉 * */public class Animal { /**  * 动物姓名 ...

  7. Xapian使用入门

    关键字:搜索引擎.Xapian 一篇拖了两三年的入门总结文章,今天发出来,一方面是自己的总结,另一方面是给自己和他人的备忘.读者需要对搜索引擎有初步了解,譬如了解倒排.term.doc.相似度打分等概 ...

  8. vue-cli中webpack配置详解

    vue-cli是构建vue单页应用的脚手架,命令行输入vue init <template-name> <project-name>从而自动生成的项目模板,比较常用的模板有we ...

  9. CentOS Too Many Open Files 解决

    问题 在使用 WRK 对应用服务进行压测的时候,提示 "too many open files" 信息,导致无法启动测试. 原因 CentOS 7.x 默认的打开文件数目限制为 1 ...

  10. linux-php5.6-安装sftp扩展

    一. 更新gc库,添加libssh2库 yum -y install libstdc libgomp cpp gcc libgfortran libssh2 libssh2-devel gcc-gfo ...