SlideShare a Scribd company logo
VueJS :
前端框架的演進淺談
Kuro Hsu @ iThome Tech Talk
前⾔言
– 赫⻔门 《前端服务化之路路》 @ 2015 shenJS
「每 18 ⾄至 24 個⽉月,前端都會難⼀一倍」
https://github.com/jsconfcn/ShenJS/blob/gh-pages/slides/%E5%89%8D%E7%AB%AF%E6%9C%8D%E5%8A%A1%E5%8C%96%E4%B9%8B%E8%B7%AF.pdf
Vue ithome
為什什麼需要前端框架?
VueJS: 漸進式框架
Source: Vue.js: The Progressive Framework

https://docs.google.com/presentation/d/1WnYsxRMiNEArT3xz7xXHdKeH1C-jT92VxmptghJb5Es/
How To Use
Vue ithome
Vue ithome
Vue-CLI / Vue-loader
$ npm install -g vue-cli
$ vue init webpack [project name]
$ cd [project name]
$ npm install
$ npm run dev
模版渲染⽅方式的差異異
指令式渲染
• 如 jQuery,以操作 DOM Node 為基礎的開發模式。

• 開發⽅方式直覺,透過 Selector 取得 DOM 就開始操作。

• ⼀一旦程式架構擴⼤大複雜後,程式碼混雜不易易維護。
宣告式渲染
• 以操作物件模型為基礎的開發模式。

• 關注點放在資料 ( Model ) 與狀狀態 

• 直接描述資料與 DOM 的映射關係,⽽而不是直接操作 DOM

• view = render(state) , state 輸入, DOM 輸出。
Vue ithome
⼗十個前端有⼗十⼀一個都討厭的表單驗證
Vue ithome
SELECTORS
HELL
with jQuery
http://jsbin.com/cilufagija/1/edit?html,js,output
http://jsbin.com/kucawilahu/1/edit?html,js,output
關注點分離
MVVM ( Model-View-ViewModel )
Vue ithome
Vue 實體概觀
指令 ( Directive )
• Vue 指令就是⼀一種由 Vue 所提供特殊的屬性, Vue 內建的指
令通常會以「 v- 」作為開頭。

• 指令中的「值」通常⽤用來來表⽰示某個 JS 運算式。

⽽而指令的作⽤用,是將某個運算式執⾏行行後的結果回饋到對應的
DOM 上。
事件綁定
組件系統
http://jsbin.com/kubojanuqi/1/edit?html,js,output
Vue ithome
Vue ithome
Header
Main
Aside
Block
Vue ithome
組件⽣生命週期
組件⽣生命週期
組件⽣生命週期
Vue ithome
Object.defineProperty 

追蹤物件變化
資料的變動偵測
與其他主流框架的差異異:Push & Pull
• 資料的變化偵測主要分為 Push 與 Pull 

• Pull: 如 React 的 setState、Angular 的 dirty check 等

• Push: 如 Vue 的響應式更更新、RxJS 的 observable 等

• 不管是哪⼀一種都會有對應的成本,沒有絕對好或不好。
Source: Reactivity in Frontend JavaScript Frameworks

https://docs.google.com/presentation/d/1_BlJxudppfKmAtfbNIcqNwzrC5vLrR_h1e09apcpdNY/edit?usp=sharing
Source: Reactivity in Frontend JavaScript Frameworks

https://docs.google.com/presentation/d/1_BlJxudppfKmAtfbNIcqNwzrC5vLrR_h1e09apcpdNY/edit?usp=sharing
Source: Reactivity in Frontend JavaScript Frameworks

https://docs.google.com/presentation/d/1_BlJxudppfKmAtfbNIcqNwzrC5vLrR_h1e09apcpdNY/edit?usp=sharing
Source: Reactivity in Frontend JavaScript Frameworks

https://docs.google.com/presentation/d/1_BlJxudppfKmAtfbNIcqNwzrC5vLrR_h1e09apcpdNY/edit?usp=sharing
組件之間的溝通
Vue ithome
Vue ithome
Emit events

to update value
Vue ithome
Vue ithome
Event Bus
CSS 管理理⽅方案
• 與 JS 完全解耦,透過命名規範來來管理理:如 BEM、
SMACSS、OOCSS 等

