浏览器缓存

Nginx大并发优化实战

落爺英雄遲暮 提交于 2019-12-01 09:58:33
    文章知识点:   [ ] 调优的必要性   [ ] 调优的维度和见解分歧   [ ] Nginx调优项   一、调优的必要性   ​ 一直不愿意写优化的内容出来分享,实在是不知道该如何取写。因为,写不好就会被各种慰问,今天终于还是写了,因为有太多人私信或在群里问我或者让给分享经验,我还是从了。   ​ 在聊调优之前,我们先要知道为何调优,业务运行和调优的关系。   业务运行:线上业务正常运行,承载了公司业务。   监控业务:通过监控业务对线上业务进行监控,及时发现问题。   优化业务:通过监控分析,发现业务问题或者瓶颈,及时对业务或者软件就行调整、优化。   测试优化:优化完成后,需要对现有的优化进行测试,保证业务在当前优化模式中稳定、高效,能够解决当前问题。   这就是业务运行的一个流程,也是我们保证业务稳定、高效、高可用的运维之道。   二、调优的维度和见解分歧   ​ 调优类的文章是最难写的,因为我只能告诉你调优的选项,无法告诉你具体的阈值,因为不同的业务运行在不同的机器,所消耗的资源是不同的;又因为场景不同,对应的调优项及阈值是千变万化的,就好比你和你上铺的兄弟都是感冒了,去医院看病开的药却是截然不同的。正是如此,才会出现当很多人看到调优的文章,看到了具体的调优项或者阈值就会浮现出两个字,我不好意思说,配个图吧!大家意会就好。   三、Nginx调优  

一篇文章搞定前端性能优化面试

时光总嘲笑我的痴心妄想 提交于 2019-12-01 09:52:59
前言 虽然前端开发作为 GUI 开发的一种,但是存在其特殊性,前端的特殊性就在于“动态”二字,传统 GUI 开发,不管是桌面应用还是移动端应用都是需要预先下载的,只有先下载应用程序才会在本地操作系统运行,而前端不同,它是“动态增量”式的,我们的前端应用往往是实时加载执行的,并不需要预先下载,这就造成了一个问题,前端开发中往往最影响性能的不是什么计算或者渲染,而是加载速度,加载速度会直接影响用户体验和网站留存。 《Designing for Performance》 的作者 Lara Swanson 在2014年写过一篇文章 《Web性能即用户体验》 ,她在文中提到“网站页面的快速加载,能够建立用户对网站的信任,增加回访率,大部分的用户其实都期待页面能够在2秒内加载完成,而当超过3秒以后, 就会有接近40%的用户离开你的网站 ”。 值得一提的是,GUI 开发依然有一个共同的特殊之处,那就是 体验性能 ,体验性能并不指在绝对性能上的性能优化,而是回归用户体验这个根本目的,因为在 GUI 开发的领域,绝大多数情况下追求绝对意义上的性能是没有意义的. 比如一个动画本来就已经有 60 帧了,你通过一个吊炸天的算法优化到了 120 帧,这对于你的 KPI 毫无用处,因为这个优化本身没有意义,因为除了少数特异功能的异人,没有人能分得清 60 帧和 120 帧的区别,这对于用户的体验没有任何提升

Redis

南笙酒味 提交于 2019-12-01 09:37:13
简介 开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件 数据结构 字符串(strings) 散列(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets) https://www.cnblogs.com/jasontec/p/9699242.html redis是键值对的数据库,常用的五种数据类型为字符串类型(string),散列类型(hash),列表类型(list),集合类型(set),有序集合类型(zset)。 Redis用作缓存,主要两个用途:高性能,高并发,因为内存天然支持高并发。 应用场景 分布式锁(string) setnx key value,当key不存在时,将 key 的值设为 value ,返回1。若给定的 key 已经存在,则setnx不做任何动作,返回0。 当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁,如果setnx返回0表示获取锁失败,整体思路大概就是这样,细节还是比较多的,有时间单开一篇来讲解。 计数器(string) 如知乎每个问题的被浏览器次数: 分布式全局唯一id(string) 分布式全局唯一id的实现方式有很多,这里只介绍用redis实现。 每次获取userId的时候,对userId加1再获取,可以改进为如下形式: 直接获取一段userId的最大值

