快速入門Web前端開發(fā)的正確姿勢
入門標(biāo)準(zhǔn)
入門標(biāo)準(zhǔn)很簡單,就一條:達(dá)到能參與 Web 前端實(shí)際項目的開發(fā)水平。請注意,是實(shí)際項目,這就需要了解如今的實(shí)際項目開發(fā)都用了哪些技術(shù)棧。HTML/CSS/JavaScript 這三大基礎(chǔ)技術(shù)棧肯定是需要掌握的,但要能參與實(shí)際項目開發(fā),肯定還要掌握其他一些主流的框架體系。
幾年前, jQuery + Bootstrap 可以說是一統(tǒng)江湖,是前端領(lǐng)域的絕對霸主。而這幾年,隨著 Angular、React、Vue 等框架的興起,變成了百家爭鳴的局面。這幾年,Web 前端的技術(shù)發(fā)展真是太快了,相應(yīng)地,技術(shù)棧也就變得非常多,除了最基本的 HTML/CSS/JavaScript,以及 Vue/React/Angular 等這些 JavaScript 框架和各自的生態(tài)體系,還有 CSS 預(yù)處理器 Sass/Less/Stylus,還有 TypeScript,還有 grunt/webpack/gulp 等各種打包構(gòu)建工具,還有其他一大堆技術(shù)棧。
這么多技術(shù)棧,我們不可能全都掌握,就算是資深的前端工程師,也只是精通其中一部分,比如,有些精通 Angular,有些掌握 React,有些則熟悉 Vue,很少有人對三種框架生態(tài)體系都非常了解。因此,我們?nèi)腴T也沒必要每種框架都學(xué)習(xí),只要挑選一種就夠了。而且,作為全棧,我們學(xué)習(xí)一門技術(shù)更重要的是要學(xué)習(xí)技術(shù)背后的編程思想、設(shè)計思想、架構(gòu)思想等。而不管是 Angular、React 還是 Vuew,其背后的核心設(shè)計思想都是組件化的設(shè)計,因此只要掌握一種框架,我們也就能學(xué)習(xí)到前端技術(shù)的核心思想了。
那么,我們應(yīng)該學(xué)哪種框架體系呢?我的建議是從 Vue 開始,因?yàn)?Vue 的學(xué)習(xí)成本是最低的,入門簡單,而且這兩年 Vue 可以說是出現(xiàn)了爆發(fā)式的增長,已經(jīng)直逼 React。React 的主要學(xué)習(xí)成本在于要掌握 JSX 語法,而且文檔還大多都是英文。Vue 因?yàn)槭菄碎_發(fā)和維護(hù)的,自然對國內(nèi)的開發(fā)者更友好。Angular 則是個大而全的框架,顯得太重,學(xué)習(xí)成本自然最高。至于 jQuery + Bootstrap 這套,已經(jīng)過時了,建議沒必要去學(xué)習(xí)了,畢竟我們的時間很寶貴,還有一大堆更有價值的東西等著我們?nèi)W(xué)。
因此,我們要入門 Web 前端開發(fā)的話,除了要學(xué)習(xí) HTML/CSS/JavaScript 三大基礎(chǔ)技術(shù)棧,還要了解 Vue 體系。而 Vue 體系,除了 Vue 框架本身,還包括其他技術(shù)棧,這個后面再說。
HTML/CSS/JavaScript
HTML、CSS、JavaScript 是前端的核心基礎(chǔ),所以必須要掌握。HTML 主要就是 HTML5,相比之前的版本,新增了很多新特性。CSS 則主要是 CSS3 了,相比以前的版本,主要就是作了模塊化的拆分。JavaScript 其實(shí)分為三部分:ECMAScript、DOM 和 BOM。ECMAScript 簡稱 ES,是 JavaScript 的核心,目前最新版本已經(jīng)是 ES2017,是 ES6 的第三個小版本。DOM 是文檔對象模型,其實(shí)就是一套訪問和操作 HTML 所有元素的 API。BOM 則是瀏覽器對象模型,用于訪問和操作瀏覽器的一些特性。
HTML/CSS/JavaScript 的學(xué)習(xí)資源比較多,我推薦幾個。首先是 w3school 的系列教程:
- HTML:該教程也包括了 HTML5 新增的內(nèi)容,但講得沒下面專門講解 HTML5 的細(xì),所以該教程我建議只看 HTML 基礎(chǔ)教程和表單部分即可
- HTML5:該教程講解了 HTML5 的新特性
- CSS:該教程并不包括 CSS3 新增的特性,所以還需要學(xué)習(xí)下面的 CSS3 的教程
- CSS3:該教程內(nèi)容比較少,只包含 CSS3 新增的特性
- JavaScript:該教程只是講解了非?;A(chǔ)的語法
不過,我更推薦菜鳥的教程,內(nèi)容雖然也是來自 w3school,但部分內(nèi)容比 w3school 的更詳細(xì),以下是教程地址:
- HTML:www.runoob.com/html/html-t…
- CSS:www.runoob.com/css/css-tut…
- JavaScript:www.runoob.com/js/js-tutor…
HTML 和 CSS 只要根據(jù)以上教程學(xué)習(xí)就足夠了,但 JavaScript 則是不夠的,以上教程缺少了 ES6 及更高版本的內(nèi)容,后面我再推薦其他學(xué)習(xí)資源進(jìn)行補(bǔ)充。
書籍方面,HTML 和 CSS 基礎(chǔ)方面的,首推《Head First HTML與CSS》,編排設(shè)計通俗易懂,就連完全零基礎(chǔ)的非 IT 人員都適合學(xué)習(xí)。不過,Head First 這本書沒有涉及到 HTML5 和 CSS3 的更新內(nèi)容。不過,Head First 有另一本書講解了 HTML5,叫《Head First HTML5 Programming》,不過,要熟悉 HTML5 的用法,還是要先掌握一點(diǎn) JavaScript 基礎(chǔ)。CSS3 方面 Head First 則沒有相應(yīng)的書籍,因此,我推薦另一本《CSS3實(shí)用指南》。
JavaScript 方面,我首推《JavaScript高級程序設(shè)計》這本書,書中內(nèi)容由淺入深,也是寫得通俗易懂,適合入門。另外,有些人會推薦《JavaScript權(quán)威指南》,但這本書主要還是一本字典書,略顯晦澀,其實(shí)不適合入門。不過《JavaScript高級程序設(shè)計》還是基于 ES5 的,為了補(bǔ)充 ES6 的內(nèi)容,推薦阮一峰的《ES6標(biāo)準(zhǔn)入門》,目前是第3版,內(nèi)容已經(jīng)覆蓋了最新版本的 ES2017。另外,因?yàn)檫@是一本開源教材,所以也可以直接去阮一峰的官網(wǎng)免費(fèi)閱讀,以下是鏈接地址:
ECMAScript 6 入門:es6.ruanyifeng.com/
另外,有一套系列書叫《You Don't Know JS》也要推薦給大家,也是開源教材,這套書會讓你對 JavaScript 知其然也知其所以然,也包含了 ES6 的內(nèi)容,不過這套書面向初學(xué)者的,只適合用來進(jìn)階。也出版了中文翻譯的書籍,叫《你不知道的JavaScript》,目前只有上卷和中卷兩本,據(jù)評價,上卷的翻譯還不錯,但中卷的翻譯則一般般,下卷不知道什么時候才出版。以下是系列書的github地址:
You Don't Know JS:github.com/getify/You-…
那么,這么多學(xué)習(xí)資源,我們應(yīng)該如何學(xué)習(xí)才高效呢?其實(shí),我們主要還是為了了解各種核心概念,我們不可能在短期內(nèi)熟悉所有知識點(diǎn),因此,我還是和前面的文章一樣,也羅列出一些核心的知識點(diǎn)吧。
- HTML基礎(chǔ):以 w3school 或菜鳥的 HTML 教程為主,熟悉各種常用標(biāo)簽的用法,尤其是標(biāo)題、段落、鏈接、圖像、表格、列表、表單、區(qū)塊、布局、CSS、腳本等
- CSS基礎(chǔ):同樣以 w3school 或菜鳥的 CSS 教程為主,熟悉 CSS 語法和選擇器、樣式、框模型、定位等模塊的內(nèi)容
- JavaScript基礎(chǔ):首先作為一門編程語言,語言本身的基礎(chǔ)肯定要熟悉,包括數(shù)據(jù)類型、變量、運(yùn)算符、控制流、函數(shù)、對象等;另外,也要熟悉 DOM;BOM 簡單了解下就可以了,使用場景不多
- HTML5:HTML5 的新特性肯定要了解,內(nèi)容其實(shí)也不是很多,核心的就是 canvas、svg、對多媒體的支持、Web 存儲、應(yīng)用緩存、WebSocket等
- CSS3:CSS3 也是要熟悉那些新特性,最核心的就是彈性盒子
- ES6:ES6 自然也是要熟悉的,學(xué)好阮一峰的《ECMAScript 6 入門》教程就足夠了
Vue 體系
在開始正式學(xué)習(xí) Vue 之前,我們先來了解幾個概念,這樣才能更好理解 Vue 的一些設(shè)計理念。第一個概念是「單頁應(yīng)用程序」,就是只有一個 Web 頁面的應(yīng)用,是只加載單個 HTML 頁面并在用戶與應(yīng)用程序交互式動態(tài)更新該頁面的 Web 應(yīng)用程序。第二個概念是「Virtual DOM」,即虛擬 DOM,簡單說就是一個模擬 DOM 樹的 JavaScript 對象,是為了避免大面積操作真實(shí) DOM 而導(dǎo)致的性能問題。第三個概念是「響應(yīng)式系統(tǒng)」,通過數(shù)據(jù)模型和 View 的數(shù)據(jù)綁定,系統(tǒng)可以對數(shù)據(jù)模型的修改自動響應(yīng)到視圖上。第四個概念則是「組件化」,Vue 和 React 都是通過組合各種組件組成應(yīng)用程序的。理解了這些概念,你才能更好的理解 Vue/React 這些前端框架體系。
還有,開發(fā)工具方面,我推薦 Visual Studio Code,一款免費(fèi)開源的輕量級代碼編輯器,macOS、Windows、Linux 都支持,有人評價說比sublime開源,比atom更快,比webstorm更輕,所以說,你值得擁有。
Vue 體系包含了很多技術(shù)棧,一套完整的 Vue 項目一般包括 vue + vue-router + vuex + vue-cli + axios + sass + webpack,其中,vue + vue-router + vuex 又稱為 Vue 全家桶,因?yàn)檫@三套技術(shù)棧都是 Vue 官方推出的,其他框架和工具則是第三方的。那么,就讓我們來一個個了解這些技術(shù)棧吧。
- vue:vue 即是 Vue.js 框架本身,是一套采用了 MVVM 模式的 JavaScript 框架,它和 React 一樣使用了 Virtual DOM,也提供了響應(yīng)式和組件化的視圖組件。不過與 React 不同的是,Vue 更推薦使用基于 HTML 的模板,這也是它相比 React 等其他框架更容易入門的原因。
- vue-router:因?yàn)楝F(xiàn)在大多數(shù) Web 應(yīng)用都是單頁應(yīng)用,那要實(shí)現(xiàn)單個頁面里的不同視圖的跳轉(zhuǎn),就要用到路由,vue-router 庫就是用來實(shí)現(xiàn)單頁應(yīng)用的路由功能。
- vuex:vuex 是一個類 Flux 的狀態(tài)管理庫,它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài)。關(guān)于什么是 Flux,可以參考阮一峰寫的一篇文章《Flux 架構(gòu)入門教程》。
- vue-cli:vue-cli 是官方提供的命令行工具,用它可以快速創(chuàng)建 vue 項目。
- axios:axios 是 vue 官方推薦的一個第三方 HTTP 庫,它是基于 promise 的,promise 是 ES6 的新增特性。
- sass:CSS 的一款預(yù)處理器,簡單入門可以看看阮一峰的一篇文章《SASS用法指南》。預(yù)處理器另外還有 less 和 stylus,不過不少大牛最推薦的還是 sass。
- webpack:webpack 是打包構(gòu)建工具,可以類比為 Java 的 Gradle。不過 webpack 是基于 node.js 的,所以要用熟 webpack,還要學(xué)點(diǎn) node.js 的基礎(chǔ)知識,至少要懂得配置 node.js 的運(yùn)行環(huán)境以及了解 node.js 的包管理工具 npm 的常用命令。
對于剛接觸當(dāng)代前端的人員來說,存在太多陌生的概念需要了解,一時可能難以消化,Vue 的作者尤雨溪寫過一篇《新手向:Vue 2.0 的建議學(xué)習(xí)順序》,可以按照他的建議去學(xué)習(xí)。
學(xué)習(xí)資源方面,最好的應(yīng)該就是官方文檔了。另外,《Vue.js實(shí)戰(zhàn)》這本書有尤雨溪作推薦序,也可以買來看看,可以作為官網(wǎng)的補(bǔ)充資源。對于一些概念如果還不是很理解,也可以暫時先放一放,后面在做項目開發(fā)的過程中可能你就會理解了。
實(shí)戰(zhàn)入門
最關(guān)鍵的還是要通過項目實(shí)戰(zhàn)才能真正入門,這也是我一貫推崇的。也是和 Android、iOS 實(shí)戰(zhàn)一樣的建議,如果條件允許,你可以向上司申請參與自己公司的前端項目開發(fā),然后開始去熟悉代碼和實(shí)現(xiàn)一些簡單的工作任務(wù),建議先從完成一些簡單的UI界面開始。同樣,開源項目自然也是少不了,Vue 這塊的開源項目我推薦兩個:
- vue2-happyfri:很簡單的一個小項目,很適合入門練習(xí)
- vue2-elm:用 vue 模仿餓了么的一個完整項目,重點(diǎn)推薦
另外,也附上一個匯總了眾多 vue 開源項目的 github 地址:github.com/opendigg/aw…。
對于開源實(shí)戰(zhàn)項目的操作上,我依然還是建議先給應(yīng)用改皮膚開始,之后嘗試著自己做出一個類似的App。以上面的 vue 版餓了么項目為例,你先給它所有頁面先換個皮膚,包括背景、按鈕、文字等等,通通換掉一遍,然后嘗試自己做一個百度外賣或美團(tuán)外賣,當(dāng)你做完,應(yīng)付一般的 vue 項目開發(fā)就應(yīng)該沒有問題了。之后也根據(jù)需要可以再去學(xué)下 React 體系,這時候?qū)W起來絕對不會吃力。
總結(jié)
前端開發(fā)入門,要學(xué)的技術(shù)棧真的很多,除了最基礎(chǔ)的 HTML/CSS/JavaScript,還包括 HTML5、CSS3、ES6,還要學(xué)習(xí)目前流行的 JavaScript 框架,我的建議是從 Vue 開始,容易入門,要掌握的技術(shù)棧包括 vue + vue-router + vuex + vue-cli + axios + sass + webpack,另外,node.js 也要了解點(diǎn)基礎(chǔ)。最后,實(shí)戰(zhàn)項目我推薦了一個簡單的小項目和一個完整的 vue 版餓了么項目。
思考和實(shí)踐
前端開發(fā)的編程思想和移動開發(fā)有什么不同?如何將前端的架構(gòu)思想應(yīng)用到移動開發(fā)上?最后,還是要獨(dú)立完成一款 Web 應(yīng)用。