-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

SPA設計與架構:理解單頁面Web應用

( 簡體 字)
作者:盧俊祥類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社SPA設計與架構:理解單頁面Web應用 3dWoo書號: 45584
詢問書籍請說出此書號!

缺書
NT售價: 395

出版日:11/1/2016
頁數:304
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121300912
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯者序
當第一次使用Gmail 時,我被它那流暢的原生桌面般體驗迷倒,贊嘆天底下居然有如此令人驚艷的Web 應用。之后,SPA 的概念逐漸盛行,越來越多關于SPA的介紹、實踐分享進入開發者的眼簾。然而,在現實開發世界里,我發現很多開發者對SPA 開發技術的整體概念是模糊的,往往以為只需靠Ajax 技術,就能很好地實現SPA。
在我大致瀏覽了本書的內容后,立刻感受到這是一本非常不錯的SPA 開發書籍。事實上,這本書在Amazon 網站中獲得了非常不錯的讀者評價。在翻譯過程中,我自己也強化了不少SPA 開發概念,并受益匪淺。
Web 前端開發技術可謂是當今變化最為頻繁的軟件開發技術,新的開發理念、新的框架層出不窮,同時ES 6 在語法上帶來了諸多變化,這些都迫使我們不斷去適應新趨勢的發展。但本書著力于SPA 開發技術的基本原理。掌握了這些基礎知識,就能夠做到相當程度的以不變應萬變,這也是本書吸引我的地方。
歲月如梭,能夠沉浸在技術創造的樂趣中是一件讓我無限期待的事情。編寫出優美的代碼,構建出極致的應用,是每個熱愛創造的開發者共同的追求目標。真心期待本書能夠帶給你不一樣的收獲。
同時,林長瑞、吳桐、朱建寶、周榮華、吳勝華、葉銘輝、李禧強、姚建峰、鄭秀玲亦不同程度地參與了本書的翻譯工作。
感謝我的妻子和娃,你們給了我很大的支持,小寶貝還給我帶來了許許多多的樂趣。同時還要感謝本書的策劃編輯張春雨,在你的鼓勵下,我的翻譯過程充滿愉悅。
盧俊祥
2016 年10 月




1991 年的時候,Tim Berners-Lee 推出了全球首個網站,這個網站運行在一個他命名為“WorldWideWeb”的程序上。兩年后,他發布了WorldWideWeb 的源代碼,世界從此發生了天翻地覆的變化。迄今仍可在info.cern.ch 瀏覽人類歷史上的第一個Web 頁面。
自1991 年起,Web 得到了空前的發展。在它24 歲的時候1 ,其仍是IT 世界里使用最廣泛的技術。Web 以某種形式運行于各種操作系統、硬件平臺及絕大部分的移動設備之上。讓這一切成為可能的軟件就是萬能的Web 瀏覽器。
傳統上,Web 瀏覽器是簡單的中間人角色。其從服務器端獲取數據,展示數據,再將數據發回服務器端,然后又獲取更多的數據并展示。而今天的Web 瀏覽器,雖仍堅守初心,但其復雜程度已遠非當年可預見。
當年簡陋的瀏覽器已經發展成為各式各樣應用程序的運行時成熟環境。無須安裝,就能隨處訪問、運行這些應用程序。這就是開發者的“屠龍技”。部署四處運行且即時更新的代碼庫——這種魅力實在是難以抗拒。還沒有其他任何一種技術能夠做到如此得意。
站在Web 平臺成功之巔的是無處不在的JavaScript——一門10 天內發明出來的語言,它大概是目前世界上使用最廣泛的編程語言了。開發者們已經接納了JavaScript,它幫我們打開了嶄新應用類型的大門,之前做夢都想不到這一切會發生在Web 瀏覽器中。
這些新型應用程序,我們通常稱之為單頁面應用程序(SPA),幾乎完全在瀏覽器中運行,其引入了一套全新的規則、模式及問題。Web 的廣泛吸引力帶來了層出不窮的JavaScript 和CSS 框架;框架如此之多,以至于要做出合適的挑選猶如大海撈針。
親愛的讀者,這就是本書如此重要的原因。
在過去的4 年里,我作為一名開發者在Telerik 工作,我積極倡導對Kendo UI JavaScript 庫的關注。我看到過太多的JavaScript 框架起起滅滅。當某個流行框架的炒作達到臨界狀態時,下一個“大事件” 1 就隨之而來,只留下那些在所謂“時髦”框架之上實際構建解決方案的開發者們仍在收拾殘局。這讓我總想知道它何時能夠消停下來,這樣我們就能夠專注于“正確之道”,以構建新一代的富客戶端應用程序。
殘酷的現實卻是:做任何事情都不存在所謂的“正確之道”。唯一的辦法就是為你的項目和技能棧而戰。這是讓你更具生產力并最終成功的唯一姿勢。
為了在SPA 開發世界里殺出一條路,理解SPA 概念之下的基本原理是很有必要的。掌握一門框架還遠遠不夠,因為這樣的話,最終仍會讓你感到貧瘠和匱乏。深度理解成功SPA 構筑之法的核心概念,使你得以從容決策,在借助JavaScript 框架完成了80% 功能之后,懂得如何構建剩下的20%。
本書就是你的指導手冊——不管你是專家還是新人。在讀它的時候,我發現自己在惡補過往不求甚解的基礎,并對之前感覺甚好而實際上只是部分理解(甚至理解錯誤)的術語有了新認識。這些認識和解釋埋藏在理論結合實踐的字里行間,并在討論SPA 框架的時候教你如何構建SPA、正面處理現實世界需求。
那些我通常持懷疑態度的書籍,都試圖解釋跟SPA 一樣大的概念,但是這部書籍的亮點卻在于——另辟蹊徑設法將復雜主題化解為易于理解與消化的部分。
我毫無保留地傾力推薦這本書——每一頁,每一句。
Burke Holland
Telerik 開發者關系主管


