SlideShare a Scribd company logo
1 of 81
Download to read offline
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
為什什麼需要前端框架?
VueJS: 漸進式框架
Source: Vue.js: The Progressive Framework

https://docs.google.com/presentation/d/1WnYsxRMiNEArT3xz7xXHdKeH1C-jT92VxmptghJb5Es/
How To Use
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 輸出。
⼗十個前端有⼗十⼀一個都討厭的表單驗證
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 實體概觀
指令 ( Directive )
• Vue 指令就是⼀一種由 Vue 所提供特殊的屬性, Vue 內建的指
令通常會以「 v- 」作為開頭。

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

⽽而指令的作⽤用,是將某個運算式執⾏行行後的結果回饋到對應的
DOM 上。
事件綁定
組件系統
http://jsbin.com/kubojanuqi/1/edit?html,js,output
Header
Main
Aside
Block
組件⽣生命週期
組件⽣生命週期
組件⽣生命週期
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
組件之間的溝通
Emit events

to update value
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-router 路路由管理理
Path Component
• 最早提出前端 Routing 概念念的是 Ember.js

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

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

• 從 URL 到組件映射的分歧點思考:以 URL 規則為主?以
組件的狀狀態為主?
SSR、Pre-rending 與 SPA
雖然 Google 曾宣稱可以看懂 JS
渲染的結果
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-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
反正 18 個⽉月之後你⼜又會想學新的了了,
要是覺得跟不上,安⼼心放⽣生也無所謂
⼯工具的過時?
為什什麼需要前端框架?
沒有最完美的⽅方案,
只有當下相對適合的⽅方案。
– 電影《葉問》
「不要只記得⼝口訣,
最要緊是能打得到⼈人。」
VueJS 台灣社團
http://vue.tw
Kuro Hsu
http://kuro.tw
kurotanshi@gmail.com
@kurotanshi
Thanks !

More Related Content

What's hot

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

What's hot (20)

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

Similar to Vue ithome

twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Jollen Chen
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVCjeffz
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServBen Lue
 
20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日twMVC
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4Duran Hsieh
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2twMVC
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展Chi-wen Sun
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型裕波 周
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5 Tony Deng
 

Similar to Vue ithome (20)

twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
 
Vue.js
Vue.jsVue.js
Vue.js
 
20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日
 
Kissy design
Kissy designKissy design
Kissy design
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練42015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練4
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 

Vue ithome