JavaScript代碼的執行會阻塞頁面的解析渲染以及其餘資源的下載javascript
script標籤的位置:html
傳統全部script元素都放在head元素中,必須等到所有js代碼都被下載、解析、執行完畢後,才能開始呈現網頁的內容(瀏覽器在遇到標籤時纔開始呈現內容),這在須要不少js代碼的頁面來講,會形成瀏覽器在呈現頁面時出現明顯的延遲,而延遲期間的瀏覽器窗口將是一片空白。所以。通常把script標籤放在標籤前面。java
defer&async:數組
共同點瀏覽器
不一樣點緩存
不支持async的瀏覽器能夠動態建立script,經過window.onload方法確保頁面加載完畢再將script標籤插入到DOM中。實現腳本的異步載入和執行。服務器
window.onload = function(){
var script = document.createElement('script');
script.setAttribute("type","text/javascript");
script.src = url;
document.body.appendChild(script);
}
複製代碼
ES6的Object.keys()方法cookie
var data = {};
var arr = Object.keys(data);
console.log(arr.length == 0);// true
複製代碼
Object.getOwnPropertyNames()方法網絡
var data = {};
var arr = Object.getOwnPropertyNames(data);
console.log(arr.length == 0);// true
複製代碼
JSON.stringify()app
var data = {};
var result = (JSON.stringify(data) == "{}");
console.log(result);// true
複製代碼
for in遍歷
var data = {};
var result = function() {
for(var key in data) {
return false;
}
return true;
}
alert(result);// true
複製代碼
事件流:指從頁面中接收事件的順序,有冒泡流和捕獲流。
DOM2級事件流:事件捕獲階段、處於目標階段、事件冒泡階段
假設定義的事件綁定在圖中div上,實際的div元素在捕獲階段不會接收到事件,意味着在捕獲階段,事件從document到
DOM2級事件處理程序:
addEventListener(eventName,handlers,boolean)和removeEventListener(),兩個方法都同樣接收三個參數,要處理的事件名,第二個是事件處理程序函數,第三個值爲布爾值。布爾值是true,表示在捕獲階段調用事件處理程序。false時表示在事件冒泡階段調用事件處理程序,通常建議在冒泡階段使用,特殊狀況纔在捕獲階段。
經過addEventListener()添加的事件處理程序只能用removeEventListener()來移除,而且須要參數徹底一致,好比參數都是同一個函數的引用。
事件對象:
事件被觸發時,會默認給事件處理程序傳入一個參數e , 表示事件對象。在事件處理程序內部,對象this始終等於currentTarget的值,target包含事件的實際目標。(e.currentTarget === this)
事件委託:
利用事件冒泡,只在外層父元素指定一個事件處理程序,就能夠管理某一類型的全部事件。
優勢:
例子:
<ul id="myLinks">
<li id="goSomewhere">Go somewhere</li>
<li id="doSomething">Do something</li>
<li id="sayHi">Say hi</li>
</ul>
複製代碼
var item1 = document.getElementById("goSomewhere");
var item2 = document.getElementById("doSomething");
var item3 = document.getElementById("sayHi");
document.addEventListener("click", function (event) {
var target = event.target;
switch (target.id) {
case "doSomething":
document.title = "事件委託";
break;
case "goSomewhere":
location.href = "http://www.baidu.com";
break;
case "sayHi":
alert("hi");
break;
}
})
複製代碼
注意事項:
使用「事件委託」時,並非說把事件委託給的元素越靠近頂層就越好。事件冒泡的過程也須要耗時,越靠近頂層,事件的」事件傳播鏈」越長,也就越耗時。若是DOM嵌套結構很深,事件冒泡經過大量祖先元素會致使性能損失。
Dom文檔加載步驟:
應用場景:
給元素綁定事件處理函數,將綁定的函數放在這兩個事件的回調中,保證能在頁面元素加載完畢以後再綁定事件的函數。
touchstart: 當手指觸摸屏幕時候觸發;
touchmove: 當手指在屏幕上滑動的時候連續觸發;能夠調用阻止默認事件event.preventDefault()阻止屏幕滾動;
touchend: 手指離開屏幕時觸發;
touchcancel: 系統中止跟蹤觸摸時觸發;
以上事件都會冒泡,並且均可以取消冒泡。
觸摸事件屬性:
Touch對象包含的屬性:
name/content屬性:
keywords告訴搜索引擎網頁的關鍵字
description告訴搜索引擎網站的主要內容
robots告訴搜索機器人哪些頁面須要索引,哪些頁面不須要索引
對應的content有all,none,index,noindex,follow,nofollow。默認是all
author
renderer告訴瀏覽器渲染模式
viewport視圖模式
http-equiv/content屬性:
X-UA-Compatible瀏覽模式
expires設定網頁到期時間,到期後必須到服務器上從新傳輸,必須使用GMT時間格式
<meta http-equiv="expires"content="Fri,01Jan201618:18:18GMT">
複製代碼
Pragma(cache模式)
若是禁止瀏覽器從本地緩存訪問則將content設爲no-cache
Refresh自動刷新並在多少秒後且指向新的頁面
<meta http-equiv="Refresh" content="2;URL=http://www.lbw.com">
複製代碼
Set-cookie 網頁若是過時,存盤的cookie也將被刪除,GMT時間格式
<meta http-equiv="Set-Cookie"content="cookievalue=xxx;expires=Friday,12-Jan-200118:18:18GMT;path=/">
複製代碼
Window-target 當content爲_blank,強制當前窗口以獨立頁面顯示
content-Type 顯示字符集
content-Language 顯示語言
Cache-Control 指定請求和響應遵循的緩存機制
七層:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層
TCP:面向鏈接、傳輸可靠(保證數據正確性,保證數據順序)、用於傳輸大量數據(流模式)、速度慢,創建鏈接須要開銷較多(時間,系統資源)
UDP:面向非鏈接、傳輸不可靠、用於傳輸少許數據(數據包模式)、速度快
TCP通常用於文件傳輸(FTP HTTP 對數據準確性要求高,速度能夠相對慢),發送或接收郵件(POP IMAP SMTP 對數據準確性要求高,非緊急應用),遠程登陸(TELNET SSH 對數據準確性有必定要求,有鏈接的概念)等等;UDP通常用於即時通訊(QQ聊天 對數據準確性和丟包要求比較低,但速度必須快),在線視頻(RTSP 速度必定要快,保證視頻連續,可是偶爾花了一個圖像幀,人們仍是能接受的),網絡語音電話(VoIP 語音數據包通常比較小,須要高速發送,偶爾斷音或串音也沒有問題)等等。
HTTPS即加密的HTTP,HTTPS並非一個新協議,而是HTTP+SSL(TLS)。本來HTTP先和TCP(假定傳輸層是TCP協議)直接通訊,而加了SSL後,就變成HTTP先和SSL通訊,再由SSL和TCP通訊,至關於SSL被嵌在了HTTP和TCP之間
線程和進程:
線程是最小的執行單元,而進程由至少一個線程組成。如何調度進程和線程,徹底由操做系統決定,程序本身不能決定何時執行,執行多長時間。 進程指計算機中已運行的程序。 線程指操做系統可以進行運算調度的最小單位。
死鎖:當兩個以上的運算單元,雙方都在等待對方中止運行,以獲取系統資源,可是沒有一方提早退出時,就稱爲死鎖。