前言
我經歷過的許多項目,都需要花費一年甚至更多的時間來持續構建。當然,之后還有各種更新和意想不到的事情在等著我們處理。由于這些類型的項目耗時長久,而在這期間,技術的發展突飛猛進;因此,在我準備開始下一個項目的時候,卻發現不得不重新評估我的技術棧,因為事物的變化早已今非昔比。
當我和團隊在準備最近一次的SPA 項目時,我萌生了編寫這本書的想法。我的主管允許我們探研項目需要的“最佳”技術棧。因此,我們開始評估各種解決方案并創建小型概念驗證應用程序。
結束評估工作之后,我對在海量信息中篩選出方向感到心有余悸。對于那些構建SPA 應用的新手而言,我的艱辛歷程同樣也是他們要面對的困難。
因此我打算寫一本書,不僅會總結構建SPA 所需知識點,還將介紹構建SPA相關的一些第三方庫或框架。此外,我希望這本書的內容簡單直接并容易消化,同時還能夠提供足夠的技術細節,爭取讓讀者在讀完內容之后,具備實際構建SPA 應用的能力。
感謝你跟我一起出發。我希望你最終能夠發現這本書是一部不可或缺的SPA 開發指南。

關于本書
本書引導你如何創建單頁面應用程序。不僅介紹SPA 構建所需的框架和技術,同時還介紹單元測試、客戶端開發與構建任務的自動化。
由于SPA 構建的過程細節決定著技術棧的選擇,因此本書會使用當今主流的JavaScript 框架來比較多種方式。為什么會存在這么多框架呢?原因之一就是應用構建沒有標準方式。通過比較不同框架,可以更好地決定哪種方案更適合你的項目。
本書中的每章都包含了一個完整可行的應用示例。我盡量保持內容的有趣和簡單。我并不喜歡那種用一頁頁源代碼填充了半本書的大型示例,這讓人讀起來太費力了。因此,我決定為每章創建獨立的項目。與此同時,盡可能保持每個示例短小精悍,緊扣當前章節的概念主題并不失趣味性。
路線圖
第1 部分:基礎知識
第1 章介紹SPA 整體概念。一開始你將了解到重要概念及SPA 應用與傳統Web 應用間的差異。我會給出一個清晰簡明的定義,并簡要說明SPA 的各個部分是如何結合起來的。
第2 章會繼續深入一層,介紹JavaScript框架的一個“流派”——MV*框架,同時介紹它們在單頁面應用程序創建中的作用。本章還會探討框架之間的共性以及差異性。章末示例使用三種MV* 框架來分別創建,讓你在實踐中感受不同的構建風格。
在第3 章中,你將了解模塊化編程。這里會通過示例直觀了解應該在SPA 中使用模塊的原因。我們還將分解模塊模式的語法,并一步步解釋它。本章最后介紹模塊加載及AMD 模塊的內容。
第2 部分:核心概念
第4 章快速介紹客戶端路由的知識點。你將了解路由的運行機制,以及各種框架如何處理路由。本章也會介紹客戶端路由影響應用程序狀態的方式。
第5 章介紹SPA 的布局設計與視圖合成。一開始先了解簡單設計,然后借助復雜路由逐步深入到復雜設計。此外,我們還將涉及高級的布局主題,如嵌套視圖與并列視圖。
第6 章討論模塊間通信。如果創建的模塊不能相互通信,那還有什么意義呢?!在本章中,你不僅會看到模塊間通信的不同方式,也將了解模塊化應用設計之道。
第7章將闡述SPA環境中的服務器端處理。盡管客戶端仍是我們關注的焦點,但也應該了解SPA 中的服務器端通信,以及如何處理服務器端調用的返回結果。本章會討論通過回調函數與Promise 方式處理返回結果。你還將看到MV* 框架如何幫助我們完成這些任務。本章最后將簡短介紹REST 及SPA應用程序如何調用RESTful 服務。
第8 章是一個關于JavaScript應用程序單元測試的概覽,特別針對SPA 應用。如果你從未接觸過客戶端單元測試,也不用太過擔心。在這里我們將放緩腳步、降低難度,一步步了解相關的基礎知識。
最后是第9 章,在這里會討論客戶端任務自動化在開發和構建過程中帶給我們的幫助。同時從整體上了解針對各種場景的最常用任務類型,并在本章最后的示例項目中實踐這些任務。
附錄是章節的補充。附錄A 解析第2 章示例項目(三個版本)的完整源代碼。附錄B 和附錄C 對第7 章做補充。附錄B 的內容為XMLHttpRequest API 概覽,附錄C 是該章示例項目服務器端調用部分的總結。盡管第7 章的內容組織也考慮到讓你能夠使用自己的服務器端語言,但附錄C 仍額外包含了一個Spring MVC 代碼指南,這些代碼包含在下載源文件里。附錄D是關于Node.js 和Gulp.js 安裝的簡單指南,這些內容是實踐第9 章代碼所需的。
閱讀對象
本書假設你至少具備JavaScript、HTML 和CSS 方面的基本知識。如果你有一定的Web 開發經驗,那也是很有幫助的,但這不是必需的。然而,這本書的目標人群是那些在SPA 方面欠缺經驗甚至根本沒經驗的開發者,以及在構建SPA 過程中未使用過本書所涵蓋技術的開發者。
代碼約定與下載
程序清單中的源代碼,以及在正文中為了區別于普通文字的代碼,都以等寬字體方式呈現。程序清單中還包含代碼注解,以突出重點概念。
本書示例源代碼可以通過出版社網站下載:https://www.manning.com/books/spadesign-and-architecture。
軟硬件要求
如果你使用最新的Mac OS X 或Windows,以及現代瀏覽器(如Firefox、Safari或Chrome),應該可以正常運行書中示例。對于特定軟件要求,可以在相關章節或附錄中找到答案。
由于大多數示例都動態獲取HTML 文件,如果你在本地(而非服務器)運行書中示例,可能需要在瀏覽器中設定某些權限。請參考下載源文件里的項目readme.txt 文檔以獲取具體信息。
如果你想運行第7 章示例,則需要用到Web 服務器及服務器端語言。每位開發者都有自己的技術棧,因此你可以決定你自己的技術路線。我使用的是Java 和Spring MVC,并在書中提供了一個對應的簡短設置指南。如果你使用不同的軟件,書中也從概念上描述了服務器端調用及相關對象,以便你能夠通過你自己的技術棧重建示例應用。
內容簡介:

單頁的Web應用程序(SPA)是網絡軟件發展的下一階段,SPA能夠使瀏覽器應用像原生桌面應用一樣流暢易用。 開發SPA需要新的開發理念,并掌握那些支持更復雜應用的新技術。幸運的是,學習如何創建SPA并不需要十分豐富的經驗!本書能夠幫助開發者從傳統的網頁應用開發過渡到SPA的開發。本書首先介紹了SPA模式,及建立創建鏈接頁面的標準方法。然后簡單介紹了模塊化JavaScript編程,包括AMD和模塊加載器。本書將指導讀者學習SPA架構的各個方面,包括MV*框架、單元測試、路由、布局管理、數據訪問、發布/訂閱、性能和安全性。配套的示例很容易上手,且可被應用于讀者自己的庫或框架中。

目錄:

第1 部分 基礎知識 1
1 單頁面應用程序介紹 3
1.1 SPA 簡述 4
1.1.1 無須刷新瀏覽器 7
1.1.2 表現邏輯位于客戶端 7
1.1.3 服務器端事務處理 7
1.2 更進一步 8
1.2.1 以Shell 頁面開始 8
1.2.2 從傳統頁面到視圖 9
1.2.3 視圖的產生 10
1.2.4 實現無刷新的視圖切換 11
1.2.5 貫穿動態更新過程的流暢性 12
1.3 SPA 應用相較傳統Web 應用的優勢 12
1.4 溫故知新 13
1.5 優秀SPA 應用的構成 15
1.5.1 組織項目 15
1.5.2 創建可維護的松耦合UI 17
1.5.3 使用JavaScript 模塊 18
1.5.4 執行SPA 導航 19
1.5.5 創建視圖組成與布局 19
1.5.6 模塊通信 20
1.5.7 與服務器端通信 20
1.5.8 執行單元測試 20
1.5.9 客戶端自動化技術 20
1.6 小結 21
2 MV* 框架介紹 .22
2.1 MV* 概念 24
2.1.1 傳統UI 設計模式 25
2.1.2 MV* 和瀏覽器環境 27
2.2 MV* 基礎概念 28
2.2.1 框架 29
2.2.2 我們的MV* 項目 30
2.2.3 模型 32
2.2.4 綁定 36
2.2.5 模板 40
2.2.6 視圖 44
2.3 為什么要用MV* 框架 44
2.3.1 關注分離 . 45
2.3.2 簡化日常任務 46
2.3.3 提升生產率 47
2.3.4 標準化 47
2.3.5 可擴展性 48
2.4 框架選擇 48
2.5 挑戰環節 50
2.6 小結 50
3 JavaScript 模塊化 52
3.1 模塊概念 53
3.1.1 模塊模式概念 53
3.1.2 模塊結構 54
3.1.3 揭示模式 55
3.2 模塊化編程的意義 56
3.2.1 避免命名沖突 56
3.2.2 保護代碼完整性 65
3.2.3 隱藏復雜性 67
3.2.4 降低代碼改變帶來的沖擊 68
3.2.5 代碼組織 68
3.2.6 模塊模式的不足 69
3.3 模塊模式剖析 69
3.3.1 可訪問性控制 69
3.3.2 創建公有API 70
3.3.3 允許全局導入 73
3.3.4 創建模塊的命名空間 73
3.4 模塊加載及依賴管理 74
3.4.1 腳本加載器 74
3.4.2 異步模塊定義——AMD 75
3.4.3 通過RequireJS 實踐AMD 76
3.5 挑戰環節 81
3.6 小結 81
第2 部分 核心概念 83
4 單頁面導航 85
4.1 客戶端路由器概念 86
4.1.1 傳統導航 86
4.1.2 SPA 導航 86
4.2 路由及其配置 88
4.2.1 路由語法 90
4.2.2 路由配置項 90
4.2.3 路由參數 91
4.2.4 缺省路由 93
4.3 客戶端路由器的工作機制 93
4.3.1 片段標識符方式 94
4.3.2 HTML5 歷史API 方式 95
4.3.3 使用HTML5 歷史API 方式 97
4.4 綜合實作:實現SPA 路由 98
4.4.1 教員列表(缺省路由) 99
4.4.2 主要聯系人路由 101
4.4.3 教員授課時間(參數化路由) 102
4.5 挑戰環節 104
4.6 小結 105
5 視圖合成與布局 106
5.1 項目介紹 107
5.2 布局設計概念 108
5.2.1 視圖 108
5.2.2 Region 109
5.2.3 視圖合成 110
5.2.4 嵌套視圖 111
5.2.5 路由 112
5.3 高級合成與布局的可選方案 113
5.3.1 優點 113
5.3.2 缺點 114
5.4 設計應用程序 114
5.4.1 設計基本布局 115
5.4.2 設計基本內容 117
5.4.3 在復雜設計中應用視圖管理 122
5.4.4 通過自身狀態創建嵌套視圖 125
5.5 挑戰環節 127
5.6 小結 128
6 模塊間交互 129
6.1 模塊概念回顧 131
6.1.1 用模塊封裝代碼 131
6.1.2 API 提供對內部功能的訪問控制 133
6.1.3 SRP——以單一目的作為設計出發點 134
6.1.4 代碼重用——控制項目規模 135
6.2 模塊間交互方式 136
6.2.1 通過依賴進行模塊間交互 136
6.2.2 依賴方式的優缺點 138
6.2.3 通過發布/ 訂閱模式進行模塊間交互 138
6.2.4 發布/ 訂閱模式優缺點 141
6.3 示例項目細節 142
6.3.1 搜索功能 144
6.3.2 顯示產品信息 150
6.4 挑戰環節 .. 155
6.5 小結 . 155
7 與服務器端通信 156
7.1 示例項目新要求 157
7.2 與服務器端通信綜述 158
7.2.1 選擇數據類型 158
7.2.2 HTTP 請求方法 159
7.2.3 數據轉換 160
7.3 使用MV* 框架 161
7.3.1 請求生成 162
7.3.2 通過回調函數處理結果 165
7.3.3 通過Promise 處理結果 166
7.3.4 Promise 錯誤處理 170
7.4 RESTful Web 服務調用 172
7.4.1 什么是REST 172
7.4.2 REST 原則 172
7.4.3 MV* 框架的RESTful 支持 174
7.5 示例項目細節 174
7.5.1 配置REST 調用174
7.5.2 添加產品到購物車 177
7.5.3 查看購物車 179
7.5.4 修改購物車 181
7.5.5 從購物車中移除產品 183
7.6 挑戰環節 184
7.7 小結 184
8 單元測試 186
8.1 示例項目說明 187
8.2 什么是單元測試 187
8.2.1 單元測試的好處188
8.2.2 構建更好的單元測試 189
8.3 傳統的單元測試 192
8.3.1 QUnit 起步 193
8.3.2 創建第一個單元測試 196
8.3.3 測試由MV* 對象創建的代碼 200
8.3.4 測試對DOM 所做的改變 205
8.3.5 混合使用其他測試框架206
8.4 挑戰環節 208
8.5 小結 208
9 客戶端任務自動化 209
9.1 Task Runner 的常見用途 210
9.1.1 即時刷新瀏覽器 210
9.1.2 自動化JavaScript 和CSS 的預處理過程 211
9.1.3 自動化Linter 代碼分析 211
9.1.4 持續單元測試 211
9.1.5 文件串接 212
9.1.6 代碼壓縮 212
9.1.7 持續集成 212
9.2 Task Runner 選擇 212
9.3 本章示例項目 213
9.3.1 Gulp.js 介紹 214
9.3.2 創建第一個任務 215
9.3.3 創建代碼分析任務 216
9.3.4 創建瀏覽器刷新任務 218
9.3.5 自動化單元測試220
9.3.6 創建構建過程 222
9.4 挑戰環節 227
9.5 小結 227
A 員工通訊錄示例說明 229
B XMLHttpRequest API 259
C 第7 章內容的服務器端設置與總結 266
D 安裝Node.js 與Gulp.js 277
序: