业务平台 EasyBPM(易实管理软件)有一个性能是模板打印的性能。就是能够应用一个 docx 格局的模板,输入一个 docx 格局的单据的文档。
打印的逻辑是先从服务端获取模板,如果没有对应的模板,就提醒先上传模板:
遇到的问题是,依照提醒上传模板之后,再次打印仍然会报没有模板。
缓存的问题
通过思考发现,可能的起因是因为应用了缓存。后端应用 Node + Express 进行动态资源的公布。通过 Express 公布的资源,默认会开启缓存。
所以当第一次去获取模板资源的时候,因为此时没有对应的模板,此时会跳转到 404 页面,返回给前端,前端解析 404 页面发现不是模板文件,就会提醒没有模板文件。
之后上传了模板文件到后端的动态资源目录,再次去获取模板资源的时候,因为此时曾经缓存的后果是 404 文件,所以前端获取的仍然是 404 页面,而不是模板文件,因而会持续提醒没有模板文件。
如果去掉缓存
要解决这个问题,就须要去掉模板文件的缓存性能。一般来说,在申请的 header 下面能够能够设置不应用缓存。
然而一个简略的形式是,给 url 地址加上工夫戳,比方如下代码:
var getTemplateFunction = function () {return `./print/${page.model.id} 打印模板.docx?time=${new Date().getTime()}`;
};
在前面加上 ”?time=${new Date().getTime()}” 之后,因为每次申请的 url 地址都不在一样,这个时候就不会应用缓存,而是总是获取最新的文件。这样就能够轻松解决了这个缓存的问题。
实际也是如此,加上工夫戳之后,上述问题就不在复现了。
缓存
无关缓存的原理和相干常识,强缓存,协商缓存,Cache Control,Expires,from disk cache 和 from memory cache,ETag 和 If-None-Match,Last-Modified 和 If-Modified-Since 等等,能够百度之,网上相干的介绍很多,此处不在赘述。
总结
其实想强调一点,底层认知还是很重要的,如果遇到这个问题,你至多要晓得缓存相干的常识,才可能想到有可能是缓存导致的问题。如果你都不晓得缓存相干原理和常识,预计就很难想到了。
EasyBPM(易施业务流程治理平台),是一个低代码业务平台。能够自定义物业表单,定义业务流程,审批流程,报表,权限等等。通过该平台能够组建 CRM,进销存,OA, 资产治理等业务管理平台。有趣味的能够关注。
更多优良内容,欢送关注公众号“易施管理软件 EasyBPM”。