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。
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】样式放在头部,脚本放在底部