構建高性能可擴展ASP.NET網站設計

構建高性能可擴展ASP.NET網站設計

涉及的內容包括:加快顯示html 的方法、快取的最佳方式、如何使用iis、如何處理會話狀態、如何配置sql server 以及如何最佳化基礎設施等。

基本信息

原書名: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程式設計師

相關詞條

相關搜尋

熱門詞條

聯絡我們