1、应用程序实现的动态页面缓存
应用程序吧动态文件生成的html文件缓存到文件服务器,以后用户请求动态文件,直接从文件服务器加载对应的静态缓存的html文件返回给用户。这里面主要节省了动态语言的执行时间和数据库访问时间,但是会增加缓存框架的加载和缓存查找时间。
2、把解释执行的开发语言编译成为目标代码
这个主要把解释执行的高级语言,例如Java、php直接编译肠胃平台相关的目标代码、汇编代码。在Java里面,比较著名的就是即时编译器(JIT),其他的语言也是类似机制。这里主要节省了就是解释执行代码的时间。这个会增加即时编译的时间。
3、利用反向代理服务器的缓存
利用类似nginx的反向代理服务器,对请求的URL对应的输出进行缓存。这个缓存和应用程序实现的动态页面缓存类似,只不过用反向代理充当了应用程序的缓存实现。主要节省了动态(?元)执行时间和数据库访问时间。
4、客户端浏览器缓存
客户端浏览器缓存主要通过http头部增加 Last-Modified,if-modified-since,Expires,Cache-control等标识,和服务器进行协商,是采用客户的本机缓存来实现。
其中这里面也会分为三种方式:
1、通过Last-modified,if-modified-since方式和服务器通信,客户发出http请求中包含if-modified-since,如果服务器端代码没有修改,服务器端返回302响应代码的请求响应头(内容不返回),客户端则直接用本机缓存的内容缓存显示结果。相当于节省了服务器执行代码时间以及数据传输时间。
2、通过Expires,Cache-Control控制,客户端发现如果上次请求的页面还未过期,通过expires或者cache-control进行辨别,则直接显示本机缓存的内容,不与服务器进行通信。
总结:
1、一般的高并发的应用程序,都在web层采用了以上几种缓存,一般静态资源(图片、JS、CSS)都会采用nginx反向代理+客户端缓存来实现。
2、对于门户网站,尤其是首页的新闻,一般都会缓存起来,可以通过反向代理也可以通过应用程序缓存实现方式。
3、对于下载或者视频网站,由于数据传输比较大,直接采用浏览器本地缓存实现。