gzip压缩实践

html-css015

gzip压缩实践,第1张

为提高网页加载速度,启用 gzip 缩减资源的大小是非常常见的手段。现代浏览器均支持 gzip 压缩,并会为HTTP请求自动协商此类压缩。

本文将对 gzip 的实践和原理做一个简单的总结。

web服务器在接收到浏览器的请求之后,会检查浏览器可以接受哪些压缩方法,详情可见下图。

浏览器在请求头中会带上 Accept-Encoding 这个参数来说明自己支持哪些内容编码方式。

而服务端返回的 Response Headers 中则存在一个 Content-Encoding ,用来说明数据的压缩方法。

几乎所有的浏览器都已经支持了 gzip ,并且有请求头的验证,所以基本不需要担心兼容相关的问题。

压缩前后的体积前后差异,可以在控制台中看到。可以说,对于js、css文件的压缩率还是比较可观的。

经过这种方式的配置,在服务端响应请求的时候会对文件进行压缩,之后返回压缩过后的内容。不过压缩这一过程多多少少会占用一些服务端的性能,具体压缩的程度,也就是 gzip_comp_level 设置的值也会影响到占用性能的多少,接下来我们来看一些网上搜集到的数据,了解不同值的设置对文件大小和CPU占用的影响。

可以看到,压缩级别从0到1时,文件大小明显减小,CPU消耗略微上涨。而在之后文件减小的速率明显放缓,在达到了5之后继续增加压缩级别,文件的体积也几乎没有缩小,但CPU消耗却有较为明显的上涨。

根据结论可以看出,如果是在服务端使用 gzip 压缩的话,考虑到性能和压缩率的取舍,将压缩级别设置为一个较低的值,比如2之类的,是比较合理的。

我们也可以选择在打包构建项目的时候就对文件进行gzip压缩

这边以打包一个 webpack 的前端项目为例

运行构建命令后可以看到,在生成 .js 和 .css 的同时还生成了对应的 .gz 文件。

在这种方式的压缩中,我们完全可以把压缩等级设置为一个比较高的值(默认),毕竟只是略微影响打包的时间,却能获取一个更小的体积的包,还是比较值得的。

以 nginx 为例,静态压缩需要使用 http_gzip_static_module 这个模块,这个模块不是默认的,应使用 --with-http_gzip_static_module 的配置参数启用它

之后再配置中添加

这样便可开启静态压缩。

需要注意以下几点:

网站服务器租用用户在使用服务器一段时间后会发现网站打开变慢,用户就可以从服务器的硬件和软件方面来进行升级优化。

不管用户使用的服务器配置是新的还是刚升级完的,用户都应该对其进行优化,以提升服务器的性能跟它的整体利用率。西安智云优创建议用户可以从以下几个方面进行优化:

一、使用服务器的Gzip压缩功能

一般比较大中型的网站内容页面比价多,会造成占用较大的内存,当客户端访问的时候,加载的速度也会受到影响,如果是这类网站,用户可以用上海服务器的Gzip页面压缩功能,将一个比较大的页面尽量小一些,这样可以减少网络传输的数量,起到客户端访问速度。正常情况下的电脑是可以使用Gzip压缩功能的,而且还可以能够针对JS文件、CSS文件和Html进行压缩,多方面去进行优化网站访问速度。

二、尽量减少http请求数

一般情况下从访客访问一个页面到页面完全展现出来,这过程是要耗费一些时间加载各种Scripts、CSS样式表、Flash以及图片的,这过程中只要加载,就会请求一次http,所以这样的次数越多,时间耗费得越多,这样一来,页面的打开时间就越长,那如果是这样的情况,用户可以把CSS跟JS写到页面上,尽量避免外部调用,或者也可以把CSS文件和JS文件分来,在后台再进行合并,这样客户端浏览器相当于一次请求。所以尽量减少http的请求,减少外部各类文件的数量调用次数达到提升访问速度的目的。

三、升级上海服务器

在进行上海服务器升级工作之前,尽量多方面去考虑,是要升级现有的上海服务器还是要置换新的上海服务器设备。随着业务的不断增长,一直在使用的上海服务器遇到的问题比较多也是正常的。所以针对一些配置进行升级,比如说网络带宽,增加硬件设备等,来满足不断在扩大的业务需求。

