慢慢整理、修改、豐富。更多內容請關注 GitHub
優勢:javascript
HTML5
自己是由W3C
推薦出來的。Flash
和Silverlight
;SEO
很友好;缺點:css
Firefox4
的web socket
和透明代理的實現存在嚴重的安全問題,同時web storage
、web socket
這樣的功能很容易被黑客利用,來盜取用戶的信息和資料。web worker、web socket
、web storage
等新特性,後臺甚至瀏覽器原理的知識,機遇的同時也是巨大的挑戰IE9
如下瀏覽器幾乎全軍覆沒HTML5
新增了 27 個元素,廢棄了 16 個元素html
新特性:前端
video
和 audio
成爲了在全部 Web
中的一等公民2D/3D
繪圖 & 效果:提供了一個更加分化範圍的呈現選擇Device Access
:可以處理各類輸入和輸出設備根據現有的標準規範,把 HTML5
的元素按優先級定義爲結構性屬性、級塊性元素、行內語義性元素和交互性元素 4 大類。vue
結構性元素主要負責web
上下文結構的定義java
結構性元素 | 用途 |
---|---|
section | 在 web 頁面應用中,該元素也能夠用於區域的章節描述。 |
header | 頁面主體上的頭部, header 元素每每在一對 body 元素中。 |
footer | 頁面的底部(頁腳),一般會標出網站的相關信息。 |
nav | 專門用於菜單導航、連接導航的元素,是 navigator 的縮寫。 |
article | 用於表現一篇文章的主體內容,通常爲文字集中顯示的區域。 |
塊性元素主要完成web
頁面區域的劃分,確保內容的有效分割node
塊級元素 | 用途 |
---|---|
aside | 用於表達註記、貼士、側欄、摘要、插入的引用等做爲補充主體的內容。 |
figure | 是對多個元素進行組合並展現的元素,一般與 ficaption 聯合使用。 |
code | 表示一段代碼塊。 |
dialog | 用於表達人與人之間的對話,該元素包含 dt 和 dd 這兩個組合元素, dt 用於表示說話者,而 dd 用來表示說話內容。 |
行內語義性元素主要完成web
頁面具體內容的引用和描述,是豐富內容展現的基礎css3
行內語義元素 | 用途 |
---|---|
meter | 表示特定範圍內的數值,可用於工資、數量、百分比等。 |
time | 表示時間值。 |
progress | 用來表示進度條,可經過對其 max 、 min 、 step 等屬性進行控制,完成對進度的表示和監事。 |
video | 視頻元素,用於支持和實現視頻文件的直接播放,支持緩衝預載和多種視頻媒體格式。 |
audio | 音頻元素,用於支持和實現音頻文件的直接播放,支持緩衝預載和多種音頻媒體格式。 |
交互性元素主要用於功能性的內容表達,會有必定的內容和數據的關聯,是各類事件的基礎。git
交互性元素 | 用途 |
---|---|
details | 用來表示一段具體的內容,可是內容默承認能不顯示,經過某種手段(如單擊)與 legend 交互纔會顯示出來。 |
datagrid | 用來控制客戶端數據與顯示,能夠由動態腳本及時更新。 |
menu | 主要用於交互菜單(曾被廢棄又被從新啓用的元素)。 |
command | 用來處理命令按鈕。 |
(1)、Doctype
聲明位於文檔中的最前面,處於標籤以前。告知瀏覽器的解析器,用什麼文檔類型規範來解析這個文檔。 github
(2)嚴格模式的排版和JS
運做模式是以該瀏覽器支持的最高標準運行。
(3)在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。
(4)DOCTYPE
不存在或格式不正確會致使文檔以混雜模式呈現。
web
標準
web
標準:一系列標準的集合,包括結構化標準語言(html
等)、表現標準語言(css
)、行爲標準語言(EMCAScript
等)。這些標準大部分由萬維網聯盟起草和發佈web
標準:爲了解決因瀏覽器版本不一樣、軟硬件設備不一樣致使的需多版本開發的問題W3C
:萬維網聯盟,是一個web開發的國際性聯盟標準認識:
css
和 js
腳本src
指向外部資源的位置,指向的內容將會嵌入到文檔中當前標籤所在位置;在請求 src 資源時會將其指向的資源下載並應用到文檔內,用於替換當前元素,當瀏覽器解析到該元素時,會暫停其餘資源的下載和處理,直到將該資源加載、編譯、執行完畢href
指向網絡資源所在位置,創建和當前元素(錨點)或當前文檔(連接)之間的連接,用於在當前文檔和引用資源之間確立聯繫。link
是 XHTML
標籤,除了加載 CSS
外,還能夠定義 RSS
等其餘事務; @import
屬於 CSS
範疇,只能加載 CSS
。link
引用 CSS
時,在頁面載入時同時加載; @import
須要頁面網頁徹底載入之後加載。link
是 XHTML
標籤,無兼容問題; @import
低版本的瀏覽器不支持。link
支持使用 Javascript
控制 DOM
去改變樣式;而 @import
不支持。盒子模型有兩種,分別是IE
盒子和標準W3C
盒子模型。
W3C
盒子模型包括margin
、border
、padding
、content
,而且content
部分不包含其餘部分。
IE
盒子模型包括margin
、border
、padding
、content
,和標準W3C
盒子模型不一樣的是,IE
盒子模型的content
部分包含了borde
和padding
標準的css盒子模型:寬度=內容的寬度+邊框的寬度+加上內邊框的寬度IE
盒模型:width = content+padding-Left+padding-right+border-left + border-right
#id
class
div p
等a img div p
等a:hover
等input[type="text"]
等li:firth-child
等p + span
h1, h2, h3,...,h6
選擇器優先級順序:!important> 內聯樣式 > ID選擇器 > 類選擇器 > 元素和僞元素 > 通配符 > 繼承 > 默認
block
:指定對象爲塊級元素/顯示inline
:指定對象爲行內元素inline-block
:指定對象爲行內塊級元素none
:取消樣式normal
:指定對象爲默認樣式flex
:指定對象爲彈性盒模型table
:指定對象爲塊元素級的表格text-align: center
能夠實如今塊級元素內部的行內元素水平居中。此方法對inline
、inline-block
、inline-table
和inline-flex
元素水平居中都有效。margin-left
和margin-right
設置爲auto
table
+ margin
:先將子元素設置爲塊級表格來顯示(相似),再將其設置水平居中,display:table
在表現上相似block
元素,可是寬度爲內容寬。absolute
+ transform
:先將父元素設置爲相對定位,再將子元素設置爲絕對定位,向右移動子元素,移動距離爲父容器的一半,最後經過向左移動子元素的一半寬度以達到水平居中.不過transform
屬於css3
內容,兼容性存在必定問題,高版本瀏覽器須要添加一些前綴。flex
+justify-content
flex
+margin
:經過flex
將父容器設置爲爲Flex
佈局,再設置子元素居中flex
佈局:其中justify-content
用於設置彈性盒子元素在主軸(默認橫軸)方向上的對齊方式inline-block
:將要水平排列的塊狀元素設爲display:inline-block
,而後在父級元素上設置text-align:center
,達到與上面的行內元素的水平居中同樣的效果。relative
+ 負margin
flex
)的justify-content
屬性,實現水平居中,子元素有無定寬不影響margin: 0 auto
來實現line-height
設置爲height
的高度flex
佈局(flex
):利用flex佈局實現垂直居中,其中
flex-direction: column`定義主軸方向爲縱向。這種方式在較老的瀏覽器存在兼容性問題table
):利用表佈局的vertical-align: middle
能夠實現子元素的垂直居中absolute
+負margin
(已知高度寬度);經過絕對定位元素距離頂部50%,並設margin-top
向上偏移元素高度的一半,就能夠實現了absolute
+transform
:當垂直居中的元素的高度和寬度未知時,能夠藉助CSS3
中transform
屬性向Y軸反向偏移50%的方法實現垂直居中。可是部分瀏覽器存在兼容性的問題。flex
+align-items
:經過設置flex
佈局中的屬性align-items
,使子元素垂直居中table-cell
+vertical-align
:經過將父元素轉化爲一個表格單元格顯示(相似 <td>
和 <th>
),再經過設置 vertical-align
屬性,使表格單元格內容垂直居中。margin
值,兼容全部瀏覽器margin:auto
(已知高度寬度)IE
瀏覽器CSS3
(未知元素的高寬)Css3
的transform
,能夠輕鬆的在未知元素的高寬的狀況下實現元素的垂直居中。CSS3
的transform
當然好用,但在項目的實際運用中必須考慮兼容問題,大量的hack
代碼可能會致使得不償失。flex
佈局,其中justify-content
用於設置或檢索彈性盒子元素在主軸(橫軸)方向上的對齊方式;而align-items
屬性定義flex
子項在flex
容器的當前行的側軸(縱軸)方向上的對齊方式。不能兼容低版本的IE
瀏覽器。flex/grig
和margin:0 auto
flex
佈局或是grid
佈局,子元素只要寫 margin: auto
便可,不能兼容低版本的IE
瀏覽器優雅降級: Web
站點在全部新式瀏覽器中都能正常工做,若是用戶使用的是老式瀏覽器,則代碼會檢查以確認它們是否能正常工做。因爲IE獨特的盒模型佈局問題,針對不一樣版本的IE
的hack
實踐過優雅降級了,爲那些沒法支持功能的瀏覽器增長候選方案,使之在舊式瀏覽器上以某種形式降級體驗卻不至於徹底失效.
漸進加強: 從被全部瀏覽器支持的基本功能開始,逐步地添加那些只有新式瀏覽器才支持的功能,向頁面增長無害於基礎瀏覽器的額外樣式和功能的。當瀏覽器支持時,它們會自動地呈現出來併發揮做用。
單位 | 描述 |
---|---|
% | 百分比 |
px |
像素 |
em |
相對單位。相對於父元素計算,該元素的1em = 父元素px * 2 |
rem |
相對單位。相對於根元素html ,該元素的1rem = html的px * 2 |
rpx |
微信小程序的相對單位,1rpx = 屏幕寬度/750px |
外邊距摺疊:相鄰的兩個或多個外邊距 (margin
) 在垂直方向會合併成一個外邊距(margin)
相鄰: 沒有被非空內容、padding、border 或 clear 分隔開的margin特性. 非空內容就是說這元素之間要麼是兄弟關係或者父子關係
垂直方向外邊距合併計算:
a、參加摺疊的margin
都是正值:取其中 margi
n 較大的值爲最終 margin
值。
b、參與摺疊的 margin
都是負值:取的是其中絕對值較大的,而後,從 0 位置,負向位移。
c、參與摺疊的 margin
中有正值,有負值:先取出負 margin
中絕對值中最大的,而後,和正 margin
值中最大的 margin
相加。
position:static | relative | absolute | fixed | center | page | sticky
默認值:static
,center
、page
、sticky
是CSS3中新增長的值。
(1)、static
能夠認爲靜態的,默認元素都是靜態的定位,對象遵循常規流。此時4個定位偏移屬性不會被應用,也就是使用left
,right
,bottom
,top
將不會生效。
(2)、relative
相對定位,對象遵循常規流,而且參照自身在常規流中的位置經過top
,right
,bottom
,left
這4個定位偏移屬性進行偏移時不會影響常規流中的任何元素。
(3)、absolute
a、絕對定位,對象脫離常規流,此時偏移屬性參照的是離自身最近的定位祖先元素,若是沒有定位的祖先元素,則一直回溯到body
元素。盒子的偏移位置不影響常規流中的任何元素,其margin
不與其餘任何margin
摺疊。
b、元素定位參考的是離自身最近的定位祖先元素,要知足兩個條件,第一個是本身的祖先元素,能夠是父元素也能夠是父元素的父元素,一直找,若是沒有則選擇body爲對照對象。第二個條件是要求祖先元素必須定位,通俗說就是position
的屬性值爲非static
都行。
(4)、fixed
固定定位,與absolute
一致,但偏移定位是以窗口爲參考。當出現滾動條時,對象不會隨着滾動。
(5)、center
與absolute
一致,但偏移定位是以定位祖先元素的中心點爲參考。盒子在其包含容器垂直水平居中。(CSS3)
(6)、page
與absolute
一致。元素在分頁媒體或者區域塊內,元素的包含塊始終是初始包含塊,不然取決於每一個absolute
模式。(CSS3)
(7)、sticky
對象在常態時遵循常規流。它就像是relative
和fixed
的合體,當在屏幕中時按常規流排版,當捲動到屏幕外時則表現如fixed
。該屬性的表現是現實中你見到的吸附效果。(CSS3)
由於瀏覽器的兼容問題,不一樣瀏覽器對有些標籤的默認值是不一樣的,若是沒對CSS初始化每每會出現瀏覽器之間的頁面顯示差別。
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; } body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; } h1, h2, h3, h4, h5, h6{ font-size:100%; } address, cite, dfn, em, var { font-style:normal; } code, kbd, pre, samp { font-family:couriernew, courier, monospace; } small{ font-size:12px; } ul, ol { list-style:none; } a { text-decoration:none; } a:hover { text-decoration:underline; } sup { vertical-align:text-top; } sub{ vertical-align:text-bottom; } legend { color:#000; } fieldset, img { border:0; } button, input, select, textarea { font-size:100%; } table { border-collapse:collapse; border-spacing:0; }
SVG
可縮放矢量圖形( Scalable Vector Graphics
)是基於可擴展標記語言( XML
),用於描述二維矢量圖形的一種圖形格式。
SVG
嚴格聽從 XML 語法,並用文本格式的描述性語言來描述圖像內容,所以是一種和圖像分辨率無關的矢量圖形格式。
特色:
瀏覽器支持:
Internet Explorer9
,火狐,谷歌 Chrome
, Opera
和 Safari
都支持 SVG
。IE8
和早期版本都須要一個插件 - 如 Adobe SVG
瀏覽器,這是免費提供的。createDocumentFragment() // 建立一個DOM片斷 createElement() // 建立一個具體的元素 createTextNode() // 建立一個文本節點
appendChild() removeChild() replaceChild() insertBefore() // 在已有的子節點前插入一個新的子節點
getElementsByTagName() // 經過標籤名稱 getElementsByName() // 經過元素的Name屬性的值(IE容錯能力較強,會獲得一個數組,其中包括id等於name值的) getElementById() // 經過元素Id,惟一性
優勢:
Security sandbox
缺點:
iframe
會阻塞主頁面的Onload
事件null
是一個表示"無"的對象,轉爲數值時爲0
undefined
是一個表示"無"的原始值,轉爲數值時爲NaN
當聲明的變量還未被初始化時,變量的默認值爲undefined
null
用來表示還沒有存在的對象,經常使用來表示函數企圖返回一個不存在的對象
undefined
表示 「缺乏值」,就是此處應該有一個值,可是尚未定義。典型用法是:
undefined
undefined
undefined
null
表示「沒有對象」,即該處不該該有值。典型用法是:
this
變量引用該對象,同時還繼承了該函數的原型this
引用的對象中this
所引用,而且最後隱式的返回 this
var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);
JSON
(JavaScript Object Notation
) 是一種輕量級的數據交換格式。它是基於JavaScript
的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小
defer
和async
DOM
方式(建立script
,插入到DOM
中,加載完畢後callBack
)js
動態改變某個類的某個方法的運行環境
XMLHttpRequest
對象,也就是建立一個異步調用對象HTTP
請求,並指定該HTTP
請求的方法、URL
及驗證信息HTTP
請求狀態變化的函數HTTP
請求JavaScript
和DOM
實現局部刷新MVVM
分爲Model
、View
、ViewModel
三部分。
Model
表明數據模型,定義數據和業務邏輯,訪問數據層View
表明視圖,展現頁面結構、佈局和外觀(UI)ViewModel
表明視圖模型,負責監聽Model
數據變化並更新視圖,處理用戶交互Model
和View
是經過ViewModel
,Model
的數據變化會觸發View
的更新,View
的交互操做也會使Model
的數據發生改變。只須要針對數據進行維護操做,數據的自動同部不須要經過操做dom
實現。
內置指令
指令的本質就是語法糖或者標誌位。
指令 | 做用 | 指望數值類型 |
---|---|---|
v-text | 更新元素文本內容 | string |
v-html | 更新元素的innerHTML ,不推薦使用 |
string |
v-show | 條件渲染。根據表達式的真假值,控制元素的顯示或隱藏 | any |
v-if | 條件渲染。根據表達式的值的真假條件選擇是否渲染元素這個節點 | any |
v-else | 條件渲染。根據v-if 的相反條件進行元素渲染 |
any |
v-else-if | 條件渲染。作v-if 的鏈式調用 |
any |
v-for | 列表渲染。對數據進行遍歷渲染,最好提供key 值 |
Array / Object / number / string |
v-on | 事件處理。綁定事件監聽器,事件類型由參數指定,表達式能夠是方法名或內聯語句。 | Function / Inline Statement / Object |
v-bind | 動態綁定。動態綁定一個或多個特性,或一個組件prop 到表達式 |
any (with argument) / Object (without argument) |
v-model | 表單綁定。在表單或組件是上建立雙向綁定 | 隨表單控件類型變化 |
v-pre | 跳過該元素和它的子元素的編譯過程,直接輸出模板字符串 | |
v-slot | 做用域插槽 | |
v-cloak | 設置 [v-cloak] { display: none } 能夠在渲染時延後加載Vue 實例,避免閃現 |
|
v-once | 元素和組件只渲染一次,從新渲染,元素/組件及其全部的子節點將被視爲靜態內容並跳過 |
自定義指令
不是剛需,和生命週期有很大關係,可見五個生命週期鉤子。
bind
inserted
update
componentUpdated
unbind
Vue
實例化時,遍歷訪問data
裏的全部屬性,使用 Object.defineProperty
將其屬性所有轉換爲getter/setter
進行依賴追蹤以便修改屬性時進行變動通知,就是一個代理層,無論是獲取數據仍是什麼,都是在代理層裏進行,當組件渲染時,會從代理層進行代理映射,組件渲染須要什麼就會放在watcher
中,由於每一個組件實例都有相應的 watcher 實例對象,它會在組件渲染的過程當中把屬性記錄爲依賴,以後當依賴項的 setter
被調用時,會通知 watcher 從新計算,從而導致它關聯的組件得以更新,沒有與之關聯的組件就不會更新。
model
的更新會觸發view
的更新,view
的更新也會觸發model
的更新
model
的更新會觸發view
的更新,可是view
的更新不會觸發model
的更新
Vue
是單向數據流,不是雙向綁定Vue
的雙向綁定不過是語法糖Object.defineProperty
是用來作響應式更新的,和雙向綁定不要緊簡單實現,有一個子組件輸入框,一個按鈕,父組件經過props
傳值給子組件,當按鈕增長時,子組件經過$emit
通知父組件修改相應的props
值。
<div id="app"> <parent></parent> </div> <script> var childNode = { template:` <div class = "child"> <div> <span>子組件數據</span> <input v-model="childMsg"> <button @click=add>+1</button> </div> </div> `, data(){ return{ childMsg:0 } }, methods: { add(){ this.childMsg++; this.$emit('update:foo',this.childMsg) } } }; var parentNode = { template:` <div class="parent"> <div> <span>父組件數據:{{msg}}</span> <child :foo.sync="msg"></child> </div> </div> `, components:{ 'child':childNode }, data(){ return{ 'msg':0 } } }; let vm = new Vue({ el:'#app', components:{ 'parent':parentNode } })
computed
)的應用watch
watch
提供一個底層API
,能夠執行任何邏輯,如函數節流、Ajax
異步獲取數據,操做DOM
,可是不推薦computed
能作的,偵聽器watch
都能作,反之不行computed
的儘可能不用偵聽器watch
生命週期一共分爲三個階段,建立階段(執行一次)、更新階段(執行屢次)、銷燬階段
返回頂部
### (1)生命週期的應用場景
鉤子 | 調用 | 類型 | 是否在服務端渲染期間調用 |
---|---|---|---|
beforeCreate | Vue 實例初始化以後,數據觀察和事件配置以前 |
Function | Yes |
create | 實例建立完成(數據觀察/屬性和方法運算/偵聽器配置/事件回調)以後,掛載以前 | Function | Yes |
beforeMount | 掛載開始以前,模板render 函數首次調用 |
Function | Yes |
mounted | 實例掛載完成以後,異步請求/操做DOM /定時器 |
Function | No |
beforeUpdate | DOM 被patch 以前調用進行數據修改,能夠移除已添加的事件監聽器等,不可更改依賴數據 |
Function | No |
updated | 組件 DOM 更新完成,避免在此期間更改狀態(依賴數據) | Function | No |
actived | keep-alive 組件激活時 | Function | No |
deactived | keep-alive 組件停用時 | Function | No |
beforeDestroy | 實例銷燬以前,能夠移除已添加的事件監聽器等 | Function | No |
destroyed | 實例銷燬 | Function | No |
errorCaptured | 當任何一個來自後代組件的錯誤時被捕獲時 收到三個參數:錯誤對象、發生錯誤的組件實例,和一個包含錯誤在何處被捕獲信息的字符串 返回 false,以阻止該錯誤繼續向上冒泡 |
Function | No |
通常用於作展現用。
functional:true
無狀態、無實例、沒有this
上下文、無生命週期
Vue
組件 = Vue
實例 = new Vue(options)
,每一個組件就是一個Vue
實例
組件能夠是頁面中每個區域板塊,也能夠是某一個複用業務邏輯,也能夠是每個單頁面。
### (1)組件的構成
就以上面的雙向數據綁定實現爲例:
屬性:
props
:組件props
中聲明的屬性,父組件使用props
定義數據屬性,向子組件傳遞數據attrs
:沒有聲明的屬性,默認自動掛載到組件根元素上,設置inheritAttrs
爲false
能夠關閉自動掛載class
、style
:掛載在組件根元素上,支持字符串、對象、數組等多種語法事件event
:
@click
、@input
、@change
、@xxx
等事件,經過this.$emit('xxx',...)
觸發自定義事件event
向父組件發送消息@input.trim
、@click.stop
、@submit.prevent
等,通常用於原生HTML
元素,自定義組件須要自行開發支持插槽slot
:
slot
進行組件內容分發,插入子組件內容,簡單點就是傳遞內容的 <template slot="xxx">...</template>
、<template v-slot="xxx">...</template>
<template slot="xxx" slot-scope="props">...</template>
、<template v-slot:xxx="props">...</template>
### (2)組件通訊
props
向子組件通訊,子組件使用$emit
向父組件傳遞消息v-on
監聽子組件的任何事件,子組件使用$emit
傳入事件,這樣父組件就會收到事件並更新Vuex
比較好管理<p ref="p">hello</p> <child-component ref="child></child-component>
callback ref
組件的更新都是由數據驅動的,沒有特殊狀況,任何更改DOM
的行爲都是在做死。
包含三個部分:
props
data
vuex vue.observable
注意:狀態和屬性的改變未必會觸發組件更新
通常用於底層組件通訊。底層組件通訊,不只屬性要層層傳遞,事件也要層次冒泡,這是很耗性能的。
Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,讓構建單頁面應用變得易如反掌。包含的功能有:
下面是一個簡單路由的實現:
<div id="app" class="demo"> <h1>Hello App!</h1> <p> <!-- 經過router-link導航 --> <!-- 經過傳入'to '屬性指定連接--> <!-- <router-link> 默認會被渲染成一個 `<a>` 標籤--> <router-link to="/foo">go to Foo</router-link> <router-link to="/bar">go to Bar</router-link> </p> <!-- 路由出口 --> <!-- 路由匹配到的組件將渲染在這裏 --> <router-view></router-view> </div> <!-- 0. 若是使用模塊化機制編程,導入Vue和VueRouter,要調用 Vue.use(VueRouter) 1. 定義 (路由) 組件。 2.定義路由 --> <script> //1. 定義 (路由) 組件。 const Foo = {template:'<div>foo</div>'}; const Bar = {template:'<div>bar</div>'}; //2.定義路由 //每一個路由應該映射一個組件。其中component能夠是經過Vue.extend()建立的組件構造器 //或者只是一個組件配置對象 const routes = [ {path:'/foo',component:Foo}, {path:'/bar',component:Bar} ] //3.建立router實例,而後傳‘routes’配置 const router = new VueRouter({ routes//(縮寫)至關於routes:routes }) //4.建立和掛載根實例 //要記得經過router配置參數注入路由,從而讓整個應用都有路由功能 const app = new Vue({ router }).$mount('#app');
瀏覽器 | Chrome | Firefox | Safari | IE | Opera |
---|---|---|---|---|---|
渲染引擎 | Blink | Gecko | Webkit | Trident | Blink |
JS引擎 | V8 | SpiderMonkey | Nitro | Chakra | V8 |
前綴 | -webkit | -moz | -webkit | -ms | -o |
瀏覽器內核主要分爲兩部分:渲染引擎 和 JS
引擎:
HTML
、 XML
、圖像等等)、整理訊息(例如加入 CSS
等),以及計算網頁的顯示方式,而後會輸出至顯示器或打印機。瀏覽器的內核的不一樣對於網頁的語法解釋會有不一樣,因此渲染的效果也不相同。javascript
來實現網頁的動態效果。sessionStorage
和 localStorage
是 HTML5 Web Storage API
提供的,能夠方便的在 web
請求之間保存數據。有了本地數據,就能夠避免數據在瀏覽器和服務器間沒必要要地來回傳遞。
sessionStorage
、 localStorage
、 cookie
都是在瀏覽器端存儲的數據
區別 | 存儲時間 | 單個域名存儲量 | 全部域名存儲量 | 個數限制 | 是否發送到服務器 |
---|---|---|---|---|---|
Cookie | 瀏覽器關閉以前有效 | 4k | 4k | yes | yes |
LocalStorage | 永久存儲 | 5MB | 無限制 | ||
SessionStorage | 只在 Session 內有效 | 存儲量更大(推薦沒有限制,可是實際上各瀏覽器也不一樣) |
更多詳見瀏覽器數據存儲
Get | Post |
---|---|
從服務器上獲取數據 | 向服務器傳送數據 |
提交過程在url 中可見 |
傳送過程用戶不可見 |
服務器端用 Request.QueryString 獲取變量的值 |
服務器端用 Request.Form 獲取提交的數據 |
傳送的數據量較小,不能大於 2KB |
傳送的數據量較大,通常被默認爲不受限制。但理論上, IIS4 中最大量爲 80KB , IIS5 中爲 100KB |
安全性低 | 安全性較高 |
嚴格模式又稱標準模式,有doctype
聲明,則是標準模式,瀏覽器按W3C
標準解析執行代碼。
反之沒有就是怪異模式,混雜模式又稱怪異模式,瀏覽器使用本身的方式解析執行代碼。
Chrome | Firefox | Safari | IE | Opera | |
---|---|---|---|---|---|
渲染引擎 | Blink | Gecko | Webkit | Trident | Blink |
JS引擎 | V8 | SpiderMonkey | Nitro | Chakra | V8 |
前綴 | -webkit | -moz | -webkit | -ms | -o |
透明屬性opacity,解決IE9如下瀏覽器不能使用opacity問題:
opacity:0.5; filter:alpha(opacity = 50);//IE6-IE9習慣使用filter屬性來 進行實習 filter:progrid:DXImageTransform.Microsoft.Alpha(style = 0,opacity = 50);//IE4-IE9都支持
1.判斷IE瀏覽器
<!--[if IE ]> ie8 <![endif]-->
2.判斷Safari瀏覽器
let isSafari = /a/.__proto__=='//';
3.判斷Chrome瀏覽器
let isChrome = Boolean(window.chrome);
不一樣瀏覽器樣式存在差別,可使用這個去除差別
不加樣式控制,不一樣瀏覽器外補丁和內補丁不一樣,用如下方法:
* { margin:0; padding:0; }
塊屬性標籤設置浮動float
後,又有橫行的margin
狀況下,在IE6
顯示margin
比設置的大。
解決方案:在float
的標籤樣式控制中加入 display:inline
,將其轉化爲行內屬性
圖片默認有間距,設置font-size
### (3)交互兼容性(JavaScript)
(1)封裝適配器進行事件兼容,過濾事件句柄綁定、移除、冒泡阻止以及默認事件行爲處理
var helper = {} //綁定事件 helper.on = function(target, type, handler) { if(target.addEventListener) { target.addEventListener(type, handler, false); } else { target.attachEvent("on" + type, function(event) { return handler.call(target, event); }, false); } }; //取消事件監聽 helper.remove = function(target, type, handler) { if(target.removeEventListener) { target.removeEventListener(type, handler); } else { target.detachEvent("on" + type, function(event) { return handler.call(target, event); }, true); } };
(2)使用new Date(str)
來正確生成日期對象->'2018/07/05
'。
(3)獲取scrollTop
經過document.documentElement.scrollTop
兼容非Chrome
瀏覽器
var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
調用 localstorge、cookies 等本地存儲方式
1.儘量減小http
請求次數,將css
, js
, 圖片各自合併
2.使用CDN
,下降通訊距離
3.添加Expire/Cache-Control
頭
4.啓用Gzip
壓縮文件
5.將css
放在頁面最上面
6.將script
放在頁面最下面
7.避免在css
中使用表達式
8.將css
, js
都放在外部文件中
9.減小DNS
查詢
10.最小化css
, js
,減少文件體積
11.避免重定向
12.移除重複腳本
13.配置實體標籤ETag
14.使用AJAX
緩存,讓網站內容分批加載,局部更新
jsonp
(jsonp
的原理是動態插入 script
標籤)document.domain
+ iframe
window.name
、window.postMessage
document.write
只能重繪整個頁面
innerHTML
能夠重繪頁面的一部分
內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在。
垃圾回收器按期掃描對象,並計算引用了每一個對象的其餘對象的數量。若是一個對象的引用數量爲 0(沒有其餘對象引用過該對象),或對該對象的唯一引用是循環的,那麼該對象的內存便可回收。
setTimeout
的第一個參數使用字符串而非函數的話,會引起內存泄漏。經過判斷 Global
對象是否爲window
,若是不爲window
,當前腳本沒有運行在瀏覽器中。即在node中的全局變量是global
,瀏覽器的全局變量是window
。 能夠經過該全局變量是否認義來判斷宿主環境
優勢:
Node
是基於事件驅動和無阻塞的,因此很是適合處理併發請求,所以構建在Node
上的代理服務器相比其餘技術實現(如Ruby
)的服務器表現要好得多。Node
代理服務器交互的客戶端代碼是由javascript
語言編寫的,所以客戶端和服務器端都用同一種語言編寫,這是很是美妙的事情。缺點:
Node
是一個相對新的開源項目,因此不太穩定,它老是一直在變。1xx
: 信息性狀態碼,表示服務器接收到請求正在處理。
2xx
: 成功狀態碼,表示服務器正確處理完請求。
3xx
: 重定向狀態碼,表示請求的資源位置發生改變,須要從新請求。301
永久重定向,302
臨時重定向。
4xx
: 客戶端錯誤狀態碼,服務器沒法處理該請求。 404 not found
5xx
: 服務器錯誤狀態碼,服務器處理請求出錯。
分爲4
個步驟:
URL
請求時,無論這個 URL
是 Web
頁面的 URL
仍是 Web
頁面上每一個資源的 URL
,瀏覽器都會開啓一個線程來處理這個請求,同時在遠程 DNS
服務器上啓動一個 DNS
查詢。這能使瀏覽器得到請求對應的 IP
地址。 Web
服務器經過 TCP
三次握手協商來創建一個 TCP/IP
鏈接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在 瀏覽器和服務器之間傳遞。該握手首先由客戶端嘗試創建起通訊,然後服務器應答並接受客戶端的請求,最後由客戶端發出該請求已經被接受的報文。TCP/IP
鏈接創建,瀏覽器會經過該鏈接向遠程服務器發送 HTTP
的 GET
請求。遠程服務器找到資源並使用 HTTP
響應返回該資源,值爲 200
的 HTTP
響應狀態表示一個正確的響應。Web
服務器提供資源服務,客戶端開始下載資源。請求返回後,便進入了咱們關注的前端模塊
簡單來講,瀏覽器會解析 HTML
生成 DOM Tree
,其次會根據 CSS
生成 CSS Rule Tree
,而 javascript
又能夠根據 DOM API
操做 DOM