什么资源可以协商缓存
Ⅰ 鍓岖缂揿瓨镄勭悊瑙 鎴栬 鍓岖鏁版嵁鎸佷箙鍖栫殑鐞呜В(寮哄埗缂揿瓨銆佸岗鍟嗙紦瀛)
缂揿瓨鍙浠ヨ存槸镐ц兘浼桦寲涓绠鍗曢珮鏁堢殑涓绉崭紭鍖栨柟寮忎简銆备竴涓浼樼镄勭紦瀛樼瓥鐣ュ彲浠ョ缉鐭缃戦〉璇锋眰璧勬簮镄勮窛绂伙纴鍑忓皯寤惰繜锛屽苟涓旂敱浜 缂揿瓨鏂囦欢鍙浠ラ吨澶嶅埄鐢 锛岃缮鍙浠ュ噺灏戝甫瀹斤纴闄崭绠缃戠粶璐熻嵎銆
瀵逛簬涓涓鏁版嵁璇锋眰𨱒ヨ达纴鍙浠ュ垎涓哄彂璧 缃戠粶璇锋眰銆佸悗绔澶勭悊銆佹祻瑙埚櫒鍝嶅簲 涓変釜姝ラゃ傛祻瑙埚櫒缂揿瓨鍙浠ュ府锷╂垜浠鍦ㄧ涓鍜岀涓夋ラや腑浼桦寲镐ц兘銆傛瘆濡傝寸洿鎺ヤ娇鐢ㄧ紦瀛樿屼笉鍙戣捣璇锋眰锛屾垨钥呭彂璧蜂简璇锋眰浣嗗悗绔瀛桦偍镄勬暟鎹鍜屽墠绔涓镊达纴闾d箞灏辨病链夊繀瑕佸啀灏嗘暟鎹锲炰紶锲炴潵锛岃繖镙峰氨鍑忓皯浜嗗搷搴旀暟鎹銆
鈶犱笉瀛桦湪璇ョ紦瀛樼粨鏋滃拰缂揿瓨镙囱瘑锛屽己鍒剁紦瀛桦け鏁堬纴鍒欑洿鎺ュ悜链嶅姟鍣ㄥ彂璧疯锋眰
鈶″瓨鍦ㄨョ紦瀛樼粨鏋滃拰缂揿瓨镙囱瘑锛屼絾璇ョ粨鏋滃凡澶辨晥锛屽己鍒剁紦瀛桦け鏁堬纴鍒欎娇鐢ㄥ岗鍟嗙紦瀛
鈶㈠瓨鍦ㄨョ紦瀛樼粨鏋滃拰缂揿瓨镙囱瘑锛屼笖璇ョ粨鏋滃皻链澶辨晥锛屽己鍒剁紦瀛樼敓鏁堬纴鐩存帴杩斿洖璇ョ粨鏋
鎺у埗寮哄埗缂揿瓨镄勫瓧娈靛垎鍒鏄疎xpires鍜孋ache-Control锛屽叾涓瑿ache-Control浼桦厛绾ф瘆Expires楂樸
Cache-Control銆丒xpires閮芥槸缂揿瓨鍒版湡镞堕棿锛孋ache-Control鏄鐩稿瑰硷纴Expires鏄缁濆瑰硷纴鍗冲啀娆″彂阃佽锋眰镞讹纴濡傛灉镞堕棿娌″埌链燂纴寮哄埗缂揿瓨鐢熸晥銆
娉锛氩湪镞犳硶纭瀹氩㈡埛绔镄勬椂闂存槸钖︿笌链嶅姟绔镄勬椂闂村悓姝ョ殑𨱍呭喌涓嬶纴Cache-Control鐩告瘆浜巈xpires鏄镟村ソ镄勯夋嫨锛屾墍浠ュ悓镞跺瓨鍦ㄦ椂锛屽彧链塁ache-Control鐢熸晥銆
鈶犲岗鍟嗙紦瀛樼敓鏁堬纴杩斿洖304
鈶″岗鍟嗙紦瀛桦け鏁堬纴杩斿洖200鍜岃锋眰缁撴灉
杩欓噷鎴戜滑浠ュ崥瀹㈢殑璇锋眰涓轰緥锛岀姸镐佺爜涓虹伆镩茬殑璇锋眰鍒欎唬琛ㄤ娇鐢ㄤ简寮哄埗缂揿瓨锛岃锋眰瀵瑰簲镄凷ize鍊煎垯浠h〃璇ョ紦瀛桦瓨鏀剧殑浣岖疆锛屽垎鍒涓篺rom memory cache 鍜 from disk cache銆傞偅涔坒rom memory cache 鍜 from disk cache鍙埚垎鍒浠h〃镄勬槸浠涔埚憿锛熶粈涔堟椂鍊欎细浣跨敤from disk cache锛屼粈涔堟椂鍊欎细浣跨敤from memory cache锻锛
from memory cache浠h〃浣跨敤 鍐呭瓨涓镄勭紦瀛 锛宖rom disk cache鍒欎唬琛ㄤ娇鐢ㄧ殑鏄 纭鐩树腑镄勭紦瀛 锛
Ⅱ 缓存策略的选择
适合缓存的内容
1. 不变的图像,如logo,图标等
2. js、css静态文件
3. 可下载的内容,媒体文件
适合协商缓存
1. HTML文件
2. 经常替换的图片
3. 经常修改的js、css文件,js、css文件的加载可以加入文件的签名来拒绝缓存,如‘index.css?签名’,‘index.签名.js’
不建议缓存的内容
1. 用户隐私等敏感数据
2. 经常改变的API数据接口
NGINX配置缓存策略
本地缓存配置
1. add_header指令:添加状态码为2XX和3XX的响应头信息,设置代码add_header name value [always];,可以设置Pragma、Expires、Cache-Control,可以继承
2. expires指令:通知浏览器过期时长,设置代码expires time;
3. Etag指令:指定签名,设置代码etag on|off,默认on
前端代码和资源压缩
优势
1. 让资源文件更小,加快文件在网络中的传输,让网页更快的展现,降低带宽和流量的开销
压缩方式
1. js、css、图片、html代码的压缩
2. gzip压缩
gzip配置
gzip on|off; #是否开启gzipgzip_buffers 32 4K|16 8K; #缓冲(在内存中缓存几块?每块多大)gzip_comp_level [1-9] #推荐6,压缩级别(级别越高,压得越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA,什么样的Uri不进行gzip
gzip_min_length 200 #开始压缩的最小长度
gzip_http_version 1.0|1.1 #开始压缩的http协议版本
gzip_proxied #设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml image/png #对哪些类型的文件压缩,如txt、xml、css
gzip_vary on|off #是否传输gzip压缩标志
CDN加速
定义
1. CDN的全称content delivery network,内容分发网络
2. 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定
3. 在网络各处放置节点服务器所构成的有的互联网基础之上的一层智能虚拟网络
4. CDN系统能够实现地根据网络流量和各节点的连接、负载状况以及到用户距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上
优势
1. 本地cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度
2. 跨运营商的网络加速,保证不同网络的用户都能得到良好的访问质量
3. 远程访问用户根据DNS负载均衡技术只能选择cache服务器
4. 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点web服务器负载等功能
5. 广泛分布的cdn节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵
工作原理
1. 用户发起请求
2. 智能DNS的解析(根据IP判断地理位置、接入网类型、选择路由最短和负载最轻的服务器)
3. 取得缓存服务器ip
4. 把内容返回给用户(如果缓存中有,没有就执行5、6、7)
5. 向源站发起请求
6. 将结果返回给用户
7. 将结果存入缓存服务器
适用场景
1. 站点或者应用中大量静态资源的加速分发,例如css、js、图片和HTML
2. 大文件下载
3. 直播网站
独立图片服务器
必要性
1. 分担web服务器的I/O负载,将耗费资源的图片服务器分离出来,提高服务器的性能和稳定性
2. 能够专门对图片服务器进行优化,为图片服务器设置针对性的缓存方案,减少带宽成本,提高访问速度
3. 提高网站的可扩展性,通过增加图片服务器,提高图片吞吐能力
采用独立域名
原因:
1. 同一域名下浏览器的并发连接数有限制,突破浏览器连接数的限制
2. 由于cookie的原因,对缓存不利,大部分web cache都只缓存不带cookie的请求,导致每次的图片请求都不能命中cache
如何图片上传和同步
1. NFS共享方式
2. 利用FTP同步
动态语言静态化
将现有的PHP等动态语言的逻辑代码生成为静态的HTML文件,用户访问动态脚本重定向到静态HTML文件的过程。对实时性要求不高
原因:
1. 动态脚本通过会做逻辑计算和数据查询,访问量越大,服务器压力越大
2. 访问量大时可能会造成CPU负载过高,数据库服务器压力过大
3. 静态化可以减低逻辑处理压力,降低数据库服务器查询压力
实现方法
1. 使用模板引擎
2. 利用ob系列函数
需要获取swoole、workerman、TP、laravel、vue、Linux、redis以及性能优化,并发项目实战,微服务 架构方面的资料,可以私信我哦