• 第41篇


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

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

    具体过程如下:

    1、浏览器缓存  =》2、系统缓存  =》3、路由器缓存  =》4、ISP(互联网服务提供商)DNS缓存  =》 5、根域名服务器  =》 6、顶级域名服务器  =》 7、主域名服务器  =》 8、保存结果至缓存

    (1)浏览器缓存

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

    (2)系统缓存

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

    (3)路由器缓存

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

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

  • 相关阅读:
    Kibana 地标图可视化
    Filebeat 日志收集
    ELK + Redis 日志收集 & HAProxy
    RAID 磁盘阵列
    Logstash 日志收集(补)
    ELK Stack 介绍 & Logstash 日志收集
    ElasticSearch 集群 & 数据备份 & 优化
    ElasticSearch 交互使用
    网络通信体系
    面向对象思想
  • 原文地址:https://www.cnblogs.com/huen2015/p/11168724.html
Copyright © 2020-2023  润新知