Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

网页性能优化(三) #3

Open
Roe-Tian opened this issue Oct 12, 2019 · 0 comments
Open

网页性能优化(三) #3

Roe-Tian opened this issue Oct 12, 2019 · 0 comments
Labels
前端性能优化 前端网页性能优化

Comments

@Roe-Tian
Copy link
Owner

Roe-Tian commented Oct 12, 2019

前言

上篇写到:
在网页性能优化的过程中,我们可以通过在服务器配置cdn或者缓存来达到优化性能的作用。
cdn有些专门的网站提供这类的服务,而缓存在整个过程中起到很大的作用,相信我们之后还能了解这个东西的用处。

正文

这篇文章主要了解一下压缩文件,以及一些写法上的规范来优化网页的性能。

1. gzip压缩

gzip压缩是http协议上的gzip压缩编码技术。首先,我们应该要清楚的是压缩可以达到怎样的目的。比如说纯文本内容进行压缩之后,大小可以缩小大概40%左右。大小减小了最直接的就是传输的速度将会加快,以及流量将会减少。尤其是对于大流量类网站来说,压缩文件内容大小,减少流量是很有必要的(毕竟省钱嘛!),另一方面,压缩过的内容将减少存储空间。

那一般gzip压缩需要如何实现呢?一般会在www服务器上配置服务,然后将压缩过的文件传输到客户端,由客户端进行内容的显示。比方说nginx服务器就可以进行gzip配置,默认会压缩text/html的文件进行压缩,当然了,对于图片资源也是可以进行压缩的,这需要进行一下配置。

//first to open gzip service
gzip on
gzip_http_version 1.0;
gzip_disable "MSIE [1-6].";
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;

需要注意的是:

  • gzip_http_version默认是1.1的,即只有http/1.1的协议才能进行gzip压缩。如果使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间是用HTTP/1.0协议通信的。如果使用nginx通过反向代理做Cache Server,前端的nginx没有开启gzip,且后端的nginx上未设置gzip_http_version为1.0,那么Cache的url将不会被gzip压缩。

  • IE6对于部分的gzip压缩文件由兼容性的问题(其实,这个可以不谈,因为IE6感觉都不用了)。
    在HTTP1.1中使用gzip的方式:

请求头:

Accept-Encoding: gzip, deflate

响应头:

Content-Encoding: gzip

2. css、script标签位置规范的问题

如何正确的使用css标签和script标签?css标签应该放在head标签内,而script标签应该放在body标签的末尾。

<html>
    <head>
        <title>citerion</title>
        <link href="./test.css" ref="stylesheet"/>
    </head>
    <body>
         <!--dom内容-->
         <script src="./test.js"></script>
    </body>
</html>

在搞清楚为什么这两个标签要这么去放置之前,我们先来了解一下网页文件的渲染过程:

  • 处理html标签构成DOM树
  • 处理css标签构成CSSOM树
  • 处理js文件,对于DOM树的样式进行重新计算
  • 将DOM树和CSSOM树进行合并成渲染树
  • 根据渲染树,计算每个节点的布局
  • 最后将渲染树绘制在浏览器界面上

这里有还有两个点需要搞清楚的是:

  • css在解析过程中是不会阻塞DOM树的处理的。但是,一旦将css文件放到html尾部的时候,整个情况就变了。在html文件的末尾,DOM树几乎已经处理完成了,但是,这个时候刚刚解析到css的标签,需要下载css文件,以及构建CSSOM树,这些都是需要时间的。如果在头部时,DOM树和CSSOM树可以一起处理;反之,在尾部,需要等待CSSOM的处理,整个DOM渲染的进程会被阻塞(这样做是为了避免渲染树的重新排版),这样就会导致性能的下降。
  • js文件又是另外的一种情况。js文件在处理过程中,会阻塞DOM的处理。如果将js放在头部,那么将会影响DOM的处理,而CSSOM的渲染完成之后,也将会影响整个DOM构建的时间。如果放在尾部,就可以节省之前阻塞的部分时间,这样可以进行网页的优化。

总结

该篇总结了优化网页的两种方法:1. gzip压缩 2. css文件放在头部、js文件放在尾部

@Roe-Tian Roe-Tian added the 前端性能优化 前端网页性能优化 label Oct 12, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
前端性能优化 前端网页性能优化
Projects
None yet
Development

No branches or pull requests

1 participant