热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单聊聊Web优化

HTTP缓存使用缓存的优劣因为Web的访问时下载特性,使用缓存可以有效避免每次访问都下载资源给服务器造成带宽压力、同时减少Web加载时间。但缓存使用不当
  • HTTP缓存

使用缓存的优劣

因为Web的访问时下载特性,使用缓存可以有效避免每次访问都下载资源给服务器造成带宽压力、同时减少Web加载时间。

但缓存使用不当,会造成用户无法看到最新的内容或者显示问题。

 

浏览器缓存机制

根据http协议,在 http 1.0 时代,给客户端设定缓存方式一般通过两个字段 Pragma 和 Expires:

其中pragma字段代表是否使用缓存,Expires代表缓存时间

 

http 1.1 新增加了 Cache-Control 来定义缓存过期时间,目的是针对上述 Expires 时间是相对于服务器而言,无法保证和客户端时间统一的问题

max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

今天主要说明的三种缓存方式:

public: 所有内容都将被缓存(客户端和代理服务器都可缓存)。

no-store:所有内容都不会被缓存到缓存或 Internet 临时文件中。

no-cache: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。

 

 


  • Public缓存

以apache为例:

打开httpd.conf,找到并取消注释:

LoadModule headers_module modules/mod_headers.so

 

然后在extra/ httpd-vhosts.conf中加入:

header set cache-control " public,max-age=5"

设置完毕后,重启apache,刷新浏览器页面,观察缓存时间,过5秒后,观察缓存时间。

 

在有效期内,浏览器返回的状态码均为200,from cache。

 


  • No-cache缓存

在进行一个测试:

header set cache-control "no-cache"

设置完毕,重启apache,刷新浏览器页面观察,此时应该状态码为304

这种缓存模式通过header头的两个字段:Last-Modified(最后修改时间)和ETag(唯一标识符)来判断是否需要重新更新资源。

Last-Modified代表的是文件最后修改时间

ETag代表的是文件唯一标识符(具体规则由服务器软件自动判定或手动设置)

 

判断这两个参数是否一致,如果一致返回状态码304,代表这个资源没有被更改过(可以使用本地)

 


  • No-store缓存

就是不使用缓存,每次打开页面一定向服务器索取最新资源。

 

Public与no-cache对比:

虽然no-cache可以随时使用最新的资源且节约服务器带宽,但依然要向服务器发起http请求进行询问,没有能够非常有效的减少http请求的次数。

Public这种强缓存可以将请求和带宽优化做到极致,但如果利用不好就会造成用户显示内容的滞后。

no-store(禁用浏览器缓存)考虑服务器压力问题一般不会应用在网站上,小部分内网、局域网用户会用到。

 

具体可以看流程图:

https://img-blog.csdn.net/20160918161516084?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

Css3规范中也可以将图片转化为base64编码格式放到css文件中,从而减少图片的加载,非常适合多组的零散小图,但维护性略差。

 

服务器使用gzip压缩

Gzip压缩可以先在服务端进行压缩,然后传递给浏览器后浏览器在进行解压,从而减少大小,以apache为例,打开httpd.conf:

LoadModule deflate_module modules/mod_deflate.so

就能打开gzip压缩,

接着在下方添加代码:

# 告诉 apache 对传输到浏览器的内容进行压缩

SetOutputFilter DEFLATE

# 压缩等级1-9

DeflateCompressionLevel 9

#设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩

SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

一般文本压缩率能达到50%甚至更好,图片压缩效果不明显,同时在header里面就能看到:Content-Encoding:gzip字段。

我本地测试一个6kb的html和css在启用level1时就能压缩到2kb,但1-9效果并不明显。虽然gzip好用,但是需要消耗cpu处理,还是要看服务器本身的场景,带宽重要还是CPU更重要。

 

图片懒加载

即当网页很长时,只加载第一屏的图片,当用户继续往后滚屏的时候才加载后续的图片。因为不是所有用户都想浏览整个网页。

这个实现方法一般是在开发时配合处理。

 

将资源分离或放入CDN

一般来说,浏览器会对统一域名下的http请求数进行限制。

比如a.dajiaochongmanhua.com下有30张图片资源,那么实际上浏览器不会同时加载这30张图片,只会同时下载10张(具体几张看浏览器机制)。

但a.dajiaochongmanhua.com、b.dajiaochongmanhua.com、c.dajiaochongmanhua.com各有10张却会同时下载30张。

且还有一个好处不会携带COOKIE,减少请求头大小。

 


推荐阅读
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
author-avatar
吴家南小南
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有