基本信息
原書名:Ultra-Fast ASP NET: Build Ultra-Fast and Ultra-Scalable web sites using ASP NET and SQL Server
原出版社: Apress
作者:(美)Richard Kiessig
譯者:余昭輝
叢書名: 圖靈程式設計叢書
出版社:人民郵電出版社
ISBN:9787115248336
出版日期:2011 年3月
開本:16開
頁碼:369
版次:1-1
編輯推薦
讓ASP NET +SQL Server網站
飛迅速提升網站性能,全面挖掘網站潛力
微軟資深技術專家力作,亞馬遜全五星評價
內容簡介
《構建高性能可擴展asp net網站》針對asp net 網站開發中可能遇到的問題,給出了經過實踐檢驗的具體解決方法。
《構建高性能可擴展asp net網站》適用於所有web 開發和運維人員以及對最佳化網站感興趣的讀者
作譯者
Richard Kiessig 有30多年的軟體設計和開發經驗。他目前是一名獨立軟體顧問,專注於使用ASP NET和SQL Server設計和構建大型網站。他給MySpace、微軟等公司做過諮詢。此前他在微軟工作了四年,一開始做MSN的架構師並負責開 發工作,後來在微軟技術中心(MTC)工作。
目錄
《構建高性能可擴展asp net網站》
第1章 原則和方法 1
1 1 性能和可擴展性的差異 2
1 2 為什麼需要高性能和高可擴展性 2
1 2 1 最佳化 3
1 2 2 過程 3
1 2 3 體驗 4
1 3 完整的頁面處理過程 4
1 4 原則概述 6
1 4 1 性能原則 6
1 4 2 次要技術 7
1 5 本書使用的環境和工具 8
1 5 1 軟體工具和版本 8
1 5 2 術語 9
1 5 3 排版約定 9
1 5 4 作者網站 9
1 6 小結 10
第2章 客戶端性能 11
2 1 瀏覽器頁面處理 12
2 1 1 網路連線和初始http請求 12
2 1 2 頁面解析和新的資源請求 13
2 1 3 頁面資源的順序以及重新排序 14
2 2 瀏覽器快取 15
2 3 網路最佳化 16
2 4 腳本包含檔案的處理 18
2 4 1 通過在腳本之前排隊資源請求提高並行化 18
2 4 2 減少腳本檔案的數量 19
2 4 3 在頁面剩餘時間裡請求對象 21
2 4 4 腳本延遲 22
2 4 5 針對腳本的伺服器端方法 22
2 5 少下載 22
2 5 1 減少每個頁面中資源的數量 22
2 5 2 降低html、css和javascript的大小 24
2 5 3 最大化壓縮 25
2 5 4 圖片最佳化 25
2 5 5 網站圖示檔案 29
2 5 6 html、css和javascript的一般最佳化 29
2 6 使用javascript限定頁面請求 32
2 6 1 提交按鈕 33
2 6 2 連結 33
2 7 使用javascript降低html大小 34
2 7 1 生成重複的html 34
2 7 2 為標籤添加重複文本 35
2 8 減少上傳 36
2 9 css最佳化 38
2 10 圖片精靈和集群 41
2 11 利用dhtml 43
2 12 使用ajax 43
2 13 使用silverlight 45
2 13 1 創建html控制項 46
2 13 2 在javascript中調用silverlight內代碼 48
2 13 3 使用silverlight改進性能的其他方式 49
2 14 提高呈現速度 50
2 15 預快取 51
2 15 1 預快取圖片 51
2 15 2 預快取css和javascript 52
2 16 使用css實現無表格的布局 53
2 17 最佳化javascript的性能 56
2 18 小結 57
第3章 快取 59
3 1 在所有層中快取 59
3 2 瀏覽器快取 60
3 2 1 快取靜態內容 61
3 2 2 快取動態內容 63
3 3 viewstate 65
3 4 cookie 71
3 4 1 設定會話cookie 71
3 4 2 單個cookie中多個名稱/值對 72
3 4 3 cookie屬性 72
3 5 silverlight獨立存儲 80
3 5 1 示例程式:“歡迎回來” 80
3 5 2 部署並更新silverlight套用 84
3 6 代理快取 85
3 6 1 使用cache-control http頭 85
3 6 2 管理相同內容的不同版本 87
3 7 web伺服器快取 87
3 7 1 windows核心快取 87
3 7 2 iis 7輸出快取 92
3 7 3 asp net輸出快取 93
3 7 4 asp net對象快取 98
3 8 sql server快取 103
3 9 分散式快取 104
3 10 快取過期時間 105
3 10 1 動態內容 105
3 10 2 靜態內容 105
3 11 小結 106
第4章 iis 7 108
4 1 應用程式池和web園 108
4 2 請求處理管道 110
4 3 windows系統資源管理器 111
4 4 常見的http問題 113
4 4 1 http重定向 114
4 4 2 http頭 115
4 5 壓縮 118
4 5 1 啟用壓縮 118
4 5 2 設定壓縮選項 120
4 5 3 使用web config配置壓縮 121
4 5 4 快取壓縮的內容 121
4 5 5 使用編程方式啟用壓縮 122
4 6 http keep-alive 122
4 7 最佳化url 122
4 7 1 虛擬目錄 123
4 7 2 url重寫 123
4 8 管理流量 126
4 8 1 使用robots txt 126
4 8 2 網站地圖 127
4 8 3 頻寬節流 128
4 9 跟蹤失敗請求 130
4 10 iis性能調校提示 133
4 11 小結 134
第5章 asp net執行緒與會話 135
5 1 執行緒影響可擴展性 135
5 2 asp net頁面生命周期 136
5 3 應用程式執行緒池 137
5 3 1 同步頁面 138
5 3 2 異步頁面 138
5 3 3 負載測試 140
5 3 4 改進已有的同步頁面的可擴展性 142
5 3 5 從單個頁面上執行多個異步任務 143
5 3 6 逾時處理 144
5 3 7 異步web服務 145
5 3 8 異步檔案i/o 148
5 3 9 異步web請求 149
5 4 後台工作執行緒 151
5 4 1 使用後台執行緒記錄日誌 152
5 4 2 任務串列化 157
5 5 鎖定指南和使用readerwriterlock 157
5 6 會話狀態 158
5 6 1 會話id 159
5 6 2 inproc模式 159
5 6 3 使用stateserver 160
5 6 4 使用sql server 160
5 6 5 有選擇的啟用會話狀態,使用readonly模式 161
5 6 6 可擴展性會話狀態支持 162
5 6 7 調校 167
5 6 8 完全自定義會話狀態 167
5 6 9 會話序列化 168
5 7 會話狀態的其他方案 168
5 8 小結 169
第6章 使用asp net實現和管理最佳化技術 170
6 1 母版頁 170
6 2 用戶控制項 173
6 2 1 示例 173
6 2 2 註冊和使用控制項 175
6 2 3 將控制項放在dll中 175
6 3 主題 176
6 3 1 靜態檔案 176
6 3 2 皮膚 176
6 3 3 動態設定主題 176
6 3 4 可以放在主題里的屬性 177
6 3 5 示例 178
6 3 6 預快取主題圖片 179
6 4 特定於瀏覽器的代碼 179
6 4 1 使用request browser 181
6 4 2 特定於瀏覽器屬性前綴 182
6 4 3 快取特定於瀏覽器的頁面 183
6 4 4 控制項適配器 184
6 4 5 瀏覽器提供程式 185
6 4 6 偽裝 187
6 5 動態生成javascript和css 187
6 5 1 示例 188
6 5 2 從javascript里訪問asp net控制項 189
6 6 給靜態檔案設定多個域名 190
6 7 修改圖片大小 191
6 8 小結 193
第7章 管理asp net應用程式策略 194
7 1 自定義httpmodule 194
7 1 1 示例httpmodule的需求 195
7 1 2 init() 方法 195
7 1 3 prerequesthandlerexecute事件處理器 197
7 1 4 beginauthenticaterequest事件處理器 197
7 1 5 endauthenticaterequest事件處理器 199
7 1 6 endrequest事件處理器 200
7 1 7 資料庫表和存儲過程 201
7 1 8 在web config中註冊該httpmodule 202
7 2 自定義httphandler 202
7 2 1 開始請求 203
7 2 2 結束請求 204
7 3 頁面基類 205
7 4 頁面適配器 206
7 4 1 示例:pagestatepersister 206
7 4 2 pageadapter類 207
7 4 3 註冊pageadapter 208
7 5 url重寫 208
7 5 1 在httpmodule中重寫url 208
7 5 2 修改表單使用重寫的url 209
7 6 標籤轉換 210
7 7 深入理解控制項適配器 211
7 8 重定向 212
7 8 1 傳統的重定向 212
7 8 2 永久重定向 213
7 8 3 使用server transfer() 213
7 9 儘早刷新回響 214
7 9 1 標記 214
7 9 2 隱藏檔案 214
7 9 3 包跟蹤 215
7 9 4 塊編碼 216
7 9 5 小結 217
7 10 過濾空格 218
7 11 避免不必要工作的其他方法 220
7 11 1 檢查page ispostback 220
7 11 2 確定頁面是否刷新 220
7 11 3 避免在回發之後重定向 220
7 11 4 檢查response isclient- connected 221
7 11 5 關閉調試模式 221
7 11 6 批量編譯 222
7 12 小結 222
第8章 sql server關係資料庫 224
8 1 sql server如何管理記憶體 224
8 1 1 記憶體組織 225
8 1 2 讀和寫 225
8 1 3 性能影響 226
8 2 存儲過程 226
8 3 批量命令 228
8 3 1 使用sqldataadapter 228
8 3 2 構建參數化命令串 231
8 4 事務 233
8 5 多結果集 238
8 5 1 使用sqldatareader nextresult() 238
8 5 2 使用sqldataadapter和dataset 239
8 6 數據預快取 240
8 6 1 方法 240
8 6 2 預快取基於表單的數據 241
8 6 3 預快取每次一個頁面的數據 241
8 7 數據訪問層 242
8 8 查詢和結構最佳化 243
8 9 其他查詢最佳化指導原則 251
8 10 數據分頁 251
8 10 1 公用表表達式 251
8 10 2 數據分頁的詳細示例 252
8 11 對象關係模型 258
8 12 xml列 259
8 12 1 xml架構 260
8 12 2 創建示例表 261
8 12 3 基本xml查詢 262
8 12 4 修改xml數據 263
8 12 5 xml索引 263
8 12 6 其他xml查詢技巧 264
8 13 數據分區 264
8 13 1 分區函式 265
8 13 2 分區架構 265
8 13 3 生成測試數據 266
8 13 4 添加索引,配置鎖升級 268
8 13 5 存檔舊數據 269
8 13 6 小結 269
8 14 全文搜尋 269
8 14 1 創建全文目錄和索引 270
8 14 2 全文查詢 271
8 14 3 獲得搜尋分級的細節 271
8 14 4 全文搜尋語法小結 271
8 15 service broker 272
8 15 1 啟用和配置service broker 273
8 15 2 傳送訊息的存儲過程 274
8 15 3 使用存儲過程接收訊息 274
8 15 4 測試示例 275
8 15 5 避免中毒訊息 276
8 16 通過service broker傳送e-mail 276
8 16 1 創建後台工作執行緒 277
8 16 2 讀取並處理信息 278
8 16 3 排隊訊息和傳送郵件的web窗體 280
8 16 4 結果 282
8 17 數據變化通知 283
8 17 1 查詢約束 283
8 17 2 示例:簡單的配置系統 284
8 18 resource governor 287
8 18 1 配置 287
8 18 2 測試 290
8 19 橫向擴展與縱向擴展 290
8 19 1 縱向擴展 290
8 19 2 橫向擴展 291
8 19 3 確定系統瓶頸 292
8 20 高可用性 293
8 21 其他方面的性能提示 294
8 22 小結 295
第9章 sql server analysis services 297
9 1 分析服務概覽 297
9 2 mddb示例 299
9 2 1 rdbms結構 299
9 2 2 數據源視圖 300
9 2 3 cube 303
9 2 4 時間維度 303
9 2 5 items和users維度 305
9 2 6 計算的成員 306
9 2 7 部署和測試 307
9 3 示例mdx查詢 307
9 4 adomd net 313
9 4 1 單個單元格結果示例 313
9 4 2 使用gridview顯示多行結果 315
9 5 使用ssis更新cube 316
9 6 預先快取 319
9 6 1 數據存儲選項 319
9 6 2 快取模式 320
9 7 使用中間資料庫 323
9 8 小結 324
第10章 基礎和運維 325
10 1 插樁 325
10 2 容量規劃 329
10 3 磁碟子系統 330
10 3 1 隨機每秒鐘i/o次數與順序每秒鐘i/o次數 330
10 3 2 ntfs碎片 331
10 3 3 磁碟分區設計 333
10 3 4 raid選項 334
10 3 5 存儲陣列網路 336
10 3 6 控制器快取 337
10 3 7 固態磁碟 337
10 4 網路設計 338
10 4 1 巨型幀 338
10 4 2 連結集成 339
10 5 防火牆和路由器 340
10 5 1 windows防火牆和防病毒軟體 341
10 5 2 使用路由器作為硬體防火牆的替代方案 341
10 6 負載均衡器 341
10 7 dns 342
10 8 臨時環境 343
10 9 部署 343
10 9 1 數據層升級 344
10 9 2 提高部署速度 344
10 9 3 頁面編譯 345
10 9 4 預熱快取 345
10 10 伺服器監控 346
10 11 小結 347
第11章 綜合起來 348
11 1 從何處入手 348
11 2 開發過程 349
11 2 1 組織 350
11 2 2 項目階段和里程碑 350
11 2 3 編碼 351
11 2 4 測試 351
11 2 5 bug跟蹤 351
11 2 6 用戶反饋 352
11 2 7 高性能的技巧 352
11 3 league 354
11 4 工具 355
11 5 架構 356
11 6 備忘錄 357
11 6 1 原則和方法(第1章) 357
11 6 2 客戶端性能(第2章) 357
11 6 3 快取(第3章) 359
11 6 4 iis 7(第4章) 360
11 6 5 asp net執行緒和會話(第5章) 361
11 6 6 使用asp net實現並管理最佳化技術(第6章) 361
11 6 7 管理asp net套用策略(第7章) 362
11 6 8 sql server關係資料庫(第8章) 363
11 6 9 sql server分析服務(第9章) 364
11 6 10 基礎設施和運維(第10章) 364
11 7 小結 365
辭彙表 367
譯者序
長期以來,在 NET Web開發領域一直缺少一本用來講解性能最佳化的書籍,大多數 NET Web開發書籍都將大量筆墨傾注在控制項使用、控制項開發以及數據源操作上。當性能出現問題時,有的 NET Web開發人員要么束手無策,因為這些控制項對於他們來說就像一個黑盒;要么去求助其他平台的Web性能最佳化書籍,但這些書籍往往沒有針對 NET的特殊處理,最佳化效果也大打折扣。
現在, NET Web開發人員終於迎來了這么一本屬於我們自己的Web性能最佳化手冊。這本亞馬遜五星級圖書,本著壓榨每一個位元組的態度從Web前端最佳化、快取、伺服器到資料庫後端各個方面給 NET Web性能最佳化提供端到端的指導。書中包含許多真實的代碼,大部分都可以在自己的項目中直接使用,有些最佳化只需要花費少量的時間,就可以收到立竿見影的回報。
本書分為11章,第1章是原則和方法,給全書定下了一個基調:我們要壓榨Web開發中每個位元組。第2章討論客戶端性能,包括網路連線、CSS以及JavaScript等資源的最佳化。第3章是本書的重頭戲——快取,快取在Web性能中可謂是一哥,這章按照快取離用戶的遠近順序做了全面的介紹。做ASP NET肯定離不開IIS,第4章以IIS 7為例,對IIS調優進行了講解,原來IIS不是配一下網站就萬事大吉了。第5章介紹了執行緒與會話,對於構建可擴展的Web架構尤為重要。第6章從ASP NET特有的特性來講解其對最佳化的作用,比如母版頁,比如針對特定瀏覽器生成輸出等。第7章介紹了HttpHandler和HttpModule等方面的內容,對於習慣拖控制項構建Web頁面的開發人員,這一章會讓你看到ASP NET的另一個世界。第8章、第9章介紹了SQL Server的最佳化,從快取、索引等方面做了詳細的介紹,第8章也是本書篇幅最大的一章。第10章從運維的角度來討論最佳化。第11章是集成,將前10章所有的東西結合在一起使用。
本書的翻譯和編輯工作差不多貫穿了2010年整整一年,其中因為工作變動對交付進度造成很大的影響,在這裡要特別感謝圖靈公司的編輯的體諒和支持。感謝好友王雄對部分章節的審閱。
最後,要感謝我的女友照雲,非常感謝你這幾個月的陪伴,對我因趕進度對你的冷落毫無怨言,甚至還自告奮勇幫忙審稿。
前言
我在微軟的工作經歷給我的人生帶來了意想不到的巨大轉變。到微軟之前,我所在的公司都是微軟的競爭對手,時不時會聽到反微軟的言論和宣傳。但是,當我聽說 NET後,我就知道應該了解更多,而最好的方式就是到它的發源地去學習。
在進入微軟公司深入了解這些技術之後,我被眼前的一切震撼了。 NET Framework、C#語言、ASP NET以及SQL Server都非常先進,都有非常漂亮的技術架構。在使用Java(無疑也是非常優雅的語言)數年後,我可以使用一個集成良好的平台,將(幾乎)所有東西無縫地集成在一起工作,確實令人精神振奮,幹勁倍增。從技術層面上講,我很認同平台開發人員的決策和權衡,而且最終的系統也能相當大地提高開發人員的效率。微軟的工程團隊也人才濟濟,極具創新意識,而給我這個曾經圈外人帶來的最大驚奇是,他們打心眼兒里想要解決客戶的問題。
我對技術的熱衷讓我成了直面客戶的人——擔任位於矽谷的微軟技術中心的解決方案架構師。直面深層次的客戶問題是另一項令人大開眼界的經歷。首先,我可以在許多人或公司那裡體會到微軟技術產生的積極影響。其次,我還能感受到有些人面對很差勁的結果時的強烈挫敗感。這本書,在某種程度上就是為減少挫敗感而寫的。
我的觀點是ASP NET和SQL Server很有潛力。但是,這些技術的關鍵點還未被很多開發人員認識到。我曾經與許多想要挖掘這種潛力,但卻苦於不得其門的開發人員和經理交談過。可是,認識到該技術全部的潛力必須投入更多努力;其中的特性豐富多彩,但要完全領略其風采必須有正確的視角。本書的一個目的就是趕走遮住技術美景的層層迷霧,讓你親眼目睹ASP NET和SQL Server的美麗。
寫這本書的另一個原因是我常被一些很慢的網站所折磨,希望本書介紹的內容能幫你改變這個現狀。在Web的世界裡一切皆有可能,未來的Web一定會超過現在的水平——但良好的性能是實現它們的基礎。到那時誰也不會再遇到緩慢的網站。
我現在使用的是高於3 Mb/s的DSL連線到Internet,我的台式機4個CPU核心都工作在3GHz,與過去幾年相比是出奇得快。即使這樣的連網速度和處理能力,載入許多網站仍然要花很長時間,有時甚至載入一個頁面都要好幾分鐘,而此時我的本地網路和CPU幾乎是空閒的。作為軟體專業人員,我們應該關注這種問題,因為出現這種問題實在太丟人了。我不僅要自己做得更好,更想讓我的職業為人稱道。為此,我們開發的網站就不僅要快,還要超快!
讀者對象
本書的前兩章和最後兩章提供的信息幾乎對所有Web開發人員都有用,且與使用的底層技術無關。中間7章是為使用ASP NET和SQL Server設計、構建或維護網站的中高級的架構師和開發人員寫的。剛剛從Java或PHP轉到 NET的有經驗的Web開發人員也會從本書找到很多有價值的信息。
《構建高性能可擴展ASP NET網站》也非常適合那些不是開發人員,但對最佳化網站技術感興趣的讀者。尤其是對參與網站運維、測試或管理的相關人員,這本書給出了許多開發團隊應該重視的原則和問題,並提供了示例幫助理解。
聯繫作者
可以通過rick@12titans net聯繫到我,也歡迎訪問我的網站
我非常想聽到你關於高性能方法的經驗。
提高性能和可擴展性的技術會隨著底層技術的變遷不斷地發展。我非常想聽到你發現很有效,但本書卻沒有涉及的技術。
歡迎指出正文或代碼示例中的錯誤,也歡迎各種改進本書的建議。
致謝
我要感謝Apress優秀的團隊:Ewan Buckingham早期給了我大力支持和鼓勵;Matthew Moodie對全書的結構和流程提供了幫助;Simon Taylor負責了技術審校,還複查了代碼示例;Anita Castro負責項目管理,Kim Wimpsett和Tiffany Taylor幫我潤色了本書的文字。
我還要感謝Phil de Joux的反饋意見。
媒體評論
“作者寫作本書的目標之一就是揭開技術迷霧,欣賞ASP NET和SQL Server的天作之合,並挖掘它們的全部潛力,他真的做到了這一點。”
——亞馬遜讀者評論
“我用ASP NET很多年了,我知道如何使用AJAX構建健壯的Web,如何使用角色控制等,但就是不知道如何用ASP NET把網站變得速度更快。這本書彌補了我這方面知識的空白。”
——Frank Stepanski,ASP NET、AJAX程式設計師