第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】樣式放在頭部,腳本放在底部

相關文章
相關標籤/搜索