前言:
本文主要是有關前端方面知識按照 XX 目前的認知進行的收集、歸類、歸納和整理,涵蓋『前端理論』與『前端實踐』兩方面。本文會告訴你前端須要瞭解的知識大體有什麼,看上去有不少,但具體你要學什麼,仍是要 follow your heart & follow your BOSS。javascript初衷。寫這篇文章主要有如下幾個初衷:php
梳理知識體系。網上雖然有許多相似的內容,但每一個人都有各自獨特的思惟方式,適合本身的纔是最好的。css
探索不足之處。明確本身到底掌握了哪些,哪些本應掌握但尚未學習。前端
完善公司的前端培訓方向。前端技能培訓的方向由懂前端、懂公司前端團隊的人來設定最好不過了。vue
但願藉此激發你們的一點思考。咱們都在路上,我不是成功的例子,我寫下個人思考,但願藉此激發你們的一點思考。java
一個梗。自 2012 年以來,我知乎上獲贊最多的答案倒是引用他人的答案……有點尷尬:《一名合格的前端工程師的知識結構是怎樣的?》node
專業技能git
知己知彼
瀏覽器內核渲染原理
HTML 解析器
CSS 解析器
JavaScript 引擎
渲染流程
加載
解析(肯定結構、計算樣式)
構建 DOM 樹、應用樣式
繪製
迴流
重繪
瀏覽器調試
工具
F12
擴展插件
瀏覽器經常使用快捷鍵
調試內容
元素
結構
屬性
樣式
腳本
日誌
斷點
事件
變量監聽
調用堆棧
性能
snapshot
耗時
網絡請求
模擬請求
審查網絡
模擬網絡環境
內存
本地存儲信息
cookie
local storage
cache
調試技巧
瀏覽器事件
常見事件
鼠標事件
表單元素事件
鍵盤事件
文檔事件
CSS 事件
……
事件處理、添加、移除
瀏覽器任務調度機制
micro queue
macro queue
瀏覽器兼容性
各平臺瀏覽器的坑(家家有個難填的坑,有的坑深,有的坑淺)
移動端瀏覽器
UC
Safari
微信瀏覽器
百度
……
PC 端瀏覽器
Chrome
Firefox
IE
Edge
……
小程序
不一樣瀏覽器內核差別
CSS 私有屬性前綴(注:建議使用 postcss 自動化補全)
Polyfill
HTML、CSS、Javascript 特性支持度
MDN
Can I use ?
常見問題
請求跨域
iframe 跨域通訊
各類兼容性問題
網頁加載速度慢
按鈕點擊沒反應……
吃土小2叉:聽說 HTML 和 CSS 一塊兒學習體驗最佳哦
語法 & 語義
!DOCTYPE
HTML 文檔標準
怪異模式
標準模式
head
meta
元數據標籤
網頁描述
設備描述
HTTP 請求描述
HTTP Client Hints
body
裝飾型標記(不推薦、部分已廢棄)
功能型標記
無語義容器(div、span)
用戶交互(交互型標記)
輸入框
選擇器
多選框
單選框
按鈕
數據可視化(展現型標記)
列表
定義列表
無序列表
有序列表
表格
結構化數據標記、微數據
多媒體
圖片
視頻
音頻
SVG、Canvas
文章(正文、摘要、段落、章節、前言、結語、引用)
規範
HTML 代碼規範
HTML 使用規範(標籤嵌套規則)
標籤類型
可訪問性、無障礙體驗
常見問題
圖片空 src 致使頁面加載兩次
iframe 空 src 致使無限循環加載本頁面
上圖聽說是 HTML5 規範中關於 HTML 標籤嵌套規則的示意圖
吃土小2叉:用設計師的思惟去理解 CSS,用程序員的思惟去寫 CSS
語法(CSS 從入門到放棄)
基本用法
選擇器
基礎選擇器
組合選擇器
媒體查詢
簡寫屬性
註釋
屬性運算 calc()
規範(編寫可讀性良好的 CSS)
用例規範
權限控制
最佳實踐
不良習慣
格式規範
風格
複用
BEM 規範
邏輯特性(在 CSS / Less 中運用 OO 思想和設計模式)
權重(優先級)
做用域
封裝(mixins)
組合(mixins+)
擴展(:extend)
繼承(mixins)
CSS 變量、Less 變量
模塊化(import)
視覺設計(單一狀態設計)
交互設計(多狀態設計)
動畫(運動和靜止是對立的統一)
過渡效果
動畫關鍵幀
反饋
active、checked 狀態
引導
結合 Javascript
CSS 動畫
互動
hover 狀態
多設備設計
響應式設計(多套代碼,多種設備)
媒體查詢
自適應設計(一套代碼,多種設備)
最小固定寬度佈局
百分比佈局
柵格佈局、彈性佈局
js + rem 方案(rpx)
常見問題
視覺還原度
調試技巧
屬性「失效」問題
transition 「失效」?
z-index 「失效」?
外邊距合併
邊框 1px 問題
垂直居中
大屏幕 rem 小屏幕 px
圖片適配
可維護性
權重控制
嵌套層級
語義性
擴展內容
預處理器:Less、Sass
後處理器:postcss
小程序的 WXSS
Weex、RN 中的 CSS
吃土小2叉:至今還沒看完一遍《JavaScript 高級程序設計》的我是該好好面壁思過了。
本段內容大量參考了:《The Modern JavaScript Tutorial》http://javascript.info/ ,推薦閱讀。
JavaScript 標準
嚴格模式
兼容模式
開發工具
IDE
輕量編輯器
基礎語法
數據類型
基本數據類型 number
、 string
、 boolean
、null
、undefined
、object
、symbol
數據類型檢測
解構賦值
數組
對象
date
與時間
JSON
格式說明
序列化
反序列化
數組
數組操做(增、刪、改、遍歷、複製)
多維數組
變量
聲明 var
、let
、const
聲明提高
做用域
邏輯控制
循環
分支
判斷
對象(基礎部分)
對象操做(增、刪、改、查、複製)
Symbols
類型轉換
垃圾回收機制
對象方法中的 this
new
函數
函數默認值
函數聲明
當即執行函數
箭頭函數
運算符
數值運算
邏輯運算
事件
瀏覽器事件
冒泡、捕獲
事件捕獲
瀏覽器默認行爲
文檔
DOM 樹
節點
節點類型
節點標籤
節點內容
window 對象
DOM 操做
元素節點(增、刪、移、換、複製)
元素屬性(增、刪、改、查)
文本內容(增、刪、改、查)
網絡請求
ajax(回調函數)
Promise
async、await
深刻細節
對象、類、繼承
屬性標記與屬性描述
原型、原型鏈
繼承
屬性定義
對象混合
類型檢測
數據類型
基本類型
複雜類型
函數進階
遞歸、調用堆棧
閉包
函數綁定、上下文
剩餘參數、擴展語法
函數對象
任務調度:定時器
柯里化
深刻箭頭函數
函數式
錯誤處理
異常捕獲
代碼質量
註釋
相關工具
ESLint、JSLint
Standard.js
Prettify
自動化測試工具:Jest、Mocha
用例規範
最佳實踐
不良習慣
格式規範
風格
正則表達式
普通字符、轉義字符
元字符
字符類
分支條件
分組
反義
貪婪與懶惰
後向引用
……
軟件工程的核心就是管理複雜度 —— 《代碼大全 2》
推薦閱讀:來自法海@淘寶前端團隊《從達標到卓越 —— API 設計之道》
達標(語法、詞法)
正確拼寫
準確用詞
注意單複數
不要搞錯詞性
處理縮寫
用對時態和語態
熟練(語義、可用性)
單一職責
避免反作用
代碼一致性
合理設計函數參數
合理運用函數重載
使返回值可預期
固話術語表
遵循一致的代碼風格
卓越(系統性、大局觀)
版本控制
確保向下兼容
設計擴展機制(易於擴展)
控制 API 的抽象級別
設計模式
註釋
DRY
編碼規範
解耦
複雜度控制
吃土小2叉:盡人事,聽天命(天者,用戶也)
SEO
影響因素
相關性
title
關鍵詞密度
權威性
外鏈
內鏈
域名年限
網站收錄
安全性
用戶體驗
廣告
加載速度
內容質量:內容真實性、內容原創性、內容有益性
用戶反饋
不良行爲
堆疊關鍵詞
抄襲、做弊
大量低價值外鏈
廣告、木馬、病毒
-數據統計
工具
統計、埋點工具:Google Analytics、百度統計、Piwik……
站長工具:Google Webmaster 、百度站長工具
其餘工具:百度指數、SEO 各項指標助手工具……
數據分析
工具
同數據統計工具
腦子是個好東西
分析方法
歸因、排查
細分
來源、渠道
用戶屬性
人口統計學
用戶終端、型號
用戶行爲
站內搜索關鍵詞
自定義事件(埋點事件)
瀏覽頻率、時間、跳出頁
訪問內容
訪問漏斗
站點屬性
對比
時間維度
統計指標維度
目標設置
轉化路徑
轉化目標
轉化價值
此處是否是又要出現,經典問題:當你在瀏覽器輸入 URL 並回車(非單頁應用的傳統網站),直到你看見這個頁面,此時經歷了哪些過程(略去瀏覽器渲染環節)。
TCP / IP
HTTP
請求
請求頭
請求正文
響應
HTTP 狀態碼(2xx、3xx、4xx、5xx)
響應頭
響應正文
過程:三次握手
HTTP2
HTTPS
Web Socket
CORS
Session、Cookie
RESTful / RPC
DNS 、域名、IP
域名劫持
內網、公網地址段
緩存
服務端緩存
客戶端緩存
經常使用工具
F12 Network Panel
Advanced REST client
EditThisCookie
Wireshark
Fiddler、Charles
常見問題
HTTP 遷移到 HTTPS 站點部署問題
HTTPS 證書部署
TLS 版本問題
證書做用域(是否包含子域名)
證書、祕鑰配置文件
資源加載同協議
error 級
外部 JavaScript 加載
iframe
warning 級
img
CSS
網絡請求同協議
error
級
ajax
jsonp
吃土小2叉:學習交叉領域知識的一個很樸實的目的 —— 掌握如何甩鍋
吃土小2叉:學會優雅地質疑設計 => 給用戶更好的體驗
與設計師的溝通、協做
設計理念 => 用戶體驗
一致性
可用性
易用性
反饋
提高審美
單反窮三代 // 單身狗 XX:也許學好攝影就能追到女神了呢?
競品分析 // 知己知彼,重視對手
經常使用工具
雪碧圖生成工具(http://www.spritecow.com/)
圖片有損壓縮工具(https://tinypng.com/)
.psd 智能標註(http://www.fancynode.com.cn/p...)
強烈建議設計師使用 Sketch 進行設計
吃土小2叉:只要把這篇文章《系統設計入門》上面你不認識的術語弄懂就能夠了 (迷之微笑)
XX 的觀點:時刻謹記編程語言只是一種工具,分別有不一樣適用的場景罷了。理性、客觀、結合實際。
與後端開發工程師的溝通、協做
明確分工
文檔先行
mock 數據
簡單瞭解一門後端語言 // XX 注:若是你已經本身搭建了我的博客站點,後端語言的語法層面足夠了。
瞭解前端路由與後端路由的區別
簡單應用數據庫(MySQL)
增、刪、改、查
備份、導出
瞭解做用與概念
GraphQL
Nginx
Redis
負載均衡
CDN
數據庫主從備份
計算機相關基礎知識 // 有時間多重溫(預習)重溫(預習)
數據庫
操做系統
編譯原理
離散數學
數字邏輯
實踐是檢驗真理的惟一標準,在此引用 Vue.js 做者尤雨溪的一段話:
技術方案都是先有問題,再有思路,同時伴隨着取捨。在選擇衡量技術的時候,儘可能去思考這個技術背後是在解決什麼問題,它作了怎樣的取捨。這樣一方面能夠幫助咱們更好的理解和使用這些技術,也爲之後哪天你遇到業務中的特殊狀況,須要本身作方案的時候打好基礎。
Learn from you mistakes.
吃土小2叉:寫下這篇文章的時候恰逢今年高考,很感謝高一的英語老師當時給咱們佈置的一個做業:整理考試錯題集。由於經歷過太屢次,一樣類型的題目此次錯,下次仍然錯。而我又是一個比較較真的人,每次整理錯題的時候,不僅僅只記錄作錯的問題和答案,還會去分析這裏的考點,所涉及的知識點,去試着換位思考若是我是出題人,會怎麼出這道題,考哪些知識點能夠坑一下考生。而這一過程,又有着考試作錯題的心理愧疚感,記憶會特別深入。另外一方面,在複習階段,也能夠更具備針對性地複習,爲本身減壓。要儘可能把大腦當成 CPU 來用,或者倒排索引,而非硬盤、數據庫。
Learn from your practice.
而在編程過程當中,也是比較接近。咱們能夠記錄下本身犯過的錯誤,不良的編碼案例。同時,咱們也能夠像常常收集一些名人名言、固定搭配等寫做套路同樣,去整理、收集本身在開發過程當中的最佳實踐。固然如果有時間再去思考、反思、優化,那就更好了。
Learn from your worry & adversity.
另外,抱着積極的態度、強大的心裏去面對開發過程當中的任何困惑、困境,都是助力快速成長的好機會。
前陣子我在 GitHub 上也開了一個項目,專門記錄、收集我最近在前端開發過程當中遇到的一些問題,有已經解決的,也有仍待解決的。
目前整理的已解決問題有:
→_→ 沒有更多了……
仍待解決的問題:
如何優雅地監聽元素高度變化?
移動端 banner 輪播圖自適應的各類坑
固然我也簡單寫了一些方法論,包括:
後續我也會不斷完善這一塊內容。重點是:造成一套屬於本身的最佳實踐經驗庫。
這一部份內容更推薦你們關注 Phodal 大神的 Growth 系列
而我給準備入門前端的新手的建議是:
擁有一個徹底屬於本身的博客、域名、網站、服務器,並每週固定更新博客文章、每一年爲博客更新一次主題。
勿忘本身的 title:前端工程師
第一階段:庫/框架選型
第二階段:簡單構建優化
第三階段:JS/CSS模塊化開發
第四階段:組件化開發與資源管理因爲先天缺陷,前端相比其餘軟件開發,在基礎架構上更加迫切的須要組件化開發和資源管理,而解決資源管理的方法其實一點也不復雜:
一個通用的資源表生成工具 + 基於表的資源加載框架
吃土小2叉:只要是一個文檔友好的框架,遇到不會的問題,去翻翻文檔,若是解決不了,再去認真翻一次。所以,第一階段,亦可認爲是:面向文檔編程。
此處建議再回憶一下剛纔說起的尤大的話。
如下是我我的的框架/庫應用路線:
jQuery => jQuery + artTemplate => Vue.js + lodash => Vue.js 全家桶
jQuery // 此處參考張鑫旭的 jQuery 1.4 中文文檔
核心
對象訪問
數據緩存
隊列控制
插件機制
多庫共存
事件
頁面載入
事件處理
事件委託
事件切換
經常使用事件
鼠標事件(click、dbclick、hover、mouse*……)
鍵盤事件(key*……)
表單事件(blur、change、focus、submit、select)
瀏覽器事件(error、resize、scroll)
觸摸事件(touch*……)
選擇器
基本
組合
僞類
內容
可見性
屬性
表單
篩選器
過濾
查找
串聯
CSS
CSS
位置
尺寸
DOM 操做
元素節點(增、刪、移、換、複製)
元素屬性(增、刪、改、查)
文本內容(增、刪、改、查)
網絡請求
Ajax
when
deferred
特效
基本(顯示、隱藏)
滑動
淡入淡出
自定義動畫控制
輔助工具(相似於 lodash)
數組、對象操做
函數操做
字符串操做
瀏覽器及特性檢測
類型檢測
JSON 序列化
artTemplate
模板引擎
Vue.js
MVVM 思想
聲明式渲染
條件與循環
處理用戶輸入
數據綁定、響應式數據
組件化應用構建
組件間通訊
狀態管理
lodash.js // 提供各類 helper 方法,專一於數據處理
數據類型
數組
集合
日期
函數
數值
對象
字符串
語言特性
類型檢測
類型比較
複製
數學運算
輔助工具
XX:
學會用 artTemplate 之後,會發現 Vue.js 很容易上手
當你學會 Vue.js 之後,你會發現小程序真的很容易上手
專一業務開發
工具
Grunt
Gulp
預處理
Less
Babel
TypeScript
後處理
PostCSS
校驗
ESLint
壓縮
代碼
圖片
合併
打包
自動化測試
mock 接口調試
張雲龍:分治、分治、分治
AMD
CommonJS
UMD
ES6 Module
……
核心目的:提升開發效率 & 兼顧運行性能
分治、解耦、自由組合、就近維護
Vue.js 組件化開發
抽象業務邏輯組件
組合基礎 UI 組件造成業務組件
獨立編寫業務相關組件
……
定製基礎 UI 組件庫
輪播圖組件
彈窗組件
……
資源管理
推薦閱讀:靜態網頁資源的管理和優化
理性、客觀、避免偏見
預計投入
開發資源
時間
人手
技術儲備
項目資源
溝通成本
設計文檔、功能文檔、產品原型
後端接口文檔
項目排期
產品資源
用戶羣體
瀏覽器兼容性
瀏覽器侷限性
SEO 問題
指望回報
開發人員自我成長
公司技術棧
開發效率
可維護性
性能、穩定性
易於測試
易於把控項目週期
應急預案
兼容方案
回退方案
A / B Test
漸進加強
Plan B
吃土小2叉:要麼站在巨人的肩膀上,要麼本身成爲巨人
未完待續……
UI 組件庫
前端工具
前端微服務
前端框架
(如下內容是 XX 的 YY 內容)
學習優秀框架源碼
仿寫核心內容
掌握山寨一個框架的套路
發現問題
具有紮實的前端基礎 + 運氣 + 靈感
解決問題
?
本文會在 GitHub 上持續維護,歡迎你們提 issue ~
地址是:https://github.com/xunge0613/...
v x.x.x
更新 造輪子
內容更新
性能監控
安全
考慮翻譯成英文?
加入重要性評分功能
引導目前階段應該掌握哪些
分爲:初級、中級、高級
===== 當前版本分割線 =====
v 0.0.3 內容迭代
更新 編程通用
條目更新
更新 JavaScript
更新 前端實踐
新增引導語
更新支付寶圖標、微信圖標……
v 0.0.2 內容迭代
新增 後端基礎
新增 前端工程
第一階段
jQuery、Vue.js 介紹
新增 常見問題
更新 前言
更新 網絡基礎
更新 學習型項目
MDN Web 開發 // 這裏有個小彩蛋,這個頁面右上角有某 XX
歡迎聯繫我討論本文的不足、問題或者意見。
能夠在個人 GitHub 主頁上找到個人聯繫方式
亦可關注個人微信公衆號:清風迅來
做爲一個老菜鳥,我只是知識的搬運工
本文大多討論的是有哪些知識點(what),至於如何學習與應用這些知識點(how & why),敬請期待我以後的一系列文章,目前已完成一些雛形,僅供試閱:
感謝您一路看到這裏,歡迎點擊閱讀原文在個人博客上進行留言一同探討。(小透明表示公衆號至今未開通留言功能……)
如有幫助,盡情打賞!^_^
ps: 好像圖片有點大=。=
MIT