首页 > 其他分享 >uniGUI学习之禁用缓存(75)

uniGUI学习之禁用缓存(75)

时间:2023-12-26 14:07:43浏览次数:29  
标签:文件 缓存 uniGUI revalidate 代码 no js 75

引用了第三方js,css等文件,但是因为缓存的原因,修改后没有及时生效。
方法一:

在ServerModule的OnHTTPCommand事件中,加入以下代码

AResponseInfo.CacheControl := 'max-age=0, no-cache, no-store, must-revalidate, proxy-revalidate';

但是此方法有缺点,只支持exe模式,exe模式下所有的请求,无论是数据还是文件,都是由unigui服务器进行处理,而isapi模式下,文件请求都是由iis进行处理,所以没有执行到此代码,也就不会生效(iis可以设置自定义header来禁用缓存),同理HyperServer下也不生效,因为hy下文件处理由hy完成,同样没有执行到此代码。另外一个确定是会增加服务器压力,不缓存,那么所有文件在每次刷新的时候都会重新加载,就会增加服务器压力。解决方案是针对不同的文件进行禁用缓存,使用以下代码:

if ARequestInfo.URI = '/files/script.js' then
AResponseInfo.CacheControl := 'max-age=0, no-cache, no-store, must-revalidate, proxy-revalidate';

这样可以精确到单个文件进行缓存禁用。

TIPS:高级用法

可以在servermodule的onhttpcommand事件里增加一下代码

{$IFDEF DEBUG}
AResponseInfo.CacheControl := 'max-age=0, no-cache, no-store, must-revalidate, proxy-revalidate';
{$ENDIF}

这样可以在调试的时候不启用缓存,在调试过程中避免因为缓存、更换unigui版本、修改js/css文件等引起的报错。


 

方法二:

使用入口文件,新建一个js文件,写入以下代码

document.write("<script type='text/javascript' src='
/files/script.js?t=" + Date.now() + "'><\/script>");
多个文件向下追加即可,其他文件均由此文件进行引入,不在单独进行引入。此代码的作用是在引入文件的时候后面追加t=当前时间这样每次加载的url地址就都不一样也就不会使用缓存。此方法适用各种模式。

标签:文件,缓存,uniGUI,revalidate,代码,no,js,75
From: https://blog.51cto.com/u_15216366/8982806

相关文章

  • uniGUI学习之自定义Hint(74)
    默认Hint样式 procedureTMainForm.UniFormShow(Sender:TObject);vari:Integer;beginfori:=0toSelf.ControlCount-1dobeginwithTUniFormControl(Self.Controls[i])dobeginifHint<>''thenbeginShowHint......
  • mybatis的一级、二级缓存
    Mybatis的一级、二级缓存一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQLsession,默认也是采用PerpetualCach......
  • SpringBoot多级缓存
    SpringBoot实现项目更删改查后,会有新的问题需要解决,就是并发大的问题,一般而言,解决查询并发大的问题,常见的手段是为查询接口增加缓存,从而可以减轻持久层的压力。按照我们以往的经验,在查询接口中增加Redis缓存即可,将查询的结果数据存储到Redis中,执行查询时首先从Redis中命中,如果命中......
  • 看看 Asp.net core Webapi 项目如何优雅地使用分布式缓存
    前言缓存是提升程序性能必不可少的方法,Asp.netcore支持多级缓存配置,主要有客户端缓存、服务器端缓存,内存缓存和分布式缓存等。其中客户端缓和服务器端缓存在使用上都有比较大的限制,而内存缓和分布式缓存则比较灵活。分布式缓存是一种用于存储和管理数据的技术,它将数据存储在......
  • unigui显示websocket服务端向客户端发送信息【15】
    用WebSocket从服务端直接发送消息给all客户端。1、在ServerModule放TUniThreadTimer 2、timerevent:procedureTUniServerModule.UniThreadTimer1Timer(Sender:TObject);beginBroadcastMessage('update',[......
  • Python:diskcache实现基于文件的数据缓存
    diskcache是一个基于Sqlite文件的数据缓存如果在不想使用redis作为缓存的情况下,可以使用diskcache替代,减少对redis的依赖文档https://grantjenks.com/docs/diskcache/https://github.com/grantjenks/python-diskcachehttps://pypi.org/project/diskcache/安装pipinstall......
  • 缓存双写一致性之更新策略探讨
    缓存双写一致性之更新策略探讨面试题上面业务逻辑你用java代码如何写?你只要用缓存,就可能涉及到Redis缓存与数据库双存储双写,只要是双写就一定会有数据一致性的问题,那么如何解决?双写一致性,你先动缓存Redis还是数据库MySQL?Why?延时双删你做过吗?会有哪些问题?有这么一种情况,微服......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、Jdbc/mysql示例1、maven依赖2、实现1)、userbean2)、内部匿名类实现3)、lambda实现4)、普通继承RichSinkFunction实现5)、完整代码3、验证本文介绍了Flink将数据sink到mysql中,其实是通过jdbc来将数据sink到rmdb中,mysql是一个常见的数据库,故......
  • Spring 解决循环依赖为什么需要三级缓存,而不是两级缓存?
    ......
  • [群晖]DSM SSD Cache缓存寿命与S.M.A.R.T识别硬盘真伪
    群晖NASSSDCache缓存机制缓存技术不是群晖独有,但是群晖科技公司有其自己开发的缓存算法。这种缓存机制的主要目的是通过使用固态硬盘(SSD)的高速读写能力,来提高存储设备的数据处理速度和性能。具体来说,群晖SSDCache缓存机制的工作原理是,当存储设备接收到数据读写请求时,首先会检查......