一、Sublime Text的插件javascript
若是想讓Sublime Text錦上添花,這些插件值得嘗試。FTPSync,FTP同步工具;SASS Build,編寫CSS的預處理器;Package Control,插件管理;Emmet,高效編寫HTML和CSS;SublimeLinter,更新時選擇並安裝須要常用的Linter;SublimeEnhancements,邊欄菜單的擴充等;PackageResourceViewer,管理包;Git,在Sublime Text中運行Git命令等;Terminal,使用Sublime Text打開項目文件;CSSComb,給CSS屬性進行排序;CanIUse,檢查瀏覽器是否支持代碼中的CSS和HTML;Alignment,對齊代碼;Trmmer,自動刪除不不要的空格;ColorPicker,查看或設置顏色的值;MarkDown Editing,查看或編輯Markdown文件;FileDiffs,查看兩個不一樣文件的差別;DocBlockr,爲代碼創建文檔;Snippets,快速書寫代碼。css
二、JSCityhtml
把源碼可視化成建築物的JS庫。前端
三、Flex佈局java
W3C提出的佈局方案,能夠實現各類響應式佈局。如今已經獲得全部瀏覽器的支持。node
四、Chrome的皮膚插件web
搜索"DevTools Theme",下載,輸入chrome://flags,找到"Enable Developer Tools experments",勾選複選框,重啓瀏覽器,打開開發者選項,點擊小齒輪,Experments項,勾選"Allow custom UI themes"。算法
五、Chrome插件:Performance-Analyser網頁性能分析插件sql
分析http請求,執行期的時間,佔比。chrome
六、Chrome插件:FeHelper
json格式化、html格式化、二維碼的生成,等等。
七、Chrome插件:POSTMAN
模擬發送請求,簡化版的fiddler。
八、Chrome插件:Visual Event
捕獲網頁元素的各類事件,對於複雜的事件做用不大。
九、Chrome插件:WhatFont
查看網頁字體。不鼠標停留在字體上就會顯示該字體的名稱。
十、Chrome插件:Speed Tracer
性能分析器,比Profiles還強大。能夠跟蹤事件、查看CSS樣式、找到js中內存泄漏、檢測js語法,等等。
十一、前端工程師要作的事
● 根據項目特色選擇前端技術棧
● 把平面做品實現爲HTML/CSS/JavaScript
● 用PS進行圖片處理
● 熟悉JavaScirpt,以及框架、組件
● 熟悉前端開發流程:代碼檢查、精簡、模塊化CSS、LiveReload,調試
● 跨瀏覽器、跨設備的解決方法
● 更高效地操做DOM
● 將CSS寫得更加清晰
● 代碼更易於維護、單元測試
● 大型項目的模塊化和組件化
● HTTP協議
● Web容器/HTTP服務器如何工做
● 無狀態Web應用的工做原理
● 動態、靜態內容如何分離部署(反向代理配置)
● 安全機制如何配置
● 監控機制如何配置
十二、Angular JS
可讓你從jQuery各類選擇器和回調函數中解脫出來,雙向數據綁定和模型是惟一數據來源。不足的地方在於:嚴重依賴DOM,按DOM中的指令的優先順序將模版編譯,這樣讓調試和檢測執行順序變得困難;採用一種叫"髒檢查"的機制來跟蹤數據變化並同步用戶界面,任何Angular做用域內的操做都會觸發"髒檢查",致使隨着綁定的增多應用性能會下降;Angular全部的操做都必須通過它的diget cycle遍歷監聽器,不然組件不能和數據模型同步,這致使了兼容性問題,若是須要使用第三方Js庫,須要使用Angular的$apply函數包裝它們,這至關於重構每個JS庫只爲可以和Angular合做。沒有很好地解決依賴注入;陡峭的學習曲線。
1三、React
React是最新的開源UI框架,是構建Javascript的新方式,由Facebook和Instagram領導。React能夠用來構建UI界面,好比做爲MVC中的View。React能夠用來編寫獨立的Web組件。React鼓勵數據單向流動,相信組件是被數據驅動的狀態機,討厭DOM並盡力避免開發者與DOM打交道。提供了儘量少的API實現一個UI組件。
使用React的好處是:速度很快,在JavaScript代碼邏輯和DOM間引進了一個虛擬DOM,其獲取渲染之間的diff,以後在DOM中只改變那些須要改變的;很好的兼容性,提供了一套支持IE8以上的API;模塊化,UI組件,每個模塊能夠被單獨開發、測試,而且能調用其它組件;單向數據流動,FLux是在Javascript應用中創造單向數據層架構;使用純的Javascript;單頁JS Web應用;與其餘庫兼容良好......
1四、如何減小HTTP請求次數
● 合併文件:將多個樣式文件和腳本文件合併成一個文件。
● CSS Sprites:將多個圖片拼成一副圖片,而後經過CSS控制。
● Base64編碼:經過編碼的字符串將圖片內嵌到網頁文本中。
1五、減小DOM元素數量
經過document.getElementByTagName('*').length
1六、Gzip壓縮傳輸文件
Gzip一般能夠減小70%網頁內容的大小,包括腳本、樣式表、圖片等文件,主流服務器都有相應的壓縮支持模塊。
1七、避免圖片空的src
圖片空的src仍然會使瀏覽器發送請求到服務器。
1八、Cookie優化
Cookie被用來作認證或個性化設置,其信息包含在http報文中。能夠在如下幾個方面優化:
● 去除不必的cookie
● cookie的大小減到最小
● 設置合適的domain級別
● 設置合適的過時時間
1九、CSS優化
● 將樣式表置頂,css放在網頁的HEAD中讓網頁顯得加載速度更快。
● 避免css表達式
● 使用外部的css文件
● 壓縮css文件
○ CSSTidy
○ Minify
○ YUICompressor(編譯集成,包含在Nuget中)
○ AjaxMin
○ CSSCompressor
20、優化Javascript
● 把腳本置底
● 使用defer,指定腳本在文檔加載後執行
● 使用HTML5中的async關鍵字,讓腳本異步執行
● 使用外部的Javascript文件
● 壓縮js文件
○ Packer
○ JSMin
○ Closure compiler
○ YUICompressor(編譯集成,包含在Nuget中)
○ AjaxMin
2一、js閉包
有權訪問另外一個函數做用域變量的函數。
function outerFunction(name){
return innerFunction(arg1, arg2){
var item1 = arg1[name];
var item2 = arg2[name];
if(item1<item2){
return -1;
}
if(item>item2){
return 1;
}
if(item1==item2){
return 0;
}
};
}
var out = outerFunction("name");
var result = out({name:"d",age:18},{name:"e",age:19});
以上,outerFunction函數中的匿名函數有權訪問name變量,這個匿名函數就是一個閉包,之因此有權訪問name變量,是由於匿名函數有一個scope屬性,outerFunction函數也有一個scope屬性,另外全局還有一個scope屬性,匿名函數的scope屬性指向outerFunction函數的scope屬性,outerFunction函數的scope屬性指向全局的scope屬性,scope之間造成了鏈表。
2二、js原型
function Person(){
this.Name = "hello";
}
var p = new Person();
→實例有一個_proto_屬性
→var p = new Person()至關於p._proto_=Person.prototype
→每一個對象,好比這裏的Person都有一個prototype屬性,prototype屬性又有一個_proto_屬性
→隱式地還包含這樣的關係:Person.prototype._proto_ = New Object();
2三、Grunt工具
自動完成一些反覆重複的任務,好比壓縮、編譯、單元測試等。Grunt.js依賴於node.js的npm來管理和安裝,首先安裝node.js。好比:grunt-contrib-imagemin用來壓縮圖片,grunt-contrib-uglify用來壓縮JavaScript文件,grunt-contrib-cssmin用來壓縮CSS文件,grunt-contrib-htmlmin用來壓縮html代碼。
2四、Spartan瀏覽器
微軟放棄IE,從新推出的Spartan瀏覽器。
2五、JavaScript的Console
一般用console.log()和console.error()方法,起始有關Console的API還很多,好比console.group(),console.time(),等等。
2六、在瀏覽器中輸入地址而且按下回車鍵後發生了什麼?
→輸入地址,按下回車鍵
→和回車鍵有關的電流回路閉合
→電流進入鍵盤的邏輯電路系統
→邏輯電路系統獲取到回車鍵的碼值是13
→鍵盤控制器將碼值編碼傳輸
→瀏覽器獲取輸入的地址信息
→瀏覽器把接收到的協議和自帶的協議比較,選擇使用HTTP或HTTPS協議進行傳輸
→瀏覽器檢查域名是否在緩存中,若是緩存中沒有當前域名就調用gethosbynme庫函數
→檢查域名是否在本地的Hosts裏
→向DNS服務器發送一條DNS查詢請求
→對DNS服務器進行ARP查詢
→查看路由表,看看目標IP地址是否在路由表中
→查詢網絡接口的MAC地址,再次發送一個2層的ARP請求
若是主機和路由器直接相連,路由器返回一個ARP Reply。
若是主機連接到一個集線器,集線器會把ARP請求向全部端口廣播,返回ARP Reply。
若是主機鏈接交換機,交換機檢查本地CAM/MAC表,看看哪一個端口有咱們要找的MAC地址,返回ARP Reply。
→主機收到ARP Reply
→使用53端口向DNS服務器發送UDP請求,若是響應包太大,會使用TCP請求
→瀏覽器獲得目標服務器的IP地址和端口號
→瀏覽器調用系統的socket函數,請求一個TCP流套接字
→流進入傳輸層。請求封裝城TCP segment,目標端口被加入頭部,源端口從系統獲取
→TCP segment被送到網絡層
→在網絡層,目標IP以及本機IP加入頭部,封裝城TCP packet
→TCP packet進入鏈路層
→鏈路層在封包中加入frame頭部,裏面包含內置網卡的MAC地址以及網關(本地路由)的MAC地址,至此TCP封包已經組裝完畢,準備發送。
→傳輸TCP封包
對於大部分家庭和小型企業來講,封包從本地計算機觸發,通過本地網絡,再經過調制解調器把數字信號轉換成模擬信號,進行傳輸。到達目的地,經過調制解調器,把模擬信號轉換成數字信號。
對於使用光纖的,信號一直是數字的,封包直接傳送到目的地。
2七、發送TCP封包的具體過程
→客戶端選擇一個初始序列號(ISN),將設置了SYN位的封包發送給服務端
→服務端接收到SYN包
→服務端選擇初始序列號(ISN)
→服務端設置SYN位,代表本身選擇了一個初始序列號(ISN)
→服務端把客戶端的ISN加1複製到ACK域,而且設置ACK位,代表本身接收到了客戶端的一個封包
→客戶端發送下一個封包
→客戶端把本身的序列號加1
→客戶端讓本身的ACK加1
→客戶端設置本身的ACK位
→客戶端發送N個Bytes,將本身的SEQ序列號也增長N
→服務端接收到N個Bytes
→服務端發送一個ACK包,將ACK的值設置爲接收到的數據包的最後一個序列號
→客戶端關閉,發出一個FIN包
→服務端確認這個FIN包,而且發送本身的FIN包
→客戶端使用ACK包確認接收到了FIN包
2八、TLS握手
→客戶端發送hello信息到服務端,消息中包含了TLS版本,可用的加密和壓縮算法
→服務端想客戶端發送一個hello信息,消息中包含了TLS版本,可用的加密和壓縮算法、服務器的公開證書(包含公匙,客戶端使用公匙加密接下來的握手過程)
→客戶端根據本身的信任CA列表,驗證服務端的證書是否有效
→若是服務端的證書有效,客戶端生成一串僞隨機數(會被用於生成新的對稱密匙),使用服務器的公匙加密它
→服務端使用私匙解密來自客戶端的隨機數
→服務端使用上面的隨機數生成本身的對稱主密匙
→客戶端發送一個Finished信息給服務端
→客戶端使用對稱密匙加密此次通信的一個散列值
→服務端生成本身的hash值,而後解密客戶端發來的信息,檢測這2個值是否對應,若是對應,向客戶端發送一個Finished信息,也使用協商好的對稱密匙加密
→接下來整個TLS繪畫都使用這個對稱密匙進行加密