• CSS Modules,透過 Webpack 編譯,仍是 CSS

• 各種 CSS in JS ( React ) 

• 寫在 .vue 中的 CSS 、 Angular 組件的 CSS
CSS in JS
• 限定 CSS 的有效範圍 (scope)

• Critical CSS (Server 端渲染)

• Atomic CSS 優化

• 打包管理理,⽅方便便 re-use
Scoped CSS in Vue
Scoped CSS in Vue
組件狀狀態管理理
• Vuex = VueJS + Flux / Redux

• 從事件對應⾄至狀狀態的改變,以及後續 UI 的變化等過
程抽離出來來,以提⾼高可維護性。

• 同步元件間的狀狀態,解決元件之間資料溝通的問題
單向資料流
SSOT 原則
Vue ithome
前端路路由機制
Vue-router 路路由管理理
Path Component
• 最早提出前端 Routing 概念念的是 Ember.js

• 早期會⽤用 # (URL hash) 來來模擬,現今主流⼯工具多以操作
History API ⽅方式來來處理理路路由

• 從組件出發來來思考 Routing 規則,其實就是將 URL 對應⾄至
組件樹結構的過程

• 從 URL 到組件映射的分歧點思考:以 URL 規則為主?以
組件的狀狀態為主?
SSR、Pre-rending 與 SPA
雖然 Google 曾宣稱可以看懂 JS
渲染的結果
Vue ithome
SSR
• 當網⾴頁需要透過非同步⽅方式 (如 JS) 來來渲染的區塊時,⼤大
部分的搜尋引擎 bot 不會等待資料讀取完成,此時就不利利
SEO 的運作。

• Vue SSR (server-side-renderer) 提供了了可讓後端同時編譯
Vue 元件並提前渲染的可能性,達到前後端同構的好處。

• 換⾔言之,SSR 只能在 node 環境上執⾏行行。
Pre-rending
• 如果後端語⾔言非 node,⼜又不想多建置⼀一個中間層,特別
適合採⽤用 Pre-rending 的做法。

• Pre-rending 的概念念類似 cache,將不常變動的網⾴頁透過
wepback 預先編譯並⽣生成靜態⽂文件,當然搜尋引擎的 bot
也可正確爬取網⾴頁的內容。

• Vue 可搭配 prerender-spa-plugin 來來實作 Pre-rending。
Prerender SPA Plugin
https://github.com/chrisvfritz/prerender-spa-plugin
建構⼯工具與 Vue 開發⽣生態圈
• Task ⾃自動化

• 開發體驗與效率 (如: Hot-Reload、語法糖等)

• 打包與專案部署相關的需求

• 編譯時的優化
Vue ithome
Vue-CLI
$ npm install -g vue-cli
$ vue init webpack [project name]
$ cd [project name]
$ npm install
$ npm run dev
Vue-loader
Vue file
HTML
Script
Style
https://vue-loader.vuejs.org
結語
– 赫⻔门 《前端服务化之路路》 @ 2015 shenJS
「每 18 ⾄至 24 個⽉月,前端都會難⼀一倍」
https://github.com/jsconfcn/ShenJS/blob/gh-pages/slides/%E5%89%8D%E7%AB%AF%E6%9C%8D%E5%8A%A1%E5%8C%96%E4%B9%8B%E8%B7%AF.pdf
Vue ithome
反正 18 個⽉月之後你⼜又會想學新的了了,
要是覺得跟不上,安⼼心放⽣生也無所謂
⼯工具的過時?
為什什麼需要前端框架?
沒有最完美的⽅方案,
只有當下相對適合的⽅方案。
– 電影《葉問》
「不要只記得⼝口訣,
最要緊是能打得到⼈人。」
VueJS 台灣社團
http://vue.tw
Kuro Hsu
http://kuro.tw
kurotanshi@gmail.com
@kurotanshi
Thanks !

More Related Content

What's hot (20)

PDF
webpack 入門
Anna Su
 
PPT
Vuebms 前端技術架構
Chi-wen Sun
 
PDF
HDInsight for Hadoopers
Kuo-Chun Su
 
PPTX
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Jeff Chu
 