关于浏览器页面缓存问题

*爱你&永不变心* 提交于 2019-12-01 08:31:16
问题描述 通过FTP直接将项目上传到服务器,然后访问链接调试,发现修改的样式没有生效,以为是代码没有上传成功过,一直疯狂调试。 解决方法 一、采用<meta>的方式效果并不是太好 <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-control" content="no-cache"> <meta http-equiv="Cache" content="no-cache"> 二、使用css添加版本参数,完美解决style缓存问题 例如: 在css的Url后面加上参数version=1.0.0,每次提交时修改一下版本号就可以了 <link rel="stylesheet" type="text/css" href="../style/css/common-red.css?version=1.0.0"> 来源: https://www.cnblogs.com/brock/p/11673173.html

Nginx Cache-Control

痴心易碎 提交于 2019-12-01 08:06:13
转自: https://www.cnblogs.com/sfnz/p/5383647.html HTTP协议的Cache-Control指定请求和响应遵循的缓存机制。 在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。 请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。 响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。 浏览器中关于Cache 的3 属性: Cache-Control: 设置相对过期时间, max-age指明以秒为单位的缓存时间. 若对静态资源只缓存一次, 可以设置max-age的值为315360000000 (一万年). Http 协议的cache-control 的常见取值及其组合释义: no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器. no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源) private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器,

关于浏览器的自动缓存问题

元气小坏坏 提交于 2019-12-01 07:47:13
在写JavaWeb项目的时候,有时候会因为浏览器自己的缓存功能,导致自己修改过的Js、ajax代码无法及时的更新生效,这样对于代码的调试是非常浪费时间的,开始以为是写代码的工具有问题,后来查了查发现是浏览器带有自动缓存功能,在这儿记录下这个问题: 大多人用的都是谷歌浏览器,想要关闭浏览器的自动缓存功能可以通过:F12打开浏览器的调试页面,然后->Network,将Disable cache选项给勾选住,这样自己在修改过代码之后,通过刷新页面就可以将修改的部分更新上来了 来源: https://www.cnblogs.com/interflow/p/11670206.html

深度解析数据缓存技术

旧街凉风 提交于 2019-12-01 07:13:32
1.缓存概述 ​ 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 1.1.缓存的原理 将数据写入/读取速度更快的存储(设备); 将数据缓存到离应用最近的位置; 将数据缓存到离用户最近的位置; 1.2.缓存分类 在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用: - CDN缓存; - 反向代理缓存; - 分布式Cache; - 本地应用缓存; 1.3.缓存媒介 常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等; 缓存的内容:文件,数据,对象; 缓存的介质:CPU,内存(本地,分布式),磁盘(本地,分布式) 1.4.缓存设计 缓存设计需要解决以下几个问题: 1>缓存什么?哪些数据需要缓存:1.热点数据;2.静态资源。 2>缓存的位置?CDN,反向代理,分布式缓存服务器,本机(内存,硬盘) 3>如何缓存的问题? - 过期策略 - 固定时间:比如指定缓存的时间是30分钟; - 相对时间:比如最近10分钟内没有访问的数据; - 同步机制 - 实时写入;(推) - 异步刷新;(推拉) 2.CDN缓存 ​ CDN主要解决将数据缓存到离用户最近的位置,一般缓存静态资源文件(页面,脚本,图片,视频,文件等)。国内网络异常复杂,跨运营商的网络访问会很慢

天猫浏览型应用的CDN静态化架构演变

