Rails 5 幾大新特性總結
Rails 5 即將在 2015 年秋季釋出,新版本擁有很多令人激動的特性。如果你使用 Rails 開發商城,那你必須使你的應用準備好迎接新的 Rails 新特性。
別擔心!我們會在新版本到來之前讓你瞭解新特性,現在就讓我們讓你瞭解有哪些新特性,這將會大大提高你的開發能力。
主要改進
有很多新特性將從根本上改變我們使用 Rails 的方式。比如說 Action Cable 和改進的 Turbolinks 新特性,能夠立馬提高我們開發 Rails 應用的工作流程。讓我們看一些這兩個新特性的細節。
合併 Rails API
在過去的幾年中,得益於 Backbone.JS 和 Angular.JS 類庫,單頁面應用程式(SPA)得到了發展。我在近期開發的幾個單頁面應用程式藉助了 Rails 的威力。我曾經嘗試涉獵 Sinatra 專案甚至純粹的 Rack 專案,但是最終的結果都是寫了大量 的boilerplatee 專案。我的做法沒有參照 Rails,而且需要處理很多安全缺陷。我不得不在 rails-api 的社群驅動上層和傳統的 rails 上進行開發。
在 Rails 5 中,rails-api 被整合到核心包中,並且能夠像簡單 JSON API 那樣子使用 Rails。結合個人經歷,我認為這是一個偉大的改進。我不再用為我的 JavaScript 客戶端建立後臺 API 發愁了。
Ruby 2.2.1
Ruby 2.2 是 Ruby 社群的一個新版本。不僅僅帶來了Ruby巨大的效能提升,還引入了大量的新功能。此外,symbols的垃圾收集獲取了廣泛的好評。有這樣一個傳說,當這個宣告發布的時候,龍族的Valeria在Seventh王國落下了玫瑰雨。OK!也許我扯得太遠了,但是一般來說是這樣的。
注意:在遷移你的Rails 5之前你需要確認你的應用可以在Ruby 2.2.1上工作。
由於這些增強功能,Ruby 2.2+對Rails 5來說是一個可靠的選擇。Rails 5將僅支援在Ruby 2.2.1以上的版本上工作。
Turbolinks 3
傳統的 web 應用一般整頁載入,而導致響應比較慢。解決這個問題的一個辦法是隻載入最小的內容區域。 Turbolinks 只從伺服器過載某個區域而不是重新整理整個頁面。 這個改進雖然一定程度上改進了效能,但是相對還是比較慢。Turbolinks 3 將解決這個問題。
Tubolinks 3 讓你可以有選擇性的更新部分割槽域(通過 partial),而大部分頁面都不更新。這很像 SPA的工作。你可以選擇直接在 server 端完成所有這樣的工作,是不是很棒?
這是一個很讚的特性,目前的趨勢朝著單頁應用發展。然而,乍一看,它好像需要你去手動管理。這意味著你必須在特定的點上記住程式需要過載的部分。對我來說,這增加了不少程式碼累贅,而且容易搞砸。就我個人而言,我更喜歡使用React類似的東西,它通過虛擬DOM處理這個很在行。
備註: React的工作方式是:它維護了一個所發生操作的虛擬DOM。然後,比較虛擬DOM和實際DOM的差異,然後只做需要的變更。它確保DOM只有在絕對必要才發生變化且是最小化的。
不得不說的是,對於那些不喜歡圍著JS轉的人,這提供了一個即時的效能提升。
Action Cable
現在需要專案使使用 Websockets 來推送實時更新到客戶端。雖然大多數瀏覽器已經開始支援這一點,我們任然需要伺服器上一個強大的客戶端來,管理使用者和適當的傳送更新訊號。這種功能在一些新的框架中已經出現,像 Phoenix for Erlang。Rails 社群需不得不需要求助於第三方解決方案來實現這個,像Pushr.
注意:對於新手來說,Websockets從瀏覽器開啟雙工連線是W3C的標準.伺服器端可以在需要的時候和客戶端通訊(比如推送更新)並且同步更新客戶端狀態而不需要整個頁面重新載入.舉例來說,這就是Gmail如何在不重新載入真個頁面的情況下載入新的郵件.
通常 Rails 都提供了所有需要建立應用的開箱即用的工具。這也是它為什麼如此流行的原因,特別是在一些初創團隊。對 Websocket 支援的缺乏社是區中主要的不滿的主要原因之一。看起來 Rails 核心團隊已經注意到這一點並且開始討論Action Cable。我們不得不等待一段時間看它是如何在現實生活中工作的,但它任然令人振奮。
一些新的細節
Rails 內建 Rake
對於許多 Rails 新手來說,困惑的原因來自於不得不想出什麼時候是有 rake 什麼時候使用 rails。現在你不再需要在 rake 和 ralis 命令的上下文直接切換。你可以使用 ralis 命令執行所有的 Rake 任務。比如說:
rake db:migrate
將會變成:
rails db:migrate
這表面上看起來不太相同,但是對於許多初學者來說會變得簡單。Rails 5 也會新增 restart 命令來快速重啟應用。
活動記錄(Active Record)的改變
一個改變是大多數時候忽略了對 tobelongs_to 的更新。當你建立一個 Student 類是 belongs_to 的關聯類,建立一個 student 沒有相關聯的類是可行的。這導致了大量資料的不一致。對 Rails 5 來說,它的父類已經變成強制性的了。如果你在這裡嘗試插入一個空的記錄,活動記錄(Active Record)將會丟擲異常。
改變對控制器(Controller)的測試
如果你測試你的模板並將其渲染到你的控制器,那你就做錯了。對你的模板做個簡單的變更將會留給你一個不眠之夜,抓住那個罪魁禍首。這就是為什麼在 Rails 5 中,assert_template 被廢棄的原因。但是,在目前你還會繼續使用 assert_select 去檢查特定的 DOM 元素。
如果你已經在一個控制方法內測試了例項變數,你就應該記得 assigns 也應該消失了。
如果你正在寫控制器的測試用例,需要關注 cookies 的新命令,HTTP 返回值和 DB 呼叫。如果有得話,等等,這聽起來像一個集合測試。好吧,你知道我想表達什麼了。。。在將來的整合測試中會去掉控制器測試。
注意:點選鏈
Rails Dom testing取等多詳細內容和最佳實踐
專注
在 web 開發中 javascript 扮演著統治地位的今天,web 框架僅僅是在降低更少的 api 服務。Rails 核心團隊意識到這點並且在朝向正確的方向。歡迎在評論中加入我們的討論行列。
相關文章
- PHP 7 的 5 大新特性PHP
- Oracle 資料庫12c 16大新特性總結Oracle資料庫
- Oracle 資料庫12c 16大新特性總結(轉)Oracle資料庫
- Rails 5 有什麼新特性?AI
- Rails常用gem總結AI
- html5新特性總結HTML
- Dubbo3詳解(5大新特性及功能圖解)圖解
- 打破 Serverless 落地邊界,阿里雲 SAE 釋出 5 大新特性Server阿里
- Apple Watch watch OS 3更新 九大新特性彙總APP
- IIS 7.0 6大新特性
- Oracle特性總結Oracle
- Rails 4.0新特性介紹AI
- Visual Basic 14 的 14 大新特性
- ES 5 新增特性彙總
- Java8特性總結Java
- 機器學習模型的特性總結機器學習模型
- Oracle Database 12c十二大新特性OracleDatabase
- Tomcat 7 的七大新特性Tomcat
- css3新特性總結CSSS3
- ES6新特性總結
- React 16 新特性使用總結React
- JDK1.8新特性總結JDK
- C++ 14 新特性總結C++
- oracle flashback特性學習總結Oracle
- Java EE 7 三大新特性的介紹Java
- 幾次外包專案總結
- 【總結】計算幾何模板
- const特性總結(不斷更新)
- PHP 各個版本新特性總結PHP
- 總結PHP 7新增加的特性PHP
- HTTP/2 特性的簡單總結HTTP
- 個人總結(css3新特性)CSSS3
- C++11新特性總結 (二)C++
- C++11新特性總結 (一)C++
- C# 6.0 的新特性總結C#
- B+樹的幾點總結
- 幾年的Git使用技巧總結Git
- Java8常用的新特性總結Java