SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
善⽤用RAILS特性設計系統
RAILS 的好
• 豐富的 helper (form helper, url helper, datetime .. etc)
• 超強的 ORM
• ⽅方便好⽤用的 routing 機制
• 重複使⽤用 partial (SRJ)
• 最 ”前” 到最 ”後” 無縫整合 

(form helper => routing => controller => model)
需要注意的 …
• View Render 很慢

* fragment cache
• response time / concurrent 能⼒力 

* unicorn

* puma
• 有些只適⽤用於專案還沒那麼複雜的時候

* nested model

* 複雜的 callbacks / validations ( 拆出 layer )
常⽤用的 GEM
• simple_enum (讓 active record ⽀支援列舉,⽐比 rails 內建好⽤用)
• active_link_to (處理 link active 狀態的 helper)
• jquery-rails [ujs] (整合前端 + rails routing 機制)
• bh (bootstrap helpers)
• bootstrap-sass (sass 版本 bootstrap,可複寫變數)
• bootstrap_form ( bh 格式的 form helper,整合 activerecord)
• stamp + stamp-i18n ( 簡單的時間格式 helper )
• soft_deletion ( 軟刪除⼯工具 )
SIMPLE ENUM #1
SIMPLE ENUM #2
ACTIVE LINK TO #1
ACTIVE LINK TO #2
ACTIVE LINK TO #3
* ⼀一般選單
* 搭配 simple_enum 做 status tab
JQUERY-RAILS #1
-
* scaffold 會看到的 code ( 學到 method & confirm)
* remote options (改⽤用 ajax 送出)
* 會⾃自動判斷 json or javascript
JQUERY-RAILS #2 - ⼀一鍵更新
/admin/orders/index.html.haml
Admin::OrderController
simple_enum 變更資料狀態 + 共⽤用 update action 邏輯
SRJ #1 範例
* (Server-generated JavaScript Responses)
* PostsController
* posts/index.html.haml
* posts/destroy.js.erb
SRJ #2 FORM 也可以
* PostsController
* posts/create.js.erb
* pages/_form.html.haml
SRJ #3 - $.GET / $.POST 也可以
* PostsController
* posts/index.js.erb
* posts/index.html.haml
JQUERY-UJS - AJAX EVENT
https://github.com/rails/jquery-ujs/wiki/ajax
SRJ #4 - BOOTSTRAP 應⽤用
• Modal

new.js / edit.js 在 modal 裡⾯面 render form

create.js / update.js 成功就關閉 modal,失敗就 re-render & replace html
• Loading Button 

綁 ajax 事件

ajax:beforeSend - $(this).button(‘loading’); 

ajax:success - $(this).button(‘reset’);