倖福魔咒の 提交于 2019-12-01 06:44:42
在天猫双11活动中,商品详情、店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击。随着历年来双11流量的大幅增加,每年这些浏览型系统都要面临容量评估、硬件扩容、性能优化等各类技术挑战。因此,架构方面的重点在于,如何能够利用合理成本应对瞬间飙高的峰值请求,并确保活动完整周期中系统容量的可伸缩性、用户响应时间的稳定性,以及外部依赖系统出现问题时的高可用性。此外,作为最主要的页面流量承载体系,架构方面还需考虑防爬攻击、流控容灾等安全、稳定的需求,并综合衡量网络带宽、硬件成本、缓存效率等各方面要素,找准平衡点,从而达到以不变应万变的理想效果。 演进 为此,自2011年起,以天猫商品详情系统为代表,天猫浏览型系统在架构上的主要工作之一就是通过静态化技术实现了动静态信息分离、利用缓存技术存放静态化内容、利用少量动态数据异步加载填充。整个过程历经单机静态化、统一缓存接入,到2013年双11前彻底CDN化三个阶段(如图1所示),有效解决了缓存命中率、流量自然分布、系统扩容简化、用户端响应速度等关键问题。 图1 CDN化的三个阶段 目前,天猫浏览型系统最新使用的这套基于CDN的静态化架构,可以满足高可用持续伸缩的原始预期,并包含如下特性。 动静分离:HTML静态化和热点分离。 分布式缓存体系:利用CDN节点分布式缓存。 多级缓存机制:CDN两级+应用一级。 统一服务静态化集群。 一致性维持

django的缓存机制

百般思念 提交于 2019-12-01 05:32:06
django设置缓存 一、设置缓存 Django支持基于数据库的、文件的和内存的缓存。通常我们首先要对其进行设置。Django关于缓存的设置都位于settings.py中的CACHES配置项中。 Django支持下面几种缓存系统: 1. Memcached Memcached是Django原生支持的缓存系统,速度快,效率高。Memcached是一种基于内存的缓存服务,起初是为了解决LiveJournal.com社交网站的负载问题而开发的,后来由Danga公司开源。 它被类似Facebook和维基百科这种大型网站使用,用来减少数据库访问次数,显著地提高了网站的性能。 Memcached会启动一个守护进程,并分配单独的内存块。其主要工作就是为缓存提供一个快速的添加,检索,删除的接口。所有的数据直接存储在内存中,所以它不能取代数据库或者文件系统的功能。如果你对缓存很熟悉,这些内容都很好理解。 如果你是新手,那么要清楚: Memcached不是Django自带的软件,而是一个独立的软件,需要你自己安装、配置和启动服务; Memcached安装好了后,还要安装Python操作Memcached的依赖库,最常用的是python-memcached和pylibmc; 上面两个条件都满足了后,还要在Django中进行配置。 配置方法: 根据你安装的Python依赖库不同

nginx 配置浏览器缓存策略

只愿长相守 提交于 2019-12-01 05:24:58
server { listen 8098; server_name localhost; location /testPro{ root html; proxy_pass http://127.0.0.1:5980/testPro; #js css 文件不缓存 if ($request_filename ~* ^.*?.(js|css)$){ add_header Cache-Control max-age=0; } } } max-age>0 时 用户访问时直接读取静态资源缓存,缓存保留时间为max-age的值;(静态资源保留超过max-age的值:200;保留时间段内:304) max-age<=0 若静态资源的Last-Modified 发生改变,则项服务器获取静态文件,否则依然读取浏览器缓存;(静态资源更新:200;不变:304) no-cache 若静态资源的Last-Modified 发生改变,则项服务器获取静态文件,否则依然读取浏览器缓存; (静态资源更新:200;不变:304) no-store 浏览器不缓存,直接获取服务器静态资源;(200) 来源: https://www.cnblogs.com/raymond-yan/p/11658553.html