利用域名的发散和收敛提升前端的加载速度

域名发散:每个浏览器,允许对每个域名的连接数一般是有上限的;另外,为什么浏览器要做并发限制呢;域名收敛;http请求过程;域名结构;ns为何

利用域名的发散和收敛提升前端的加载速度

文/chokcoco

性能优化一直是前端工作中十分重要的一环,都说从 10 到 1 容易,从 1 到 0 很难。而随着前端技术的飞速发展,没有什么技术或者法则是金科玉律一沉不变的。

很佩服那些勇于挑战权威,推陈出新的勇者,是他们让我们的技术不断的变革更加的卓越。好像扯远了,本文主要想谈谈两个名词,域名发散和域名收敛

域名发散

这个很好理解,前端er都知道,pc 时代为了突破浏览器的域名并发限制,遵循这样一条定律:

· http 静态资源采用多个子域名

嗯,为什么要这样做呢,目的是充分利用现代浏览器的多线程并发下载能力。 由于浏览器的限制,每个浏览器,允许对每个域名的连接数一般是有上限的

现代浏览器内每个 hostname 的最大连接数基本都是6个,IE 稍显傲娇,总体而言并发数不高。 所以 PC 时代对静态资源优化时,通常将静态资源分布在几个不同域,保证资源最完美地分域名存储,以提供最大并行度,让客户端加载静态资源更为迅速。

另外,为什么浏览器要做并发限制呢?

1、究其根本原因,在以前,服务器的负载能力差,稍微流量大一点服务器就容易就崩溃。 所以为了保护服务器不被强暴到崩溃,浏览器要对 max connections(最大并发数)进行限制。如果每个用户的最大并发数不限制的话,服务器的负载能力会大幅下降。 

2、另外还有一个方面就是, 防止 DDOS 攻击。最基本的 DoS 攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。如果不限制并发请求数量,后果,啊哦,你懂的。

域名收敛

本文的重点是想谈谈域名收敛,顾名思义,域名收敛的意思就是建议将静态资源只放在一个域名下面,而非发散情况下的多个域名下。

上面也说到了,域名发散可以突破浏览器的域名并发限制,那么为要反其道而行之呢?因为因地制宜,不同情况区别对待,域名发散是 PC 时代的产物,而现在进入移动互联网时代,通过无线设备访问网站,App的用户已占据了很大一部分比重,而域名发散正是在这种情况下提出的。且听我一步步分析。  

http 请求过程

首先要知道,使用一个 http 请求去请求一个资源时,会经历些什么。简单而言:

1、dns 域名解析 –> 

2、发起 TCP 的 3 次握手 –> 

3、建立 TCP 连接后发起 http 请求 –> 

4、服务器响应 http 请求

5、……略

在这里第一步,也是关键的第一步 DNS 解析,在移动端的 http 请求耗时中,DNS 解析占据了大部分时间。 说 DNS 域名解析过程前,再科普一下域名结构。  

域名结构

域名的结构(或者叫命名空间)是一个树状结构,有树就得有根,这个根是一个点‘.’(dot)。

以 www.example.com 为例,完整的形式应该是 www.example.com. ,注意最后一个点,就是根结点 root ,只不过平时是浏览器或者系统的解析器自动帮我们补全了。我们要想获取根域都有那些,可以在终端下直接使用 dig 命令(需要安装 dig 指令),如下: 

可以看到有 13 个,大部分都是在国外,根节点之后就是顶级域名,就是.cn .com .gov 这些,顶级域划分为通用顶级域 (com、org、net 等)和国家与地区顶级域(cn、hk、us、tw 等)。我们可以继续使用 dig 查看一下 顶级域名的解析路径,加上 +trace 参数选项,意思是追踪 DNS 解析过程,如下: 

可以看到是先到根节点,再查找到 com ,就是根结点会告知下一个结点 com 在哪:就是 com. 172800 IN NS [a-m].gtld-servers.net。 ok,顶级域之后就是我们熟知的一级域名,譬如 www.example.com 中的 example 就是一级域 。有兴趣的可以自己试着用 dig 指令再追踪一下:dig example.com. +trace ,可以看到是从根节点从右向左逐步查找的。  

ns 为何

什么是权威呢,通俗点讲其实是某些域的权威,也就是权威上面有这些域的最新,最全的数据,所有这些域的数据都应该以此为准(只有权威可以增删改这些域的数据),就像上面  dig com +trace 的结果可以看到,com 的权威是上面的 13 个根域。同理,所有的顶级域(cn、org、net 等等)的权威都是根域。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年5月4日 03:54:32
下一篇 2024年5月4日 03:56:37