ajax:error - $(‘#error-modal’).modal();
• Form + Loading Button 避免重複送出

ajax:beforeSend - 找到該 form 的 submit button 設定為 loading

ajax:success - 找到該 form 的 submit button 還原

ajax:error - $(‘#error-modal’).modal();
SRJ #5 - 搭配 PUSHER
• https://pusher.com/
• 是⼀一個專⾨門處理 realtime communication 的雲端服務
• 1. front-end 提供 web socket endpoint
• 2. back-end 提供 API 作通知
• 當收到 event ⽤用 SRJ 做資料更新
⽤用這樣的開發⽅方式⾮非常快
但是 render view 的成本很⾼高
Fragment cache
⼀一次 cache 全部
cache key 有⻑⾧長度限制
太多 record 分批 cache
好⽤用的東⻄西效能通常不好,也要 cache ⼀一下
我的設計原則
V1 開發效率第⼀一
• 軟體效能⽤用 cache 先擋,撐幾個版本在⼤大改版
• 管理者後台以 “可以⽤用就好” 的標準
• 不⾃自⼰己發明 UI,把 bootstrap⽤用到淋漓盡致
⽤用 SRJ 提升開發效率
• ⼩小技巧避免做更多⾴頁⾯面、功能 

e.g. nested form (has_many association)
• 避免 redirect 不必要的 render view 成本

CP值⾼高,不⽤用花太多時間,多拖幾個版本遇到效能問題,等公司賺錢
再請⼤大神來改版



常⽤用的 UI COMPONENT
• navbar (網站選單)
• navs (橫的、直的)
• form (inline, 橫的, 直的)
• panel
後台設計 PATTERN #INDEX
• 表格 - 呈現資料
• filter - 過濾資料
• 分⾴頁
• 新增按鈕
後台設計 PATTERN #INDEX
• 表格 - 呈現資料
• 顯⽰示夠多資料,就不⽤用做 #show action
• 區分固定寬度、不固定寬度
• filter - 過濾資料
• 分⾴頁
• 新增按鈕
後台設計 PATTERN #INDEX
• 表格 - 呈現資料
• filter - 過濾資料
• 關鍵字搜尋
• 分類 (看情況要做)
• 區間搜尋 (只有資料超級多才會做 e.g. 訂單管理)
• 分⾴頁
• 新增按鈕
後台設計 PATTERN #INDEX 範例 1
後台設計 PATTERN #INDEX 範例 2
後台設計 PATTERN #INDEX 範例 3
後台設計 PATTERN #INDEX 範例 3
其他好⽤用的東⻄西
• activerecord - nested form 

(拆 form layer 前的⼟土砲解法)
• activerecord - serialize / store

不確定結構、和資料未來如何應⽤用?
• activerecord - callbacks

(拆 operation layer 前的⼟土砲解法)
結論
• 新事業摸索過程沒有固定模式,哪來的 clean code?
• startup 寧可閒閒沒事,也不要把時間花在技術上

(除⾮非是提供技術的公司)
• 花 5 倍時間開發可能只換來 “節省⼀一半” 效能划算嗎

換個⾓角度「多花⼀一倍伺服器租任預算可以省五倍時間划算嗎?」
成果
• 需求:
• 能製作 landing page ⾴頁⾯面
• 可客製化 domain
• 對 mobile device 做優化
• 可新增產品 / 促銷
• 使⽤用者能在看完 landing page 直接訂購
• 後台可管理 landing page 的訂單
• 訂單畫⾯面必須即時同步 (多⼈人編輯時免重整同步)
• 可匯出貨運單
• ⼯工時:15天 * 4 ⼩小時 = 60⼩小時
https://bit.ly/huang-ma
我的正職是賣⾁肉燥
歡迎辦公室團購!

Contenu connexe

Tendances

编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹Shengyou Fan
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Vincent Chi
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)Lixun Peng
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合Shengyou Fan
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现Lixun Peng
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanismlifesinger
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化taobao.com
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作Shengyou Fan
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践Welefen Lee
 
使用 laravel 的前與後
使用 laravel 的前與後使用 laravel 的前與後
使用 laravel 的前與後Shengyou Fan
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORMShengyou Fan
 

Tendances (20)

Route 機制
Route 機制Route 機制
Route 機制
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合
 
对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现对MySQL的一些改进想法和实现
对MySQL的一些改进想法和实现
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanism
 
CRUD 綜合應用
CRUD 綜合應用CRUD 綜合應用
CRUD 綜合應用
 
Rails 初探
Rails 初探Rails 初探
Rails 初探
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践
 
使用 laravel 的前與後
使用 laravel 的前與後使用 laravel 的前與後
使用 laravel 的前與後
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 

Similaire à Rails talk-5

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作Shengyou Fan
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送yongboy
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送yongboy
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kaoxwcoder
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
Yog Framework
Yog FrameworkYog Framework
Yog Frameworkfansekey
 
纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能beiyu95
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具國昭 張
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发leneli
 
一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile appsAdam Lu
 
關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版Kirk Chen
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 

Similaire à Rails talk-5 (20)

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
Vue ithome
Vue ithome Vue ithome
Vue ithome
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
纵览Loadrunner核心功能
纵览Loadrunner核心功能纵览Loadrunner核心功能
纵览Loadrunner核心功能
 
Berserk js
Berserk jsBerserk js
Berserk js
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Gwt rpc
Gwt rpcGwt rpc
Gwt rpc
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
使用kslite支持第三方内容开发
使用kslite支持第三方内容开发使用kslite支持第三方内容开发
使用kslite支持第三方内容开发
 
一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps一步一步开发Html5 mobile apps
一步一步开发Html5 mobile apps
 
關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版關於 Javascript 非同步的那些事兒 公開版
關於 Javascript 非同步的那些事兒 公開版
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 

Rails talk-5

  • 2. RAILS 的好 • 豐富的 helper (form helper, url helper, datetime .. etc) • 超強的 ORM • ⽅方便好⽤用的 routing 機制 • 重複使⽤用 partial (SRJ) • 最 ”前” 到最 ”後” 無縫整合 
 (form helper => routing => controller => model)
  • 3. 需要注意的 … • View Render 很慢
 * fragment cache • response time / concurrent 能⼒力 
 * unicorn
 * puma • 有些只適⽤用於專案還沒那麼複雜的時候
 * nested model
 * 複雜的 callbacks / validations ( 拆出 layer )
  • 4. 常⽤用的 GEM • simple_enum (讓 active record ⽀支援列舉,⽐比 rails 內建好⽤用) • active_link_to (處理 link active 狀態的 helper) • jquery-rails [ujs] (整合前端 + rails routing 機制) • bh (bootstrap helpers) • bootstrap-sass (sass 版本 bootstrap,可複寫變數) • bootstrap_form ( bh 格式的 form helper,整合 activerecord) • stamp + stamp-i18n ( 簡單的時間格式 helper ) • soft_deletion ( 軟刪除⼯工具 )
  • 9. ACTIVE LINK TO #3 * ⼀一般選單 * 搭配 simple_enum 做 status tab
  • 10. JQUERY-RAILS #1 - * scaffold 會看到的 code ( 學到 method & confirm) * remote options (改⽤用 ajax 送出) * 會⾃自動判斷 json or javascript
  • 11. JQUERY-RAILS #2 - ⼀一鍵更新 /admin/orders/index.html.haml Admin::OrderController simple_enum 變更資料狀態 + 共⽤用 update action 邏輯
  • 12. SRJ #1 範例 * (Server-generated JavaScript Responses) * PostsController * posts/index.html.haml * posts/destroy.js.erb
  • 13. SRJ #2 FORM 也可以 * PostsController * posts/create.js.erb * pages/_form.html.haml
  • 14. SRJ #3 - $.GET / $.POST 也可以 * PostsController * posts/index.js.erb * posts/index.html.haml
  • 15. JQUERY-UJS - AJAX EVENT https://github.com/rails/jquery-ujs/wiki/ajax
  • 16. SRJ #4 - BOOTSTRAP 應⽤用 • Modal
 new.js / edit.js 在 modal 裡⾯面 render form
 create.js / update.js 成功就關閉 modal,失敗就 re-render & replace html • Loading Button 
 綁 ajax 事件
 ajax:beforeSend - $(this).button(‘loading’); 
 ajax:success - $(this).button(‘reset’);
 ajax:error - $(‘#error-modal’).modal(); • Form + Loading Button 避免重複送出
 ajax:beforeSend - 找到該 form 的 submit button 設定為 loading
 ajax:success - 找到該 form 的 submit button 還原
 ajax:error - $(‘#error-modal’).modal();
  • 17. SRJ #5 - 搭配 PUSHER • https://pusher.com/ • 是⼀一個專⾨門處理 realtime communication 的雲端服務 • 1. front-end 提供 web socket endpoint • 2. back-end 提供 API 作通知 • 當收到 event ⽤用 SRJ 做資料更新
  • 24. V1 開發效率第⼀一 • 軟體效能⽤用 cache 先擋,撐幾個版本在⼤大改版 • 管理者後台以 “可以⽤用就好” 的標準 • 不⾃自⼰己發明 UI,把 bootstrap⽤用到淋漓盡致
  • 25. ⽤用 SRJ 提升開發效率 • ⼩小技巧避免做更多⾴頁⾯面、功能 
 e.g. nested form (has_many association) • 避免 redirect 不必要的 render view 成本
 CP值⾼高,不⽤用花太多時間,多拖幾個版本遇到效能問題,等公司賺錢 再請⼤大神來改版
 

  • 26. 常⽤用的 UI COMPONENT • navbar (網站選單) • navs (橫的、直的) • form (inline, 橫的, 直的) • panel
  • 27. 後台設計 PATTERN #INDEX • 表格 - 呈現資料 • filter - 過濾資料 • 分⾴頁 • 新增按鈕
  • 28. 後台設計 PATTERN #INDEX • 表格 - 呈現資料 • 顯⽰示夠多資料,就不⽤用做 #show action • 區分固定寬度、不固定寬度 • filter - 過濾資料 • 分⾴頁 • 新增按鈕
  • 29. 後台設計 PATTERN #INDEX • 表格 - 呈現資料 • filter - 過濾資料 • 關鍵字搜尋 • 分類 (看情況要做) • 區間搜尋 (只有資料超級多才會做 e.g. 訂單管理) • 分⾴頁 • 新增按鈕
  • 34. 其他好⽤用的東⻄西 • activerecord - nested form 
 (拆 form layer 前的⼟土砲解法) • activerecord - serialize / store
 不確定結構、和資料未來如何應⽤用? • activerecord - callbacks
 (拆 operation layer 前的⼟土砲解法)
  • 35. 結論 • 新事業摸索過程沒有固定模式,哪來的 clean code? • startup 寧可閒閒沒事,也不要把時間花在技術上
 (除⾮非是提供技術的公司) • 花 5 倍時間開發可能只換來 “節省⼀一半” 效能划算嗎
 換個⾓角度「多花⼀一倍伺服器租任預算可以省五倍時間划算嗎?」
  • 36. 成果 • 需求: • 能製作 landing page ⾴頁⾯面 • 可客製化 domain • 對 mobile device 做優化 • 可新增產品 / 促銷 • 使⽤用者能在看完 landing page 直接訂購 • 後台可管理 landing page 的訂單 • 訂單畫⾯面必須即時同步 (多⼈人編輯時免重整同步) • 可匯出貨運單 • ⼯工時:15天 * 4 ⼩小時 = 60⼩小時