本书专门讲解如何利用ASP.NET和SQL Server开发出高性能、高扩展性的网站,并结合具体的问题给出切实有效的解决方案。除了给出构建高性能网站的技巧,本书还针对应用涉及的所有层面(包括客户端、缓存、IIS 7、ASP.NET、线程、会话状态、SQL Server、分析服务、基础架构和运维)提供了大量建议和代码示例。
通过学习本书,你将学会如何处理以下问题。
如何应用关键原则构建出高性能、高扩展性的网站。
如何使用高性能技巧实现多方面提速。不仅加快Web页面显示速度,还要加快更改、修复、部署速度。
如何找出性能瓶颈(比如会话状态)以及如何避免这些瓶颈。
如何将书中技巧应用到具体实践,包括浏览器、网络缓存、后端操作、硬件架构以及软件部署过程。
第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
《小狐狸勇闯《山海经》·四海八荒(平装)》内容简介:小狐狸是一个地图迷,无意在爷爷书房里发现一张“山海经”地图,他拿起放大
《法律硕士联考专业基础课经典案例分析》内容简介:本书是法律硕士联考案例分析题的专项训练,含基本案例和复杂案例两部分,各部分
《种文化》内容简介:本书从产业兴旺、生态宜居、乡风文明、治理有效、生活富裕等角度,遴选了上百幅来自全国各画乡的农民画新作,
《素手调水——茶艺茶道》内容简介:1.从茶品出发,逐渐展开了茶艺、茶道的描述。茶品中包含了茶树的生长环境和茶叶的分类以及加工
复杂网络上的博弈 本书特色谢逢洁编写的《复杂网络上的博弈》从博弈论和复杂网络的基本概念及基础理论出发,介绍相关研究领域,重点讲解博弈论和复杂网络的交叉领域的基本...
常用算法程序集-(C++语言描述)-(第四版) 作者简介 p>作者简介 徐±良,清华大学电子工程系教授。毕业于清华大学计算数学专业.留校任教...
本书论述了信息检索的有关概念与基本知识,以及Internt重要的中外文搜索引擎与检索技巧,介绍了网上各类型电子信息和重要专题信息
高级MPLS设计与实施 本书特色 通过对MPLS体系结构与操作的详细分析,加深对MPLS技术的理解;运用LSR设计并实现基于数据包的MPLS虚拟专用网;运用WA...
Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关
《从零开始学海报招贴设计》内容简介:本书介绍了海报招贴设计知识以及应用案例,主要内容包括海报招贴设计概述、海报招贴创意与原
《Web2.0高级编程》首先通过一个Web2.0应用演示了服务器和浏览器之间的交互过程,让读者对《Web2.0高级编程》中介绍的技术在Web2
《2020年法律硕士联考重要法条释解》内容简介:本书主要内容为法律硕士联考法条类图书,针对法条涵盖的考点,分析和讲解,包含5科,
《西方女装百年图鉴》内容简介:时尚从来就如同俄狄浦斯轮回一般。上世纪30年代的妖艳迷人到80年代的过度膨胀,从美好年代的紧身
《蔡襄墨迹》内容简介:蔡襄(一〇一二—一〇六七),字君谟,兴化仙游(今福建仙游)人。北宋名臣,书法家、文学家、茶学家。蔡襄
DESCRIPTIONTheresavirtualswitchboardattheheartofmostlargeapplications,wheremilli...
《拉通》内容简介:怎样加快项目或订单的获取和交付,实现高效增长?怎样提高部门之间、员工之间的协作效率或人效?怎样判断并从根
《价值投资者的财报分析》内容简介:本书以通俗易懂、图文并茂的方式,以海天味业为案例,系统地介绍了有效开展价值投资的财报分析
本书为21世纪高等学校规划教材。本书共有八章,主要介绍微机继电保护的基本构成原理和实现技术,包括数字信号滤波处理,微机保护
《志虑心物》内容简介:本书收录了季羡林先生关于人生、治学、生活等方面的文章,从中可以窥见国学大师的生活态度,耄耋老人的人生
《春天在心里歌唱》内容简介:本书精选了四十多篇世界上最具代表性的散文,所选篇目皆出自于名家,语言优美,意义深邃,堪称人类文