本书专门讲解如何利用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
JavaScript的快速演进带来了更新更快的JavaScript虚拟机以及各种框架,不仅使得它在服务器端的Web程序开发中日益普及,同时也推动
《头部主播养成计划:打造你的超级带货力》内容简介:如何定义电商和新零售?为什么直播卖货如此火爆?如何选择合适的直播带货平台
HCNP路由交换实验指南 修订版 本书特色 本书基于eNSP搭建企业网络真实场景,给出大量的配置实例,将真实场景与配置实例紧密结合,使读者能够快捷、直观、深刻地...
《漫步,遇见地道的台北生活》内容简介:本书是介绍轻松愉快的台湾徒步旅游书。作者带你逛仁爱路林荫大道、PEKOE杂货铺、东区茶街、
书中内容基于C++全书共分10章。第0章讲解了算法的概念及体例说明。第1~7章分别就计数问题、信息查找问题、组合优化问题、图中搜
《一图一例BIM钢筋算量》内容简介:本书共五章,第一章从BIM基础知识讲起,逐渐拓展到BIM在建筑行业领域的应用,使读者对BIM技术有
《刘邦为什么能赢项羽》内容简介:◆ 刘邦为什么能赢项羽?因为他既丢得起脸,又狠得下心! ◆ 听萧何的话,收获大将韩信;丢得起脸
《中国经济:警惕黑天鹅》内容简介:历史就是一系列的黑天鹅事件推动的。它的意外性、不可预见性,使得它的冲击力、影响力格外大。
Nowinitsfifthedition,thebestsellingbookonUMTShasbeenupdatedtocover3GPPWCDMAandHi...
《中国佛教信仰与生活史》内容简介:本书从制度史、社会史、文化史的视角,以忏法、素食、慈善、讲经、放生、菩萨信仰、名山信仰等
《思无邪》内容简介:钟鼓声响起,民间的乐音比黄钟大吕更轻盈灵动,更适合不受拘束的爱情、和着钟鼓声一起起舞的两个人,一如清空
《金融促进高质量发展之路》内容简介:随着我国经济不断发展,国家综合实力不断提升,加之受新冠肺炎疫情的影响,金融业发展在我国
数据伦理与算法伦理 本书特色 数据和算法是大数据的两大核心。正是通过这两大核心,大数据对人类社会产生了广泛而深刻的影响。同时,它引发的伦理问题与这两大核心亦密不...
本书是数字图像处理理论与实践相结合的成功之作,强调如何应用理论知识解决工业和科学研究中常见的实际问题。本书着重阐述了数字
《像经营企业一样经营自己》内容简介:时代洪流中,如何做到即便行业遇冷,淘汰谁也轮不到你?在个人品牌崛起的时代,你需要像经营
Weliveinaworld,accordingtoNKatherineHayles,wherenewlanguagesareconstantlyemergin...
《蔡襄墨迹》内容简介:蔡襄(一〇一二—一〇六七),字君谟,兴化仙游(今福建仙游)人。北宋名臣,书法家、文学家、茶学家。蔡襄
《Excel财务与会计从新手到高手》内容简介:本书详细介绍了财会工作中所需使用的Excel技术,以及将这些技术应用于实际案例的具体方
""HowtoThinkLikeaComputerScientist""isanintroductiontoprogrammingusingPython,one...
《人生真不如陶渊明那一杯酒》内容简介:陶渊明用他一生的行动,告诉我们如何找到通向宁静生活的道路;告诉我们热爱什么都不如热爱