至于说要置换的新的上海服务器,主要是因为可能在建站初期,选择硬件配置相对比较差的,使用到现在已经不能满足网站的发展,那只能选择购置新的服务器。

对于硬件优化的部分服务器租用完全可以信赖服务商的工作。选择一家靠谱的服务商对于服务器使用过程中出现的问题进行及时有效的处理是互联网公司的明智选择。

对于被攻击目标来说,需要面对不同协议、不同资源的分布式的攻击,分析、响应和处理的成本就会大大增加。对于一般的小型企业来说,通过自己来做到全面的防护不太实际且成本巨大。但是通过服务商部署的全面防护系统、单机硬防和集群防御软硬件给企业带来不一样安全体验。

网站优化一般从这几个方面考虑:

第一:最简单暴力的方式是升级服务器配置,升级cup,内存,硬盘,网络带宽,这是最简单直接的方式;但比较花钱

那么这几样要素是怎样影响网站响应速度的呢?硬盘有个读写效率问题,如果你的网站需要读取存储在服务器上的文件等东西,那么这个磁盘io就会影响效率;内存又是如何影响的呢?内存和硬盘的影响比较类似,但内存存储的是较为及时数据,和程序联系更为紧密一点,存储处理效率

在很大因素上能直接受到影响。最后就是网络带宽了,当网络带宽较低,数据传输的效率就会被限制,即使你的服务器各方面配置很ok,那也是没办法的,就如同被限制了高消费的富豪一样,你有限范围内有钱花不出去。。

第二:分析具体瓶颈,对应解决。

如果网站用户规模较大,响应频繁,这个时候就要考虑网站本身研发的质量如何?优化相关代码,如将页面静态化,减少页面和服务端响应次数,减少服务端接口响应的数据量,去除代码中低端耗时的部分,减少数据库操作,优化sql执行效率,前后端分离等等,手段非常多;这些都是在代码层面进行优化。

1,带宽可以说是体现一个网站的访问速度,理论是带宽越大访问速度越快,有些站长为什么网站搭建久了响应速度慢了呢?就是因为网站流量、访客越来越多了,之前选择的带宽几乎不够用造成拥堵,这时候把带宽升级一下就行了,员跃 科技 服务器认为最好是选择带宽充足的服务器,主要是性价比高的。

2,把图片大小优化一下,最好图片大小是在kb以内的不是在M以上的,当然如果是电商网站那就另当别论了。还有就是最好不要有flash的图片文件,不仅影响响应速度还不利于网站优化。

3,动态程序开发的网站,尽量减少服务器回传(postback),即减少服务器数据库查询次数,,使服务器的负载降低。

4,在国内很多访问量的网站都在后台生成静态页面,像新浪和搜狐的,不过这不是一件简单的工作。

直接给出结论: 1、css并不会阻塞DOM树的解析 2、css加载会阻塞DOM树渲染 3、css加载会阻塞后面js语句的执行 为了避免过长的白屏时间,我们应该尽可能的提高css加载速度,以下有几种优化方法: 1、使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间) 2、对css进行压缩(可以用很多打包工具,比如webpack,gulp等,也可以通过开启gzip压缩) 3、合理的使用缓存(设置cache-control,expires,以及E-tag都是不错的,不过要注意一个问题,就是文件更新后,你要避免缓存而带来的影响。其中一个解决防范是在文件名字后面加一个版本号) 4、减少http请求数,将多个css文件合并,或者是干脆直接写成内联样式(内联样式的一个缺点就是不能缓存) 关于DOMContentLoaded: 对于浏览器来说,页面加载主要有两个事件,一个是DOMContentLoaded,另一个是onLoad。而onLoad没什么好说的,就是等待页面的所有资源都加载完成才会触发,这些资源包括css、js、图片视频等。 1、如果页面中同时存在css和js,并且存在js在css后面,则DOMContentLoaded事件会在css加载完后才执行。 2、其他情况下,DOMContentLoaded都不会等待css加载,并且DOMContentLoaded事件也不会等待图片、视频等其他资源加载。 参考自:https://juejin.cn/post/6844903667733118983