相关推荐

  • java实现热加载,java热重载

    用jetty做嵌入式开发,怎样才能让class热加载。 首先要解决文件被锁定的问题。文件被锁定是由于在使用windows系统时,jetty默认在内存中映射了这些文件,而windows会锁定内存映射的文件。 由于Jetty本身代码的原因,WebApplicationInitializer的实现必须直接实现接口,不能继承 AbstractContextLoade…

    2024年5月23日
    4100
  • linux加载光驱报错,linux如何加载光驱

    linux下挂载光驱问题 1、Linux中挂载光驱输入命令mount/mnt/cdrom显示没有那个目录,是设置错误造成的,解决方法如下:首先将系统镜像文件与光驱关联(实际环境是将安装盘放入光驱)。然后将光驱挂载到/mnt下mount/dev/cdrom /mnt。 2、找到光盘的完整路径名。在命令行输入:ls -l /dev | grep cdrom。可以…

    2024年5月22日
    4700
  • linux域名配置,linux域名配置文件位置

    ECS?Linux?服务器如何配置网站以及绑定域名? 个人建站的办法很简单,首先网站1核2G内存1M带宽,40G高效云盘。要准备以下的资料 注册域名。最好能和网站内容有点关联 选择网站系统。例如wordpress,zblog,emblog等都可以。 云主机怎么绑定域名下面分3个操作系统来介绍Windows2003操作系统点击“开始”运行。输入inetmgr回…

    2024年5月22日
    4700
  • linux加载硬盘权限,linux 硬盘权限

    Linux系统如何加载U盘或移动硬盘 1、首先,将U盘插入电脑,进入Linux系统主界面,再使用Ctrl+Alt+T快捷键打开命令窗口,获取高级用户权限,在窗口中输入命令:sudo -i,按enter确认后输入密码,如下图所示,然后进入下一步。 2、操作步骤如下: 首先插入u盘到电脑主机u *** 接口处(建议插入到主机箱后置的u *** 接口),然后打开U…

    2024年5月22日
    4300
  • c语言加载dll,c语言加载背景音乐代码

    c语言怎么调用别人的dll文件 1、(1)编写程序时,你要包含(#include \什么.h\) dll文件作者提供 的 头文件(.h文件) 。程序里,便和普通函数调用一样,去调用它的函数。(2)程序编译时,你要链接 dll文件作者提供 的 (.lib文件) 库文件。 2、可以是可以,比较麻烦。方法我目前所知的有两种 一种是用C#写出COM组件,在系统中注册…

    2024年5月21日
    4400
  • pythonjava速度,python速度太慢

    python的性能 1、)Python是解释型语言,能跨平台解释型语言一般都是跨平台的(可移植性好),Python也不例外,我们已经在《编译型语言和解释型语言的区别》中进行了讲解,这里不再赘述。 2、py 关键代码可以依赖于扩展包Python使许多编程任务变得简单,但是对于很关键的任务并不总是提供最好的性能。使用C、C++或者机器语言扩展包来执行关键任务能极…

    2024年5月20日
    4500
  • linux动态加载so原理,linux添加动态库

    什么是linux中的SO动态库 SO文件是Linux下共享库文件,它的文件格式被称为ELF文件格式。由于Android操作系统的底层基于Linux系统,所以SO文件可以运行在Android平台上。Android系统也同样开放了C/C++接口供开发者开发Native程序。 so的全称是shared object,即共享动态链接库,类似于windows下的dll…

    2024年5月20日
    4100
  • linux加载ko文件,linux 加载iso

    Linux系统下.ko文件是什么文件?.so文件是什么文件? SO文件格式即ELF文件格式,它是Linux下可执行文件,共享库文件和目标文件的统一格式。根据看待ELF文件的不同方式,ELF文件可以分为链接视图和装载视图。链接视图是链接器从链接的角度看待静态的ELF文件。 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能…

    2024年5月19日
    3900
  • java加载jar文件,java添加jar包怎么部署

    java可以动态加载一个jar包,并且调用里面的类和方法吗? 1、动态加载jar包,需要用到java.net.URLClassLoader这个类,它可以指定一个路径将jar包或者classes文件加载到类空间。加载完毕后,直接调用loadClass就可以加载指定的类,然后通过反射生成实例或者调用方法即可。 2、你所说的不可用是哪方面的?开发环境下的不可用,还…

    2024年5月19日
    4000
  • linux增加ip.域名映射,linux如何设置ip映射

    如何将虚拟机中centos版本的linux的ip地址与域名相互解析? 1、\x0d\x0a可以搭建自己的dns服务器。(yum install bind)\x0d\x0a然后修改/etc/resolv.conf\x0d\x0a将自己的dns服务的IP地址写入。 2、明确LINUX服务器内网访问地址端口,确保LINUX服务器正常开启SSH服务,在内网SSH可以…

    2024年5月19日
    4700

发表回复

登录后才能评论



关注微信