问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

前端使用缓存能更快吗?

发布网友 发布时间:2022-04-24 17:47

我来回答

3个回答

懂视网 时间:2022-05-12 16:59

之前给大家介绍过浏览器的缓存,也介绍过HTML的离线缓存,说的太多反而容易弄混,今天就来给大家好好分辨一下这些缓存分别有什么区别以及怎么使用缓存。

200 from memory cache 不访问服务器,直接读缓存,从内存中读取缓存。此时的数据时缓存到内存中的,当kill进程后,也就是浏览器关闭以后,数据将不存在。但是这种方式只能缓存派生资源

200 from disk cache 不访问服务器,直接读缓存,从磁盘中读取缓存,当kill进程时,数据还是存在。这种方式也只能缓存派生资源

304 Not Modified 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。

三级缓存原理

先去内存看,如果有,直接加载

如果内存没有,择取硬盘获取,如果有直接加载

如果硬盘也没有,那么就进行网络请求

加载到的资源缓存到硬盘和内存

一般浏览图片,如下流程:

访问-> 200 -> 退出浏览器

再进来-> 200(from disk cache) -> 刷新 -> 200(from memory cache)

application cache和上面缓存有点区别,是离线缓存,就是资源可以从硬盘上读取而不用联网,即使断网,用户也可以浏览。

设置浏览器缓存

304是协商缓存还是要和服务器通信一次,要想断绝服务器通信,就要强制浏览器使用本地缓存(cache-control/expires),

一般有如下几种方式设置浏览器缓存。

1、通过HTTP的META设置expires和cache-control

<meta http-equiv="Cache-Control" content="max-age=7200" />
 <meta http-equiv="Expires" content="Sun Oct 15 2017 20:39:53 GMT+0800 (CST)" />

这样写的话仅对该网页有效,对网页中的图片或其他请求无效。

2、apache服务器配置图片,css,js,flash的缓存

这个主要通过服务器的配置来实现这个技术,如果使用apache服务器的话,可以使用mod_expires模块来实现:

编译mod_expires模块:

Cd /root/httpd-2.2.3/modules/metadata/usr/local/apache/bin/apxs -i -a -c mod_expires.c //编译

先打开httpd.conf文件,然后查找expires这个模块,找到后,删除左边的#号,表示打这个模块,并重启apache服务器

编辑httpd.conf配置:添加下面内容

<IfModule mod_expires.c>ExpiresActive on
ExpiresDefault "access plus 1 month"
ExpiresByType text/html "access plus 1 months"
ExpiresByType text/css "access plus 1 months"
ExpiresByType image/gif "access plus 1 months"
ExpiresByType image/jpeg "access plus 1 months"
ExpiresByType image/jpg "access plus 1 months"
ExpiresByType image/png "access plus 1 months"
EXpiresByType application/x-shockwave-flash "access plus 1 months"
EXpiresByType application/x-javascript "access plus 1 months"
#ExpiresByType video/x-flv "access plus 1 months"</IfModule>

3、php等设置

<?php
 header("Cache-Control: public");
 header("Pragma: cache");
 $offset = 30*60*60*24; // cache 1 month
 $ExpStr = "Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT";
 header($ExpStr);?>

或者

$seconds_to_cache = 3600;$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";header("Expires: $ts"); header("Pragma: cache");header("Cache-Control: max-age=$seconds_to_cache");

缓存情况下前端代码部署

问题一:有了缓存,如何进行前端代码更新呢?

我们可以在资源文件或者图片后面添加版本号,如下图。

问题二:但是所有文件都加了版本号之后,我们只更改了一个文件,其他文件的缓存不是浪费了吗?

解决这个问题,我们可以用 数据摘要要算法,对文件求摘要信息,摘要信息与文件内容一一对应。如下图:

这样就解决了这个问题。

问题三:新的问题又来了,文件发布怎么办?

1、先部署页面,再部署资源:在二者部署的时间间隔内,如果有用户访问页面,就会在新的页面结构中加载旧的资源,并且把这个旧版本的资源当做新版本缓存起来,其结果就是:用户访问到了一个样式错乱的页面,除非手动刷新,否则在资源缓存过期之前,页面会一直执行错误。