PDF
Uliweb cheat sheet_0.1
modou li
 
PDF
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
Kuo-Chun Su
 
PDF
Angular js twmvc#17
twMVC
 
PDF
ASP.NET Core 2.1設計新思維與新發展
江華 奚
 
PDF
twMVC#42 Azure IoT Hub for Smart Factory
twMVC
 
PDF
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC
 
PDF
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC
 
PDF
Axis1.4 开发指南 V1.0
yiditushe
 
PPTX
DEV305 - ASP.NET 5 開發攻略
Will Huang
 
PDF
面向未来的重构
Kejun Zhang
 
PDF
更好的文件组织
Kejun Zhang
 
PDF
Big Java, Big Data
Kuo-Chun Su
 
PDF
2021laravelconftwslides10
LiviaLiaoFontech
 
PPT
Html5
cazhfe
 
PPTX
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC
 
PPTX
AKS 與開發人員體驗 (Kubernetes 大講堂)
Will Huang
 
webpack 入門
Anna Su
 
Vuebms 前端技術架構
Chi-wen Sun
 
HDInsight for Hadoopers
Kuo-Chun Su
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
Jeff Chu
 
Uliweb cheat sheet_0.1
modou li
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
Kuo-Chun Su
 
Angular js twmvc#17
twMVC
 
ASP.NET Core 2.1設計新思維與新發展
江華 奚
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC
 
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC
 
twMVC#42 Azure DevOps Service Pipeline設計與非正常應用
twMVC
 
Axis1.4 开发指南 V1.0
yiditushe
 
DEV305 - ASP.NET 5 開發攻略
Will Huang
 
面向未来的重构
Kejun Zhang
 
更好的文件组织
Kejun Zhang
 
Big Java, Big Data
Kuo-Chun Su
 
2021laravelconftwslides10
LiviaLiaoFontech
 
Html5
cazhfe
 
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC
 
AKS 與開發人員體驗 (Kubernetes 大講堂)
Will Huang
 

Similar to Vue ithome (20)

PPTX
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
 
PPT
高性能网站最佳实践
longhao
 
PDF
Single-Page Application Design Principles 101
Jollen Chen
 
PDF
Real World ASP.NET MVC
jeffz
 
PPTX
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 
PDF
不一樣的Web server... coServ
Ben Lue
 
PPTX
Vue.js
ZongYing Lyu
 
PDF
全栈三个月开发绩效系统 using Rails 7.1 to develop people performance evaluation system
Eric Guo
 
PDF
20130823微軟雲端平台開發者日
twMVC
 
PDF
Kissy design
yiming he
 
PDF
ASP.Net MVC2 简介
Allen Lsy
 
PPTX
浅析浏览器解析和渲染
Ailsa126
 
PPTX
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
 
PDF
twMVC#02 | ASP.NET MVC 從無到有
twMVC
 
PDF
Asp.net mvc 從無到有 -twMVC#2
twMVC
 
PPTX
前端框架發展
Chi-wen Sun
 
PPTX
ASP.NET MVC 6 新功能探索
Will Huang
 
PPTX
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
裕波 周
 
PPTX
Full stack-development with node js
Xuefeng Zhang
 
PDF
July.2011.w3ctech
Kai Cui
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC
 
高性能网站最佳实践
longhao
 
Single-Page Application Design Principles 101
Jollen Chen
 
Real World ASP.NET MVC
jeffz
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 
不一樣的Web server... coServ
Ben Lue
 
Vue.js
ZongYing Lyu
 
全栈三个月开发绩效系统 using Rails 7.1 to develop people performance evaluation system
Eric Guo
 
20130823微軟雲端平台開發者日
twMVC
 
Kissy design
yiming he
 
ASP.Net MVC2 简介
Allen Lsy
 
浅析浏览器解析和渲染
Ailsa126
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
Duran Hsieh
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC
 
Asp.net mvc 從無到有 -twMVC#2
twMVC
 
前端框架發展
Chi-wen Sun
 
ASP.NET MVC 6 新功能探索
Will Huang
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
裕波 周
 
Full stack-development with node js
Xuefeng Zhang
 
July.2011.w3ctech
Kai Cui
 
Ad

Vue ithome