《Vue.js+Django高性能全棧論道》是清華大學出版社於2022年出版的書籍,作者是顧鮑爾。
基本介紹
- 中文名:Vue.js+Django高性能全棧論道
- 作者:顧鮑爾
- 出版社:清華大學出版社
- 出版時間:2022年12月1日
- 定價:138 元
- ISBN:9787302577386
內容簡介,圖書目錄,
內容簡介
本書並非簡單地介紹兩種語言和框架API相關的圖書,而是以Django與Vue.js為載體,詮釋前、後端技術生態中**的最佳化方案和思路。 本書主要內容包括網路編程與異步並發的基礎,軟體工程的設計模式在前端技術中的演進,從Vue.js的核心開發指南到Webpack編譯打包的最佳化經驗分享,Web/Service Workers與WebSocket為Vue.js實現多執行緒離線加速,揭秘Vue.js全方位異步惰性載入最佳化,Django、PyPy、WSGI和Gevent的全套異步方案實戰,Asyncio、gRPC、Channels與Django的分散式套用實戰,Python Agent技術分享。 本書內容豐富、案例眾多,適合想了解全棧技術的前、後端開發人員學習使用,也可作為相關培訓機構、開設相關專業課程院校的教材。
圖書目錄
第一篇 基礎篇
第1章 現代Web套用開發:全新的紀元 ···································································2
1.1 單頁套用概述 ·································2
1.1.1 從此不必刷新瀏覽器 ························2
1.1.2 前端需要深入業務 ···························3
1.1.3 SPA如何工作 ·································4
1.1.4 閒聊MVVM設計模式 ·····················11
1.1.5 與伺服器端通信 ·····························12
1.1.6 SPA的優點和缺點 ··························18
1.2 異步與協程 ··································20
1.2.1 程式、進程、執行緒與協程 ·················20
1.2.2 並發基礎 ······································23
1.2.3 I/O漫聊 ·······································25
1.2.4 反應式模式:epoll與Event Loop ·······26
1.3 HTTP那些事兒·····························27
1.3.1 HTTP 2的重要性 ···························27
1.3.2 大話協定 ······································28
1.3.3 HTTP 2的六板斧 ···························28
1.3.4 下一代的革命:HTTP 3 ···················30
第2章 ECMAScript與Python 3 ············································································31
2.1 JavaScript簡史······························31
2.2 初識ECMAScript 2015 ···················32
2.2.1 ECMAScript與JavaScript的不同 ·······32
2.2.2 ECMAScript 2015有哪些變化 ···········32
2.2.3 不可不知的DOM ···························39
2.2.4 BOM簡介 ····································40
2.3 新一代Python簡述 ························40
2.3.1 經驗之談:為什麼是Python ·············40
2.3.2 新版本的性能改進 ··························41
2.3.3 深究CPython 3.6的垃圾回收與建議 ···43
第3章 ECMAScript 2015 ····················································································47
3.1 搭建運行ECMAScript開發環境 ·······47
3.1.1 包管理工具NPM ···························47
3.1.2 安裝ECMAScript 2015開發環境 ········48
3.1.3 配置JavaScript編輯器 ·····················51
3.2 ECMAScript 2015必知···················54
3.2.1 let和const ····································54
3.2.2 for循環 ·······································55
3.2.3 箭頭函式 ······································57
3.2.4 默認參數 ······································57
3.2.5 參數的擴展—Spread操作符 ···········58
3.2.6 數據結構Map和原生對象················59
第二篇Vue篇
3.2.7 數據結構Set ·································61
3.2.8 疊代器工具 ···································61
3.2.9 詳解生成器 ···································63
3.2.10 面向對象編程 ······························65
3.2.11 面向對象編程進階 ························70
3.2.12 實戰:利用ES 2015開發仿“反恐精英
CS”遊戲 ····································74
第4章 Vue.js化繁為簡 ·························································································82
4.1 初見Vue.js ··································82
4.1.1 解決了什麼問題 ·····························82
4.1.2 Vue.js與jQuery的區別 ····················83
4.1.3 揭秘虛擬DOM ······························84
4.2 上手Vue.js ··································86
4.2.1 最簡化安裝 ···································86
4.2.2 分析由Vue.js構建網頁····················87
4.2.3 數據如何渲染 ································91
4.2.4 必須了解的生命周期·······················93
4.3 常用模板語法指令 ·························98
4.3.1 v-if/v-else/v-else-if指令 ····················98
4.3.2 v-show指令 ································100
4.3.3 v-for指令 ···································100
4.3.4 v-bind指令·································102
4.3.5 v-on指令 ···································103
4.4 一招學會事件處理器 ·····················104
4.5 不得不懂的計算屬性和偵聽器 ·········105
4.5.1 計算屬性 ····································105
4.5.2 偵聽器 ·······································106
4.6 常用的表單處理 ···························107
4.6.1 v-model指令 ·······························107
4.6.2 省力的修飾符 ······························110
第5章 Vue.js進階 ······························································································111
5.1 深入組件 ····································111
5.1.1 快速入門 ····································111
5.1.2 父組件與子組件間的數據通信 ·········113
5.1.3 不同組件間的數據通信··················117
5.2 掌握狀態管理Vuex ·······················118
5.2.1 初始化Vuex ································118
5.2.2 state、mutation、action ··················119
5.2.3 getter的使用 ·······························125
5.2.4 Vuex輔助函式·····························126
5.2.5 Vuex的經驗之談··························128
5.3 SPA必備:路由···························130
5.3.1 Vue 路由基礎······························130
5.3.2 常規路由匹配 ······························131
5.3.3 路由匹配 ····································135
5.3.4 編程式導航 ·································136
第6章前端工程化Webpack 4及部署 ····································································137
6.1 vue-cli打包編譯 ···························137
6.2 取代CLI,從“零”揭秘Webpack 4 ····138
6.3 基礎配置 ····································141
6.4 配置開發伺服器 ···························145
6.5 配置生產的編譯構建環境 ···············148
6.6 基於HTTP 2的Nginx部署 ·············153
第7章 加速Vue.js項目 ·······················································································155
7.1 打包最佳化與異步Vue.js ··················155
7.1.1 Webpack打包的工作機制 ···············155
7.1.2 惰性載入 ····································156
7.1.3 動態導入 ····································157
7.1.4 異步組件 ····································157
7.1.5 異步路由 ····································159
7.1.6 大型項目中異步Vuex解決方案 ·······159
7.1.7 打包最佳化中的反模式 ·····················165
7.2 圖片惰性載入的實現原理 ···············167
7.2.1 IntersectionObserver API介紹 ··········167
7.2.2 在Vue.js中如何實現 ·····················168
7.2.3 性能之談 ····································169
7.3 大文本惰性載入實戰 ·····················171
7.3.1 定製組件 ····································172
7.3.2 指令:v-lazyload-text ·····················173
7.3.3 與伺服器端對接 ···························173
7.4 最佳化資源優先權 ···························174
7.5 進擊的性能Web Workers ················176
7.5.1 Web Workers與執行緒 ······················176
7.5.2 在Vue.js中如何實現 ·····················176
7.5.3 Vue.js多執行緒實戰 ························178
7.5.4 Web Workers的限制 ······················183
7.6 離線優先Service Worker ················184
7.6.1 編寫Service Worker註冊腳本 ··········188
7.6.2 構建Service Worker ······················191
7.6.3 運行和調試 ·································193
7.6.4 Service Workers與Web Workers的
區別 ··········································194
7.7 新一代圖片格式WebP ···················194
7.7.1 WebP及其優缺點 ·························194
7.7.2 在Vue.js中如何實現 ·····················195
7.8 Web性能監測利器:Lighthouse ·······196
7.8.1 在開發者工具中運行 ·····················197
7.8.2 在命令行中運行 ···························197
7.8.3 在Chrome擴展程式中運行 ·············198
第三篇 Django篇
第8章 認識Django ····························································································200
8.1 解讀Django架構 ·························200
8.1.1 全新視角的松耦合設計 ··················200
8.1.2 Django“視圖”的正確理解 ············201
8.1.3 Django項目結構實踐 ····················202
8.1.4 創建自己的Django應用程式 ··········205
8.1.5 URLconfs—Django路由 ··············206
8.1.6 快速開發HTTP接口 ·····················207
8.2 正確入手:Django ORM ················209
8.2.1 從社交應用程式中掌握ORM ··········209
8.2.2 模型定義的最佳實踐 ····················213
8.2.3 QuerySets基礎 ····························215
8.2.4 教你手寫Active Record設計模式 ·····217
第9章 理解Django REST Framework ···································································219
9.1 為什麼使用DRF ··························219
9.2 核心速學手冊 ······························220
9.2.1 序列化 ·······································221
9.2.2 DRF的視圖與路由 ·······················222
9.2.3 ModelSerializer源碼揭秘與更多實例····224
9.2.4 認證與許可權 ·································231
9.2.5 DRF動態繪製表單的設計模式 ········235
9.3 實戰:用於SPA的無狀態RESTful服務
器端接口·····································239
9.3.1 介紹 ··········································239
9.3.2 JWT用戶認證 ·····························244
9.3.3 分頁 ··········································247
9.3.4 正確返回及錯誤輸出·····················249
9.3.5 單元測試 ····································250
9.3.6 性能檢測 ····································252
第10章 Django生產部署的藝術 ··········································································253
10.1 準備 ········································253
10.1.1 剪裁Django·······························253
10.1.2 生產/測試開發環境隔離 ··············255
10.1.3 日誌 ········································258
10.2 部署 ········································259
10.2.1 WSGI介紹 ································260
10.2.2 uWSGI基礎 ······························261
10.2.3 uWSGI加速與KSM技術記憶體
抗泄 ········································263
10.2.4 深入理解uWSGI啟動的機制 ·········266
10.2.5 結合Nginx與輕量化測試wrk ········268
10.3 換台“發動機”—PyPy 3 ···········270
10.3.1 Stackless的無堆疊與PyPy 3
新特性 ·····································271
10.3.2 PyPy 3 + uWSGI + Django 2生產實戰
心得 ········································274
第11章終極最佳化Django ···················································································280
11.1 WSGI與Django ·························280
11.1.1 WSGI記憶體管理與OOM現象 ········280
11.1.2 一種記憶體預熱的方式:重構WSGI···282
11.2 QuerySets最佳化與設計模式 ············286
11.2.1 QuerySets深度最佳化·····················287
11.2.2 解讀Django 2最新QuerySets
源碼 ········································291
11.2.3 設計“單例模型”減少資料庫
連線 ········································295
11.2.4 有限狀態機在Django模型中的
實踐 ········································297
11.3 Django REST Framework最佳化指南 ···303
11.3.1 適當簡化DRF ····························303
11.3.2 Varnish每秒進擊45K並發 ············305
11.3.3 DRF 3.10.3版本的高性能揭秘 ·······306
11.4 第二代Django Channels ················308
11.4.1 Asyncio基礎 ······························308
11.4.2 Asyncio高並發實踐 ·····················310
11.4.3 再談Asyncio與Gevent ················312
11.4.4 Asyncio與Django ·······················313
11.4.5 理解Django Channels ···················313
11.5 Django 3的異步驅動····················314
第四篇 綜合案例篇
第12章 打造企業級分散式套用服務 ·····································································318
12.1 功能與需求介紹 ·························318
12.2 系統架構設計及環境說明 ·············319
12.3 構建前端頁面 ····························320
12.3.1 用戶互動設計 ····························321
12.3.2 Vue.js開發環境搭建 ····················321
12.3.3 構建頁面布局 ····························323
12.3.4 創建Vue.js路由 ·························327
12.3.5 前端組件開發及通信 ···················328
12.3.6 表單驗證 ··································337
12.4 客戶端Agent技術 ······················339
12.4.1 守護進程與後台程式 ···················339
12.4.2 編寫Agent框架 ·························340
12.4.3 實現aiohttp異步Web服務 ···········344
12.4.4 開發HTTP接口 ·························345
12.4.5 Agent嵌入異步Web服務 ·············346
12.4.6 asyncio.gather的妙用 ···················348
12.5 gRPC服務 ································350
12.5.1 編寫ProtoBuf生成原型檔案 ··········350
12.5.2 伺服器端開發 ····························352
12.5.3 Agent的gRPC客戶端開發 ············353
12.5.4 Asyncio異步gRPC ······················355
12.6 Django套用伺服器 ······················357
12.6.1 搭建Django項目腳手架 ···············357
12.6.2 REST接口 ································358
12.6.3 前、後端接口互動 ······················359
12.7 Django Channels實戰 ···················361
12.7.1 架構機制 ··································361
12.7.2 安裝與Channels路由配置 ·············362
12.7.3 開發Consumer ···························364
12.7.4 gRPC與Django Channels的融合 ····365
12.7.5 Web套用編程接口:WebSocket API ···366
12.7.6 Channels部署方式及集群 ·············368
12.8 更多的討論 ·······························369
12.8.1 gRPC負載均衡與性能測試實踐 ·····369
12.8.2 服務註冊與發現 ·························371
12.8.3 Agent性能 ································372
12.8.4 Django與MongoDB ····················372
後記···················································································································373