缓存与优化 --- ### 前端缓存 我们这里说的前端缓存可以理解为一般使用的 cdn 技术,利用 squid 等做前端缓冲技术,主要还是针对静态文件类型,比如图片、css、js、html 等静态文件。 #### 客户端缓存 浏览器端的缓存,可以让用户请求一次之后,下一次不在从服务器端请求数据,直接从本地缓存读取,可以减轻服务器负担也可以加快用户的访问速度。 #### HTML5 离线缓存 application cahce 是将大部分图片资源、js、css 等静态资源放在 manifest 文件配置中。当页面打开时通过 manifest 文件来读取本地文件或是请求服务器文件。 离线访问对基于网络的应用而言越来越重要。虽然所有浏览器都有缓存机制,但它们并不可靠,也不一定总能起到预期的作用。HTML5 使用 ApplicationCache 接口可以解决由离线带来的部分难题。前提是你需要访问的 Web 页面至少被在线访问过一次。 ### 数据缓存 Web 缓存是显著提高 Web 站点的性能最有效的方法之一。主要有: - 数据库端缓存 - 应用层缓存 - 前端缓存 - 客户端缓存 不同的缓存类型适用于不同的环境下使用。 #### 数据库端缓存 这个可以用以“空间换时间”来说。比如建一个表来存储另外一个表某个类型的数据的总条数,在每次更新数据的时候同时更新数据表和统计条数的表。在需要获取某个类型的数据的条数的时候,就不需要 select count 去查询,直接查询统计表就可以了,这样可以提高查询的速度和数据库的性能。 #### 应用层缓存 应用层缓存这块跟开发人员关系最大,也是平时经常接触的。 - 缓存数据库的查询结果,减少数据的压力。这个是大型网站必须做的。 - 缓存磁盘文件的数据。比如常用的数据可以放到内存,不用每次都去读取磁盘,特别是密集计算的程序,比如中文分词的词库。 - 缓存某个耗时的计算操作,比如数据统计。 应用层缓存的架构也可以分几种: - 嵌入式,也就是缓存和应用在同一个机器。比如单机的文件缓存,java 中用 hashMap 来缓存数据等等。这种缓存速度快,没有网络消耗。 - 分布式缓存,把缓存的数据独立到不同的机器,通过网络来请求数据,比如常用的 memcache 就是这一类。 分布式缓存一般可以分为几种: - 按应用切分数据到不同的缓存服务器,这是一种比较简单和实用的方式。 - 按照某种规则(hash,路由等等)把数据存储到不同的缓存服务器 - 代理模式,应用在获取数据的时候都由代理透明的处理,缓存机制有代理服务器来处理 ### 页面缓存 #### 使用缓存服务器