發表於2024-11-22
是否感覺自己發開的應用像建立在浮沙之上,是否需要創建一年以上不能重寫的應用程序?本書會給齣擴展性場景和真實示例,指導你構建經久不衰的應用程序,並從可尋址性、可測試性和組件組閤等角度嚮你展示如何處理可擴展性。大規模框架需要能夠“縮小”的能力、從齣錯組件恢復的能力,以及“擴大”並管理新功能或更多用戶的能力。在此之上,你可以用任何JavaScript工具集構建起可擴展的應用。
√識彆、評估影響應用程序可擴展性的外部影響因素。
√在大型JavaScript應用程序中構建組件。
√探索可擴展的組件間通信技術。
√定製、配置組件滿足擴展需求。
√在各種規模和復雜性的情況下,確保應用程序有*好的用戶體驗。
√創建在各種環境中都可移植、可測試的應用。
√通過刪除或重構組件來進行架構方麵的權衡。
√設計以可擴展方式失敗的組件。
本書將帶你設計和實現能從多個維度(如尋址能力、可配置性和性能)可伸縮的JavaScript的應用程序體係架構;瞭解常見的JavaScript縮放陷阱,並通過真實的解決方案和策略解決這些問題。內容包括:確定和評估應用程序的外部擴展影響力,創建構成大規模JavaScript應用程序的組件,對可擴展組件間的通信進行設計,設計一個不受限於環境的便攜的且可測試的應用程序,等等。
Adam Boduch在開發大型 JavaScript應用方麵有近 10年的工作經驗。在轉型為前端工程師之前,他曾使用 Python與 Linux參與瞭許多大型雲計算産品的構建。Adam擁有非常豐富的開發經驗,擅長處理復雜的場景,提高軟件的可擴展性。他編寫瞭很多 JavaScript方麵的書籍,其中包括 Lo-Dash Essentials,並且,他還熱衷於優化用戶體驗和性能。
Adam現居住於多倫多,是 Virtustream的一名高級軟件工程師。
關於審校者
August N. Marcello III是一位充滿激情的軟件工程師,在客戶端的 Web應用架構相關的設計、實現、部署方麵,有著近 20年的工作經驗。他專注於基於 SaaS創造良好的用戶體驗,並將其傳播到 Web生態係統,這無論從個人還是從專業角度來說都極具價值。對新興通用技術的熱愛以及對先進的 JavaScript平颱的專注,驅動著他在技術上精益求精。在工作之餘,他會參加越野跑、山地自行車騎行,或者陪伴傢人和朋友。他的個人網站為: www.augustmarcello.com。
Yogesh Singh畢業於印度 JSS技術教育學院。他是一位全棧 Web開發者,在服務端 Web開發棧方麵( ASP.NET以及 Node.js)很有經驗,而且熟練掌握 HTML、CSS以及 JavaScript。
Yogesh熱愛 JavaScript以及相關的庫和框架( Backbone、 AngularJS、jQuery和 Underscore)。
他開始從事的是數據挖掘和數據倉庫方麵的工作,在數據庫開發方麵十分專業。他是 MSSQL的微軟認證解決方案成員(MCSA)。
Yogesh自學能力很強,喜歡學習算法和數據結構,並在斯坦福大學 Coursera上獲得瞭算法課的結業證明。
他曾就職於 OLX India和 MAQ Software,目前為 Gainsight公司的全棧開發者。
業餘時間,他喜歡在 http://mylearning.in上寫博客。他的 LinkedIn簡曆地址為 https://www.linkedin.com/in/yogesh21。
Nikolay Sokolov是一名軟件工程師,他在雲計算、自動化部署和企業軟件開發方麵有著豐富的經驗。現在就職於 Tonomi(http://tonomi.com/),負責基於彈性組件模型分發雲應用的自動管理包。
可通過 https://twitter.com/chemikadze隨時聯係他。
Serkan Yersen是一名洛杉磯的軟件開發者。他是一些開源庫的作者,例如: ifvisible.js、underscore.py以及 kwargs.js。Serkan專門從事構建大型 JavaScript應用,以及為用戶廣泛的應用創建 UI。2006年至 2012年,就職於 http://www.jotform.com/期間,他開發瞭一個復雜的錶單生成器,供上百萬用戶使用。現在,他就職於 Home Depot和 Redbeacon(http://www.redbeacon.com/),負責 Web應用開發。你可以訪問他的個人網站:http://serkan.io/。
關於譯者
本書翻譯工作由月影領銜的奇舞團翻譯小組承擔,由王韋華、黃小璐、黃薇負責翻譯。王韋華網名 Aztack,前端技術專傢。曾就職百度、奇虎 360等國內知名互聯網公司。擁有豐富的 Web前端開發經驗,擅長 JavaScript、Ruby、Java、C++等語言。
個人博客:https://aztack.wang
黃小璐
畢業於華中科技大學計算機學院。現為奇虎 360軟件開發工程師。曾參與開源項目
[stcjs](https://github.com/stcjs/stc)(高性能前端工作流係統)。參與翻譯瞭《高性能 HTML5》等書。
黃薇
畢業於中山大學,於 2013年加入奇舞團,近期參與瞭 Nova.js(Web Component框架)、聲享(在綫製作 PPT)等項目,對大型 JavaScript 應用有濃厚的興趣和豐富的開發經驗。
以上三位譯者曾共同參與《移動 Web手冊》一書的翻譯工作。
1 擴展JavaScript 應用1
影響擴展的因素2
對可擴展的需要 2
不斷增長的用戶 3
添加新功能 3
雇傭更多的開發者 4
架構角度5
瀏覽器是一個獨特的環境5
組件設計 7
組件通信 7
加載時間 8
響應性 9
可尋址性 9
可配置性 10
架構性取捨11
確定不可變內容 11
從開發的便捷性考慮性能 11
性能的可配置性 12
從可替換性考慮性能 13
可尋址性的開發便捷性 13
性能的可維護性 13
減少功能以提高可維護性 14
利用框架 15
框架與類庫16
一緻地實現模式 16
內建的性能 16
利用社區智慧 16
框架並非天生支持擴展 17
小結17
2 可擴展性的影響因素 19
擴展用戶20
許可證費用 20
訂閱費用 21
消耗費用 21
廣告支持 21
開源 22
與用戶溝通 23
支持機製 24
反饋機製 25
提示用戶 26
用戶維度 26
擴展用戶示例 27
擴展功能28
應用價值 28
“殺手級”功能與“殺死”應用的功能 29
數據驅動的功能 30
與競品比較 30
修改已有的功能 31
支持用戶分組和角色 32
增加新服務 32
擴展功能示例 34
開發的可擴展性34
尋找開發資源 35
開發職責 36
資源過多 36
擴展開發示例 37
影響因素檢查錶37
用戶檢查清單 38
功能清單 39
開發者清單 41
小結41
3 組件組閤 43
通用組件44
模塊 44
路由器 46
模型/集閤50
控製器/視圖53
模闆 55
應用特定的組件 56
擴展通用組件56
識彆公用數據、功能 56
擴展路由器組件 57
擴展模型/集閤58
擴展控製器/視圖59
將功能映射到組件60
通用功能 61
特定功能 61
解構組件62
維護和調試組件 62
重構復雜組件 64
可插拔的業務邏輯64
擴展與配置 65
無狀態的業務邏輯 65
組織組件代碼66
小結67
4 組件的通信與職責 69
通信模型69
消息傳遞模型 70
事件模型 70
通信數據結構71
命名約定 71
數據格式 72
公共數據 73
可追蹤的組件通信74
訂閱事件 74
全局事件日誌 74
事件的生命周期 77
通信的開銷77
事件的頻率 78
迴調函數執行時間 80
事件復雜度 81
通信責任區82
後端API 82
Web Socket 用於更新狀態 83
DOM 更新 85
鬆耦閤的通信86
替換組件 86
應對意外事件 87
組件分層90
事件流嚮 90
開發者的職責 91
構建代碼思維導圖 91
小結92
5 尋址和導航 93
實現路由的方法93
Hash URI 94
傳統URI 94
路由是如何工作的95
路由的職責 95
路由事件 96
URI 的結構和模式96
編碼信息 97
設計URI 97
將資源映射到URI99
手動創建URI 99
自動生成資源URI 99
觸發路由103
用戶行為 103
重定嚮用戶 104
路由配置104
靜態路由聲明 105
注冊事件 105
禁用路由 105
故障排查108
路由器衝突 108
記錄初始配置 110
記錄路由事件 110
處理非法資源的狀態 110
小結111
6 用戶偏好和默認設置113
偏好類型113
地區 113
行為 114
外觀 115
支持地區115
決定支持哪些地區 115
維護地區 116
設置地區116
選擇地區 117
存儲地區偏好 117
URI 中的地區 118
通用組件配置118
選擇配置的值 119
存儲和硬編碼默認值 119
對後端的影響 120
加載配置值 121
配置行為122
啓用和禁用組件 122
改變數量 123
改變順序 124
配置通知 126
行內選項 126
改變外觀127
主題工具 127
選擇一個主題 128
單獨的樣式偏好 128
性能影響128
可配置地區的性能 129
可配置行為的性能 129
可配置主題的性能 132
小結132
7 加載時間和響應速度135
組件構件135
組件依賴 135
構建組件 136
加載組件137
加載模塊 137
懶惰的模塊加載 138
模塊加載的延遲 139
通信瓶頸141
減少間接引用 141
分析代碼 143
組件優化145
維護狀態的組件 145
處理副作用 146
DOM 渲染技術 148
API 數據150
加載延遲 150
處理大數據集 151
優化運行時組件152
小結153
8 可移植性和測試 155
與後端解耦155
模擬後端API 155
前端入口 156
模擬工具 157
生成模擬數據集 158
執行操作 159
功能設計過程159
設計API 160
實現模擬數據 160
實現功能 161
協調模擬數據與真實數據 162
單元測試工具163
框架自帶的工具 163
獨立的單元測試工具 164
工具鏈和自動化 165
測試模擬場景166
模擬API 和測試固件 166
場景生成工具 167
端到端測試和持續集成168
小結169
9 縮小規模171
擴展限製171
JavaScript 文件體積 172
網絡帶寬 173
內存消耗 175
CPU 消耗177
後端能力 179
互相矛盾的功能180
重疊的功能 181
冗餘的功能 182
用戶需求 182
設計失效183
多餘的組件 184
低效的數據處理 186
過度創建標記 190
應用組閤191
功能的啓動 191
新功能的影響 192
重要的庫 192
小結193
10 處理錯誤195
快速失效195
使用質量約束 196
提供有意義的反饋 196
當無法快速失效時…… 197
容錯198
區分關鍵行為 198
探測和控製錯誤行為 199
禁用齣錯組件 202
優雅地降級功能 203
故障恢復204
重試失敗操作 204
重啓組件 207
用戶手動乾涉 208
當我們無法從故障中恢復…… 209
性能和復雜度210
異常處理 210
狀態檢查 211
通知其他組件 211
記錄日誌和調試212
有意義的錯誤日誌 212
為潛在故障發齣警告 213
通知和指導用戶 214
改進架構214
記錄錯誤場景 215
改進組件分類 215
復雜導緻齣錯 216
小結216
能夠一直正常運行的應用隻是特例,大部分的JavaScript應用多多少少都有些問題。而這些問題産生的原因是由於我們總是習慣性地忽略可擴展性。這本書介紹瞭如何通過擴展前端架構來提高軟件質量。擴展JavaScript應用是一件有趣的事情,需要考慮很多因素:用戶、開發者、開發環境、瀏覽器環境等。我們的任務就是全麵考慮這些因素,從而提供最佳的用戶體驗。我們要擴展什麼?為何要擴展?本書將為大傢解答這些問題。
本書內容
第1章,擴展JavaScript應用,介紹瞭何為可擴展的JavaScript應用,以及擴展JavaScript應用與擴展其他應用的區彆。
第2章,可擴展性的影響因素,介紹瞭如何理解可擴展的需求,設計齣更好的架構。
第3章,組件復閤,介紹瞭構成架構核心的模式,以及如何以之為藍圖組閤組件。
第4章,組件的通信與職責,介紹瞭組件之間的通信是如何製約擴展的。組件的通信模式功能有決定性作用。
第5章,尋址和導航,詳細介紹瞭擁有指嚮不同資源的URI的大型Web應用,以及如何設計纔能應對不斷增長的URI數量。
第6章,用戶偏好和默認設置,介紹瞭設置用戶偏好的必要性,以及可配置的組件對擴展應用的重要性。
第7章,加載時間和響應速度,介紹瞭文件數量的增加是如何降低應用效率的。在添加新功能時,要有所捨棄,纔能保證UI的響應速度。
第8章,可移植性和測試,介紹瞭如何編寫不依賴於特定環境的JavaScript代碼,包括創建可移植的模擬數據和測試代碼。
第9章,縮小規模,介紹瞭移除無用或錯誤組件對擴展係統其他部分的重要性。
第10章,處理錯誤,介紹瞭優秀的JavaScript架構不會因為某個組件的錯誤而崩潰。許多時候,在設計時充分考慮對錯誤的處理是成功擴展的關鍵。
閱讀本書的條件
NodeJS
代碼編輯器/集成開發環境
一個現代Web瀏覽器
本書讀者
本書的目標讀者是對前端架構感興趣的高級JavaScript工程師。閱讀本書無須預備框架知識,但本書介紹的大部分概念都來自於框架,例如Backbone、Angular、Ember。閱讀本書需要紮實的JavaScript語言知識基礎,本書中所有的示例代碼都使用ECMAScript 6語法編寫。
約定
在閱讀本書時,你會發現許多代錶不同類型信息的不同文本樣式。這裏展示瞭一些例子及其含義詳解。
正文中的代碼、數據庫錶名、文件夾名、文件名、文件後綴、路徑、URI示例、用戶輸入,以及Twitter用戶名等均按以下格式展示:“以users/31729為例。路由器應該找到一個模式,能夠匹配該字符串,並能夠提取齣變量31729”。
代碼塊按以下格式展示:
// 渲染試圖的各個部分。
// 各部分可能有renderer,也可能沒有。
// 但不管有沒有renderer,內容都會被返迴。
警告和重要注解都會按此格式展示。
提示和技巧都會按此格式展示。
下載示例代碼
你可以從下載所有已購買的博文視點書籍的示例代碼文件。
勘誤錶
雖然我們已經盡力確保內容的準確性,但錯誤仍然可能存在。如發現任何錯誤,可登錄博文視點官網提交勘誤信息。一旦勘誤信息被本書作者或編輯確認,即可獲得博文視點奬勵積分,可用於兌換電子書。讀者可以隨時瀏覽圖書頁麵,查看已發布的勘誤信息。
大型JavaScript應用最佳實踐指南 下載 mobi pdf epub txt 電子書 格式 2024
大型JavaScript應用最佳實踐指南 下載 mobi epub pdf 電子書挺好的,書本質量滿意,最喜歡京東的物流
評分不錯哦,公司程序員選的
評分作者吹牛很厲害,裏麵東西很虛
評分真的很差 不知道這書有啥用 比我的教科書還差
評分買買買,看看看。看啊看
評分還沒看,希望是好書
評分活動價就買來看看
評分好.好.
評分學習學習
大型JavaScript應用最佳實踐指南 mobi epub pdf txt 電子書 格式下載 2024