第41篇

1)DNS解析过程?如果新申请的域名如何查找DNS?javascript

事实上它是为其余应用层协议工做的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。css

具体过程以下:java

一、浏览器缓存  =》二、系统缓存  =》三、路由器缓存  =》四、ISP(互联网服务提供商)DNS缓存  =》 五、根域名服务器  =》 六、顶级域名服务器  =》 七、主域名服务器  =》 八、保存结果至缓存web

 

(1)浏览器缓存浏览器

当用户经过浏览器访问某域名时,浏览器首先会在本身的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在)缓存

(2)系统缓存性能优化

当浏览器缓存中无域名对应IP则会自动检查,用户计算机系统Hosts文件DNS缓存是否有该域名对应IP服务器

(3)路由器缓存网络

当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客户端的DNS缓存app

(4)ISP(互联网服务提供商)DNS缓存

当在用户客户端找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。好比你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找

(或者向网络设置中指定的local DNS进行查询)

(5)根域名服务器

当以上均未完成,则进入根服务器进行查询。全球尽有13台根域名服务器,1个主根域名服务器,其他12为辅根服务器。根域名收到请求后会查看区域文件记录,

若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器。

(6)顶级域名服务器

顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器

(7)主域名服务器

主域名服务器接收到请求后查询本身的缓存,若是没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确记录

(8)保存结果至缓存

本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,可专断经过这个Ip地址与web服务器创建链接。

 

2)Ajax请求状态及意义

在javascript里面写Ajax的时候,最关键的一步是对XMLHttpRequest对象创建监听,使用onreadystatechange方法。监听的时候要对XMLHttpRequest

对象的请求状态进行判断,一般是判断readyState的值为4,而且http返回状态status的值为200或者304时执行咱们须要的操做。

readyState属性表示Ajax请求的当前状态。

0  =》 表明未初始化。尚未调用open方法

1  =》 表明正在加载。open方法已被调用。但send方法尚未被调用。

2  =》 表明已加载完毕。send已被调用。请求已经开始。

3  =》 表明交互中。服务器正在发送响应。

4  =》表明完成。响应发送完毕。

var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : ActiveXObject("microsoft.XMLHttp");
xhr.open("get", url);
// xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
  if(xhr.readstate == 4) {
    if(xhr.status == 200) {
      var data = responseText;
      return data;
    }
  }
};
xhr.send();

 

3)使用JS实现获取文件扩展名?

function getFileExtension (filename) {
    
    return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);  
}

String.lastIndexOf()   方法返回指定值(本例中的e.),在调用该方法的字符串中最后出现的位置,若是没有则返回-1。

对于'filename'和'.hiddenfile',lastIndexOf的返回值分别为0和-1无符号右移操做符(»>),将-1转换为4294967295,将-2转换为4294967294,
这个方法能够保证边缘状况时文件名不变。,String.prototype.slice() 从上面计算的索引处提取文件的扩展名。若是索引比文件名的长度大,结果为""。

 

4)CommonJs中的require/exports和ES6中的import/export区别

【1】CommonJs模块的重要性是加载时执行,即脚本代码在require的时候,就会所有执行。

一旦出现某个模块被“循环加载”,就只输出已经执行的部分,还未执行的部分不会输出。

【2】ES6 模块是动态引用,若是使用import从一个模块加载变量,那些变量不会被缓存,而是成为一个

指向被加载模块的引用,须要开发者本身保证,真正取值的时候可以取到值。

 

import/export最终都是编译为require/exports来执行的。

CommonJS规范规定,每一个模块内部,module变量表明当前模块。这个变量是一个对象,它的exports

属性(module.exports) 是对外的接口。实际上是加载该模块的module.exports属性。

export命令规定的是对外的接口,必须与模块内部的变量创建一一对应关系。

 

5)项目作过哪些性能优化

【1】减小HTTP请求数

【2】减小DNS查询

【3】使用CDN

【4】避免重定向

【5】减小DOM元素数量

【6】减小DOM操做

【7】使用外部的javascript和css

【8】压缩javascript、css、字体、图片等

【9】使用CSS Sprite

【10】使用iconfont

【11】字体裁剪

【12】多域名分发内容到不一样域名

【13】尽可能减小iframe使用

【14】避免图片src为空

【15】样式放在头部,脚本放在底部

相关文章
相关标签/搜索