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