第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.2InProc模式 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.2Init()方法 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中注册该HttpModul 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
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
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
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