利用HTTP协议和浏览器缓存,减少数据读取时间

一般减少数据读取时间方法

1.合理建立关系型数据库索引

2.合理利用NOSQL数据库(如redis)存储数据,可以做到随机读取

3.利用缓存机制,把查询速度慢或者计算量比较大的结果集存储起来,并适当设置过期时间

4.优化SQL语句

其他方法,说明一下

众所周知,大多数浏览器客户端,为了减少网络延时,会利用本地缓存来加快二次加载的速度

缓存的对象一般有:媒体文件(jpg,gif等),样式文件,脚本文件等。

脚本文件运行所产生的文本其实也可以算是普通文本,那么对于实时性要求低的数据请求,我们绝对可以利用浏览器缓存来帮我们解决问题。

利用ETag响应头,返回304(not modified)

下面说明一下ETag的机制

====第一次请求===

1.客户端发起 HTTP GET 请求一个文件;

2.服务器处理请求,返回文件内容和一堆Header,当然包括Etag(例如"2e681a-6-5d044840")(假设服务器支持Etag生成和已经开启了Etag).状态码200

====第二次请求===

1.客户端发起 HTTP GET 请求一个文件,注意这个时候客户端同时发送一个If-None-Match头,这个头的内容就是第一次请求时服务器返回的Etag:2e681a-6-5d044840

2.服务器判断发送过来的Etag和计算出来的Etag匹配,因此If-None-Match为False,不返回200,返回304,客户端继续使本地缓存;


利用Modified-Since响应头,返回304(not modified)

下面说明一下Modified-Since的机制

====第一次请求===

1.客户端发起 HTTP GET 请求一个文件;

2.服务器处理请求,返回文件内容和一堆Header,当然需要包括Modified-Since(例如Thu, 01 Sep 2016 11:19:33 GMT).状态码200

====第二次请求===

1.客户端发起 HTTP GET 请求一个文件,注意这个时候客户端同时发送一个If-Modified-Since头,这个头的内容就是第一次请求时服务器返回的If-Modified-Sinc:Thu, 01 Sep 2016 11:19:33 GMT

2.服务器判断发送过来的If-Modified-Since和文件Modified-Since的匹配,如果相等服务器返回304客户端利用缓存,否则返回200客户端缓存文件;

这是第二次请求图片


虽然动态脚本文件对于客户端来说没有修改时间一说,但是可以通过代码修改响应头中的Modified-Since属性,使动态脚本文件缓存能够被客户端直接缓存起来,直接减少网络请求时间。

下面是从网上摘抄的一段代码,同学们可以借鉴一下

private function _addEtag($file) {

        $last_modified_time = filemtime($file);

        $etag = md5_file($file);

        // always send headers

        header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");

        header("Etag: $etag");

        // exit if not modified

        if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time ||

        @trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {

                header("HTTP/1.1 304 Not Modified");

                exit;

        }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 浅谈浏览器Http的缓存机制 ✦ ✦ ✦ ✦ ✦ ✦ ✦ ✦ 针对浏览器的http缓存的分析也算是老生常谈了,每隔...
    meng_philip123阅读 4,699评论 0 10
  • 针对浏览器的http缓存的分析也算是老生常谈了,每隔一段时间就会冒出一篇不错的文章,其原理也是各大公司面试时几乎必...
    全端玩法阅读 4,400评论 0 9
  • 针对浏览器的http缓存的分析也算是老生常谈了,每隔一段时间就会冒出一篇不错的文章,其原理也是各大公司面试时几乎必...
    单纯的土豆阅读 3,051评论 0 2
  • 网络特有的延迟以及数据传输的成本,制约互联网快速获取Web资源。为此,HTTP协议引入缓存以空间换时间,使浏览器缓...
    大头8086阅读 8,241评论 2 12
  • #iOS网络缓存扫盲篇 #--使用两行代码就能完成80%的缓存需求 下篇预告:[使用80%的代码来完成剩下的20%...
    coding_chen阅读 6,335评论 0 11

友情链接更多精彩内容