Web應用發展的下一個熱點是單頁麵Web應用程序,其將原生桌麵應用的流暢體驗帶到瞭瀏覽器。如果你打算從傳統Web應用跨越到SPA卻又無從下手,那麼這本書正是為你準備的。本書講述SPA應用程序構建所需的設計與開發技術。書中首先介紹SPA模型,並闡述SPA標準構建方式。隨著內容的展開,作者通過具體的SPA構建知識點引導你前進,涵蓋MV*框架、單元測試、路由、布局管理、數據訪問、發布/訂閱模式以及客戶端任務自動化等內容。書中示例豐富易懂,並可結閤各種第三方庫或框架來創建。內容包括:
√ 模塊化JavaScript實踐
√ 理解MV*框架
√ 布局管理
√ 客戶端任務自動化
√ SPA應用程序測試
SPA 開發技術的運用是當今Web 開發領域的熱門趨勢,但真正全麵掌握該技術的開發者並不多。本書詳盡闡述單頁麵Web 應用(SPA)開發技術,從SPA 構建基礎入手,通過MV*、模塊化編程、路由、模塊間通信、服務器端交互等概念的闡述,全麵介紹SPA 的設計與架構,幫助讀者正確掌握SPA 開發的各方麵知識要素。同時,《SPA設計與架構:理解單頁麵Web應用》中還討論瞭SPA 的單元測試及客戶端任務自動化,覆蓋瞭從開發到部署的一係列任務,讓讀者在閱讀完《SPA設計與架構:理解單頁麵Web應用》之後能夠打下紮實的SPA 開發基礎。
《SPA設計與架構:理解單頁麵Web應用》的重點是幫助讀者正確、全麵地掌握SPA 開發概念,這些概念都是通用的。但為瞭讓內容更全麵、具體,《SPA設計與架構:理解單頁麵Web應用》將通過Knockout、Backbone.js 及AngularJS 這三種不同風格的MV* 框架來進行比較性討論,這是本書的一大特色。同時在涉及具體MV* 框架知識點時,《SPA設計與架構:理解單頁麵Web應用》中會提供相應介紹。書中示例豐富具體,並提供完整源代碼下載。
《SPA設計與架構:理解單頁麵Web應用》適閤前端及對SPA 技術感興趣的開發者閱讀。讀者隻需掌握JavaScript、HTML 和CSS 基本知識,就可以閱讀。
Emmit A. Scott 是一名有17 年Web 應用構建經驗的高級軟件工程師和架構師。他為教育、銀行和通信領域開發過大型應用程序。他的愛好包括閱讀(特彆喜歡Jim Butcher的小說)、吉他(想當年他可是一位搖滾樂手)以及盡可能多陪陪孩子。
譯者簡介
盧俊祥
譯者,書迷;關注Web 技術趨勢,熱衷App 開發、Web 開發、數據分析、架構設計以及各類編程語言;陳氏太極拳五十六式愛好者;佛禪人生,緣散緣聚。
第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
譯者序
當第一次使用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 歲的時候,其仍是IT 世界裏使用最廣泛的技術。Web 以某種形式運行於各種操作係統、硬件平颱及絕大部分的移動設備之上。讓這一切成為可能的軟件就是萬能的Web 瀏覽器。
傳統上,Web 瀏覽器是簡單的中間人角色。其從服務器端獲取數據,展示數據,再將數據發迴服務器端,然後又獲取更多的數據並展示。而今天的Web 瀏覽器,雖仍堅守初心,但其復雜程度已遠非當年可預見。
當年簡陋的瀏覽器已經發展成為各式各樣應用程序的運行時成熟環境。無須安裝,就能隨處訪問、運行這些應用程序。這就是開發者的“屠龍技”。部署四處運行且即時更新的代碼庫——這種魅力實在是難以抗拒。還沒有其他任何一種技術能夠做到如此得意。
站在Web 平颱成功之巔的是無處不在的JavaScript——一門10 天內發明齣來的語言,它大概是目前世界上使用最廣泛的編程語言瞭。開發者們已經接納瞭JavaScript,它幫我們打開瞭嶄新應用類型的大門,之前做夢都想不到這一切會發生在Web 瀏覽器中。
這些新型應用程序,我們通常稱之為單頁麵應用程序(SPA),幾乎完全在瀏覽器中運行,其引入瞭一套全新的規則、模式及問題。Web 的廣泛吸引力帶來瞭層齣不窮的JavaScript 和CSS 框架;框架如此之多,以至於要做齣閤適的挑選猶如大海撈針。
親愛的讀者,這就是本書如此重要的原因。
在過去的4 年裏,我作為一名開發者在Telerik 工作,我積極倡導對Kendo UIJavaScript 庫的關注。我看到過太多的JavaScript 框架起起滅滅。當某個流行框架的炒作達到臨界狀態時,下一個“大事件” 就隨之而來,隻留下那些在所謂“時髦”框架之上實際構建解決方案的開發者們仍在收拾殘局。這讓我總想知道它何時能夠消停下來,這樣我們就能夠專注於“正確之道”,以構建新一代的富客戶端應用程序。
殘酷的現實卻是:做任何事情都不存在所謂的“正確之道”。唯一的辦法就是為你的項目和技能棧而戰。這是讓你更具生産力並最終成功的唯一姿勢。
為瞭在SPA 開發世界裏殺齣一條路,理解SPA 概念之下的基本原理是很有必要的。掌握一門框架還遠遠不夠,因為這樣的話,最終仍會讓你感到貧瘠和匱乏。深度理解成功SPA 構築之法的核心概念,使你得以從容決策,在藉助JavaScript 框架完成瞭80% 功能之後,懂得如何構建剩下的20%。
本書就是你的指導手冊——不管你是專傢還是新人。在讀它的時候,我發現自己在惡補過往不求甚解的基礎,並對之前感覺甚好而實際上隻是部分理解(甚至理解錯誤)的術語有瞭新認識。這些認識和解釋埋藏在理論結閤實踐的字裏行間,並在討論SPA 框架的時候教你如何構建SPA、正麵處理現實世界需求。
那些我通常持懷疑態度的書籍,都試圖解釋跟SPA 一樣大的概念,但是這部書籍的亮點卻在於——另闢蹊徑設法將復雜主題化解為易於理解與消化的部分。
我毫無保留地傾力推薦這本書——每一頁,每一句。
Burke Holland
Telerik 開發者關係主管
最近我開始涉足前端開發領域,對各種技術棧和概念都充滿瞭好奇。SPA(單頁麵應用)這個詞齣現的頻率很高,也聽聞它在提升用戶體驗方麵有著顯著的優勢。然而,在實際的學習過程中,我發現很多資料都隻是簡單地介紹“什麼是SPA”,或者直接拋齣代碼示例,讓我覺得難以理解背後的邏輯和設計思路。我希望這本書能夠從更基礎的概念入手,清晰地解釋SPA的工作原理,比如它是如何通過JavaScript動態地渲染頁麵的,又是如何處理用戶交互和導航的。我特彆期待它能夠用通俗易懂的語言,結閤清晰的圖示,來幫助我理解SPA的“設計”和“架構”這兩大核心概念。例如,在“設計”方麵,這本書是否會探討SPA在用戶界麵設計上的一些獨特性?如何平衡動態交互和信息呈現?在“架構”方麵,它是否會介紹一些常見的SPA架構模式,並解釋這些模式的優勢和適用場景?我非常好奇,對於初學者來說,如何纔能避免陷入“寫齣混亂的代碼”的陷阱,這本書是否會提供一些指導性的原則和建議?我希望這本書能夠幫助我建立起對SPA的整體認知,理解它為什麼會流行,以及它背後所蘊含的設計思想。這本書的標題給我一種“循序漸進”的感覺,讓我覺得它能夠一步步地引導我理解SPA的精髓,而不是上來就讓我感到壓力。
評分這本書的封麵設計就很有吸引力,有一種科技感和專業感撲麵而來。我作為一個前端開發新手,一直對SPA(單頁麵應用)的概念感到好奇,但又覺得它聽起來有些復雜,不太敢輕易上手。市麵上關於SPA的書籍不少,但很多都過於理論化,或者隻講解某個框架的用法,讓我覺得難以建立起整體的理解。這本書的標題——“SPA設計與架構:理解單頁麵Web應用”——恰恰擊中瞭我的痛點,它強調瞭“設計”和“架構”,以及“理解”,這讓我覺得它不是一本簡單的技術教程,而是能夠幫助我建立起對SPA的係統性認識。我特彆期待這本書能夠從宏觀角度剖析SPA的優勢、劣勢以及適用的場景,而不是僅僅停留在具體的代碼實現上。例如,它是否會講解SPA是如何解決傳統多頁麵應用的一些痛點的?在用戶體驗、性能優化、SEO等方麵,SPA又會麵臨哪些獨特的挑戰,以及如何通過優秀的設計和架構來剋服這些挑戰?我希望它能提供一些實際的案例,通過分析這些案例的設計思路和技術選型,來加深我的理解。另外,這本書的“架構”二字也引起瞭我的興趣,我很好奇它會探討SPA的不同架構模式,比如MVC、MVVM,或者更現代的組件化架構。是否會涉及到狀態管理、路由管理、模塊化開發等關鍵的架構決策?這些都是我作為新手最希望學習到的核心內容,它們將直接影響到我未來開發SPA項目的質量和可維護性。總而言之,我對這本書充滿瞭期待,希望它能夠成為我通往SPA開發領域的入門指南,並為我打下堅實的基礎。
評分我是一個對新技術充滿熱情但又有些選擇睏難癥的開發者。SPA(單頁麵應用)無疑是當下Web開發的熱點之一,但市麵上琳琅滿目的框架和工具,以及各種“銀彈”式的宣傳,讓我感到有些迷茫。我希望能夠找到一本能夠讓我真正“理解”SPA的書,而不是簡單地教我如何使用某個框架。這本書的標題——“SPA設計與架構:理解單頁麵Web應用”——非常吸引我,因為它強調瞭“設計”和“架構”,這暗示著它將深入探討SPA的內在邏輯和構建哲學。我特彆期待它能夠解答我的一些疑問:為什麼SPA能夠提供更流暢的用戶體驗?它的核心優勢究竟體現在哪裏?在“設計”層麵,它是否會討論一些關於用戶界麵和交互的通用設計原則,以確保SPA應用的易用性和吸引力?在“架構”層麵,我非常關心它是否會闡述一些關於SPA的通用架構模式,比如如何進行狀態管理、路由管理、組件化開發等,以及這些模式的優劣勢和適用場景。我希望這本書能夠幫助我建立起一種“舉一反三”的能力,即使未來遇到新的框架或技術,也能夠基於這些通用的設計和架構原則,快速掌握其精髓。我希望這本書能夠像一位經驗豐富的導師,引導我深入探究SPA的本質,而不是簡單地教我“怎麼做”,而是讓我明白“為什麼這樣做”。
評分我是一名後端開發者,近幾年也開始關注前端的發展,尤其是SPA(單頁麵應用)的興起。從我的角度來看,SPA的齣現確實改變瞭Web應用的開發模式,帶來瞭更接近桌麵應用的交互體驗。然而,我對於SPA的“設計”和“架構”方麵,一直存在一些模糊的概念。我不太清楚在SPA中,前後端如何進行更有效的協同工作?API的設計在SPA中扮演著怎樣的角色?我希望這本書能夠從一個更高的層麵來剖析SPA的設計原則,而不是僅僅停留在前端的技術細節上。它是否會探討SPA在係統整體設計上的考量,比如如何權衡客戶端渲染和服務器端渲染的優勢?在“架構”方麵,我好奇它是否會討論一些與後端相關的設計,例如如何設計 RESTful API 來更好地支持SPA的數據請求,如何處理認證授權等安全問題?在項目的部署和維護方麵,SPA又會麵臨哪些與傳統Web應用不同的挑戰?這本書的標題強調瞭“理解”,這讓我覺得它可能不僅僅是關於前端框架的堆砌,而是能夠幫助我建立起一種全局觀,理解SPA在整個Web生態係統中的位置和價值。我希望這本書能夠為我提供一些跨領域的洞察,幫助我更好地理解現代Web應用的架構演進。
評分作為一個有著幾年經驗的前端開發者,我一直在思考如何將項目做得更健壯、更具可擴展性。近幾年,SPA的趨勢愈發明顯,很多大型應用都采用瞭SPA的架構。然而,在實際項目中,我們也遇到瞭不少SPA帶來的挑戰,比如首屏加載慢、SEO不友好、狀態管理混亂等問題。市麵上很多文章和教程都集中在某個框架(如React、Vue)的具體API講解,而對於SPA整體的設計理念和架構原則卻鮮有深入的探討。我希望這本書能夠彌補這一空白,從更底層的、更原理性的角度來闡述SPA的設計哲學。它是否會詳細講解SPA的核心組成部分,比如路由、視圖、數據管理等,並分析不同實現方式的優劣?在“架構”層麵,我非常關注它是否會提供一些通用的設計模式和最佳實踐,幫助我們構建齣清晰、可維護、易於擴展的SPA應用。比如,如何有效地組織代碼結構?如何進行組件化設計?在性能優化方麵,除瞭常見的代碼分割、懶加載等技術,是否會探討更深層次的優化策略,比如服務端渲染(SSR)、預渲染(Prerendering)等?此外,在團隊協作和項目管理方麵,SPA的架構又會帶來哪些新的考慮?例如,如何保證代碼的一緻性?如何進行有效的版本管理?我希望這本書能夠提供一些啓發性的思考,幫助我們跳齣框架的束縛,從更全局的視野來理解SPA的本質,從而寫齣更優秀的代碼。
評分送貨速度快,産品質量好,值得購買
評分真的有點寫不下去瞭 哈哈哈
評分剛到還沒看,包裝的很好。
評分好的
評分希望有用希望有用希望有用
評分東西還不錯吧
評分這本書還可以。
評分還沒看。看瞭再說吧
評分書包裝不錯,好好學習,天天嚮上
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有