从URL到页面展示进行分析web优化(一,DNS与CDN)

559 阅读5分钟

系列文章主要讲的优化,但是也会提到进行了哪些步骤。

简单理解DNS系统

CNAME

1,A记录

Address记录,可以理解为域名与IP地址的映射,这些映射关系就是A记录。

域名:www.baid.com ----> 111.111.111.111 // 只是假设

2,CNAME

多个CNAME可以对应一个A记录的域名,举个例子:

www.bai1.com ---> www.baidu.com
www.bai2.com ---> www.baidu.com
www.bai3.com ---> www.baidu.com

DNS查找IP过程

域名会去DNS服务器查找IP,然后进行缓存。下次请求就会在缓存中获取了,但是第一次请求还是会消耗很多时间,如何优化呢?

在如何优化之前,我们先搞明白DNS是如何查找的。然后才能明白怎么去优化。

  • 首先浏览器会从自身的DNS缓存中查找(chrome://net-internals/#dns)
  • 浏览器会从操作系统中的DNS缓存中找(window:运行ipconfig/displaydns 查看)(linux上的NSCD缓存服务)
  • 从计算机host文件里找。
  • 请求本地域名服务器(如:阿里云服务器),80%到这步就结束了(你申请了一个域名,去阿里云,你肯定会写上域名所指向的IP。)
  • 以上顺序的查找都没命中,就需要向根域名服务器迭代请求了。

根域名服务器的迭代请求:

  • 我们实际的网址其实是:www.baidu.com.  (用百度举例子),你会发现,com后面多了个点(.)
  • 怎么解析IP的:顺序是   . ---> .com. ---> baidu.com. ---> www.baidu.com.
  • 他们分别代表着:根域名服务器 ---> 顶级域名服务器 ---> 二级域名服务器 ---> 三级域名服务器
  • 每次请求都会携带上:www.baidu.com. 然后慢慢查找到IP,进行返回。

前端DNS优化

1,减少DNS查询次数

解决办法:将请求的资源都放在同样一个域(domain)下面,这样访问网站只需要进行一次DNS查找。

但是会出现问题:HTTP/1.1中推荐客户端每个域只有一定数量的并行度(他建议的是2)。那么就会出现下载资源时,排队的现象。

最终做法:在一个网站里面使用最少2个域,但不多于4个域,来提供资源。

2. DNS预解析

原理:当加载一个html时,会自动解析a标签的href链接为IP地址,并缓存。

// index.html
<html>
    <a href="test.baidu.com"></a>
</html>

上面这段代码,当加载html文件时,会预先解析a标签href,并将IP缓存。当点击a标签时,就不需要DNS解析了。

问题:HTTPS不会自动进行预解析。

解决:需要手动添加在整个网站的入口页面。

添加单条解析:

<link rel="dns-prefetch" href="//img.alicdn.com"></link>

所有链接进行解析:

<meta http-equiv="x-dns-prefetch-control" content="on">

CDN

上面说的DNS是没有引入CDN时流程。如果使用CDN,流程就会发生改变。

CDN是什么?

CND全称:Content Delivery Network,即:内容分发网络。它能够时时的根据网络流量和各节点的链接、负载情况以及到用户的距离和响应时间等综合信息,将用户的请求重新导向离用户最近的服务节点上。

目的:使用户就近取得所需内容,解决Internet网络拥挤的情况,提高用户访问网站的请求速度。

CDN怎么做到优化的?

典型的CDN系统由下面三部分组成:

  • 分发服务系统

       最基本的工作单元是Cache设备,Cache负责直接响应最终用户的访问的请求,把缓存在本地的内容快速地提供给用户。cache还负责与源站点进行内容同步,把更新的内容以及本地没有的内容从源站点获取。

  • 负载均衡系统

       主要负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地 址。两级调度体系分为全局负载均衡(GSLB)和局部负载均衡(SLB),GSLB主要根据用户的就近原则,通过对每个服务的节点进行“最优”判断(如:负载量,是否存在响应数据等),确定向用户提供服务的cache的物理位置。SLB主要负责节点内部的设备负载均衡。

  • 运营管系统

       分为运营管理和网络管理子系统,负责处理业务层面的与外界系统交互所必需的收集、整理、交付工作。包含客户管理、产品管理、计费管理、统计分析等功能。

CDN使用以及过程

1,CDN的使用

使用其实很简单,只需要修改自己的DNS解析,设置一个CNAME指向CDN服务商即可。

2,DNS和CDN的整体流程

  1. 首先浏览器会从自身的DNS缓存中查找。
  2. 浏览器会从操作系统的DNS中查找。
  3. 从计算机的host文件中查找。
  4. 请求本地域名服务器(如:阿里云域名供应商的服务器)。
  5. 发现你有配置CNAME,查找到对应的域名(如:sunkuangdong.com ---> sun.com),通知浏览器请求改为找到的域名(sun.com)。重复上面1~3步骤。
  6. 又请求本地域名服务器,发现有这个域名的对应配置,(如:sun.com ---> 111.111.111.111),然后将IP返回给浏览器。
  7. 浏览器得到了IP地址(实际上是CDN区域负载均衡服务器的地址),继续请求,CDN会根据用户的IP地址,以及用户请求的内容URL,选择一台离用户近的负载均衡设备,告诉用户向这台设备发起请求。
  8. 区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
  9. 全局负载均衡设备会把IP地址返回给用户。
  10. 用户最后向缓存服务器发起请求,缓存服务器有就响应数据,没有向上级缓存服务器要,一直追朔到网站的源服务器将内容拉到本地。

DNS与CDN

如果使用了CDN会导致DNS解析时间增长。

参考文章:

首先抱歉,没提前联系大佬们,因为私信的位置没找到。。。。。

然后对各位大佬表示感谢~~~,各位大佬指正。

晴天663:juejin.cn/post/685457…

hpoenixf:juejin.cn/post/684490…