整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

更好的缓存技术可以提高网站响应速度

务器端优化我们网站的速度时,缓存是最关键的技术之一。

加速站点需要缓存:它不是让服务器为每个请求动态创建HTML输出,而是仅在第一次请求HTML之后创建HTML,缓存它,然后从此开始提供缓存版本,缓存提供更快的响应,并释放服务器中的资源。从服务器端优化我们站点的速度时,缓存是最重要的任务之一。

生成页面的HTML输出时,如果它包含具有用户状态的代码,例如为登录用户打印欢迎消息“Hello {{User name}}!”,则无法缓存该页面。否则,如果有人首先访问该站点,并且缓存了HTML输出,那么所有用户都会受到“Hello!”的欢迎。

因此,缓存插件通常会在用户登录时禁用缓存,如下面的插件WP Super Cache所示:

禁用已登录用户的缓存是不可取的,应该避免使用,因为即使具有用户状态的HTML代码量与页面中的静态内容相比最小,仍然不会缓存任何内容,原因是要缓存的实体是页面,而不是页面中HTML代码的特定部分,因此通过包含一行不能缓存的代码,就不会缓存任何内容,这是一种全有或全无的情况。

通常为了解决这个问题,我们会搭建服务器,以避免在服务器端使用用户状态呈现HTML代码,并在通过API获取所需数据后,仅在客户端呈现它,通过从服务器上呈现的代码中删除用户状态,即使用户已登录,也可以缓存该页面。

​我们也正在探索一种增强网站缓存的方法 ,主要是为了即使在用户登录时也能在网站上启用缓存,策略依赖于仅对那些需要用户状态的页面禁用缓存,以及使用哪些组件可以决定是在客户端还是在服务器端呈现,具体取决于访问用户状态的页面。

最后我们坚信一个网站缓存技术发展,从而提供更快的响应和更好的用户体验。

迎关注我的头条号:Wooola,专注于Java、Golang、微服务架构,致力于每天分享原创文章、快乐编码和开源技术。

前言

最近发版前端项目,用户经常反馈新添加功能在线上环境不好用,常出现新老页面并存的状况。经前端同事排查法发现,实际上只需要重新刷新一下页面就没事了。但是每次去通知用户肯定不现实,所以需要对前端的js和css等文件采取一定的缓存失效的措施,强制浏览器重新去服务器获取新的js代码以及css文件。

楼主经过实际的项目情况反馈,总结以下两点切实可行的办法,分享给大家,希望对大家有帮助。

  1. 路径后面加时间戳或者随机数的方式
  2. 采用hash(md5)重命名文件

路径后面加时间戳或者随机数的方式

时间版本号

如果每次发布,针对修改过的js或者css文件路径加上时间的版本号,一般以年月日拼写。

<script type="text/javascript" src="lib/common.js?v=20190719"></script>
<link rel="stylesheet" type="text/css" href="assets/css/ie/ie8.css?v=20190719" />

如果发生紧急情况,需要在一天当中对某些css或者js文件多次发版,可以把时间精确到时分秒。

目前楼主主推采用加版本号的方式,因为文件太多,只能做增量修改。好处是没有做任何修改js或者css文件可以不用加版本号。

采用随机数

document.write('<script src=\".lib/common.js?r=' + Math.random() + "\"" + '><\/script>');

一般不建议用随机数的方式,因为每次刷新页面,随机数都会变化,那么浏览器认为一个新的url需要重新请求服务端获取js或css文件,不会在使用浏览器本地缓存。同时占用网络带宽,影响服务器响应速度。

采用hash(md5)重命名文件

可以利用 gulp-rev或者webpack

entry: {
 main: './src/common.js',
 slove: './src/ie8.js'
},
output: {
 filename: '[name].[hash].js',
 path: path.resolve(__dirname, 'dist')
}

例如百度搜索首页,就是利用hash给js和css文件重命名。

龄稍微大一点的朋友都知道,以前百度搜索有一个查看网页快照的功能。当用户从搜索结果中点击某个感兴趣的网页链接地址,原网页可能因为各种原因无法打开,最常见的就是报404错误。

如果碰到这种情况,用户可以点击搜索结果旁边的“百度快照”,就可以打开一个原网页的快照副本,也就是原网页的缓存。这个副本可能去掉了CSS和各种样式,版面也可能会发生错乱,但是会保留、显示源网页的主要文字部分内容,这个功能非常方便实用。

提起这个功能,小编当年有一个记忆非常深刻、而且有点“搞笑”的事情。有一次小编在后台误删除了一篇非常重要的文章,结果尝试了各种办法,怎么也找不回来。

最后,小编抱着死马当活马医的心态,在百度搜索原文章的标题,成功找到了之前那篇文章的链接。当然,由于在这之前我已经删除了这篇内容,所以当时这个链接指向的是一个不存在的空链接,是不可能打开的。

所幸的是点击旁边的百度快照,可以成功地打开、看到原网页的快照缓存副本,那篇文章还在,于是我赶紧把文章复制添加回数据库,成功地找回恢复了原内容,有惊无险。

现在大家都知道,百度已经在搜索结果中删除了这项功能,现在用户已经无法查看网页缓存快照了,另外一方面,作为全球搜索市场上的龙头,谷歌一直保留着这项功能。

不过有一段时间,也有部分用户反映吐槽,表示自己在使用谷歌搜索的时候,无法使用这个功能。很明显,谷歌方面在进行调整测试,引发了很多用户的担忧。

现在坏消息来了,2024年2月2日,谷歌高管丹尼·沙利文(Danny Sullivan)宣布,谷歌方面也将在搜索结果中删除查看网页缓存功能,该功能将被正式关闭。丹尼·沙利文(Danny Sullivan)在其个人社交媒体上发文宣布了这个消息,并解释了原因。

该高管表示,谷歌之所以在早期推出这项功能,主要是因为在互联网普及的初期,网站(包括提供支持的后台服务器和骨干通信网)各方面的可靠性较差。

在这种情况下,部分网站(或者网页)出现打不开,或者加载速度缓慢的情况比较普遍。在这种背景下,谷歌在搜索结果中提供查看网页缓存的功能非常有必要,而且很实用。

但是,现在的情况和当时已经不可同日而语了,主流网站稳定性和可靠性都很高,网页打不开的问题基本不存在了,所以谷歌方面决定正式弃用、删除这项功能。

其实,在搜索结果中提供原网页的缓存快照副本,还有很多其它功能和作用,去掉非常可惜。但这是一种大趋势,现在几乎所有的搜索引擎都不再提供这项功能,一个时代过去了。