2、先部署资源,再部署页面:在部署时间间隔之内,有旧版本资源本地缓存的用户访问网站,由于请求的页面是旧版本的,资源引用没有改变,浏览器将直接使用本地缓存,这种情况下页面展现正常;但没有本地缓存或者缓存过期的用户访问网站,就会出现旧版本页面加载新版本资源的情况,导致页面执行错误,但当页面完成部署,这部分用户再次访问页面又会恢复正常了。

好的,上面一坨分析想说的就是:先部署谁都不成!都会导致部署过程中发生页面错乱的问题。所以,访问量不大的项目,可以让研发同学苦逼一把,等到半夜偷偷上线,先上静态资源,再部署页面,看起来问题少一些。

如何解决这些问题呢?

这个问题,起源于资源的 覆盖式发布,用 待发布资源 覆盖 已发布资源,就有这种问题。解决它也好办,就是实现 非覆盖式发布

关于缓存的方方面面就这么多了,更多精彩请关注Gxl网其它相关文章!


相关阅读:

HTML怎么实现数字焦点图轮播代码

HTML里的最后一行文字显示不全怎么处理

怎样用canvas做出粒子喷泉动画的效果

热心网友 时间:2022-05-12 14:07

浏览器缓存可以由前端设置,但大多数是服务端设置
前端设置缓存通过html文件的meta标签设置相应的缓存时间、过期时间等
但大多数情况下都是服务端返回的响应头中设置这些参数

热心网友 时间:2022-05-12 15:25

对,可以使用cookie或者localstorage
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
广东省考考哪3科 六个月宝宝缺铁吃什么好 疯狂动物园 大猩猩栖息地升级技巧 疯狂动物园怎么办boss任务 boss任务过法 疯狂动物园怎么驯服火山猩猩 疯狂动物园驯服火山猩猩 疯狂动物园火山猩猩 在陌生的城市如何辨别东南西北? 女羊男虎千万别在一起 女羊男虎婚配好不好 属羊女与属虎男婚姻能否长久 属羊女的和什么属相最配 web前端网站性能优化怎么浏览器缓存 关节炎,风湿病怎么办?属于老年性疾病? web 浏览器缓存 需要前端设置么 老年人的疾病 老年病的特点有哪些 为什么随着年龄的增长,老年疾病发生率也越来越多,引发这些老年疾病慢性病的根本原因是什么? 老年病都有什么 老年人容易得哪些疾病?怎样预防?详细一点 老年到了年纪最容易患上哪些疾病? 人到中老为什么会得老年性疾病、癌症、糖尿病、心血管疾病等? 老年人常有的疾病有哪些? 租房合同未到期,因要卖房,要解除合同,合同内写明违约赔偿5000违约金,但租客装修过,要求赔偿装修钱 我是房东,租客提前终止租房合同,不肯将房屋复原我该怎么办 租房房东提前解除合约谁负责 房东可提前解除租房合同吗能要求赔偿吗 一加手机恢复出厂设置后数据还能找回吗? 华为手机恢复出厂设置后还能还原数据吗 郭姓男孩起名 急!!! 郭姓男孩起名!!! 郭姓男孩名字叫郭嘉栩怎么样? 老年人疾病的几种表现 web前端怎么用代码实现缓存优化 社区60岁以上老年人慢性病调查状况及卫生需求 关于前端缓存的问题 老年人患病的特点 web前端开发工具哪个浏览器比较好 老年人总是控制不住的自言自语。是什么病啊,有办法治吗 小米mCT3B是什么型号? 小米MCT3B开不了机是什么原因?? 小米红米5A(MCE3B)待机类型是什么? 小米mct3b怎么恢复出厂设置? 我是mce3b小米手机有OTG吗?怎么在设置上找不到呢? 北京9l7公交车路线查 北京917路公交所有站点. 北京公交车线路查询 北京西到涞水的917路公交车通车了吗? 昆明917路公交车路线 北京917路公交站到友谊医院怎么走? 座西安917路公交在什么地方下车倒424路公交可到城东客运站? 北京公交917路从六里桥东最后发车一趟几点钟