构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化

简介:
构建高性能ASP.NET 站点  第六章性能瓶颈诊断与初步调优(下前篇)简单的优化措施
    前言:本篇给出一些在部署ASP.NET 站点时采用的简单的优化措施。
    
    本篇议题如下:   
    识别和分析服务端的性能瓶颈 ( )
   内存 ( 前篇 )
   缓存 ( 前篇 )
    CPU(前篇)
   处理请求线程(前篇)
提高性能的一些简单改进措施(下)
          部署优化( 前篇)
          减少不必要回传( 前篇)
          减少不必要的请求( 后篇)
        
 
部署优化
我们都知道,不同的部署方式对站点的性能是有影响的,可能有些朋友已经知道了这点,不管怎样,我们这里还是详细系统的讲述一下这个问题,熟悉的朋友权当回顾 J
 
Release 方式编译项目
如果我们的项目是用Project 的方式建立的,也就是说:我们的站点包含在一个Solution 解决方案中,那么在发布之前,编译项目的时候,采用release 方式,这种方式会减少CPU 的使用率。因为采用debug 的方式发布,编译器会编译后的代码中加入很多的信息,如调试信息等。
 
操作步骤:
1.        VS 中,选择”  Build | Configuration Manager”. 如下:
 
 
2.        Active Solution Configuration下拉框现在”” Release”, 然后Close”. 那么Solution 就以Release 方式编译。( 其实使得Solution 编译为Release 的方法很多,例如在Solution 上面右击属性,然后去设置也是可以的)
 
现在虽然Solution Release 方式了,但是如果我们去查看这个Solution 下面的ASP.NET 站点程序的config 文件,发现还是deubg 方式的。那么我们在发布站点的时候,需要手动的去修改为release
 
:如果Solution 是以debug 方式编译,即使web.config 设置了release ,最后发布的站点的代码还是方式的。
站点发布
 
发布的步骤如下:
1.        修改web.config 配置如下:
 
 
 
2.        在站点上面右键选择Publish”. 如下:
 
 
    减少不必要的回传
    我们都知道,从服务端到客户端的回传每次都是需要花费一定的时间的,而且加长了用户等待的时间。所以有些回传则是可免则免。 
Server.Transfer Vs Response.Redirect
      如果我们需要在服务端把用户定向到另外的一个页面,那么考虑一下:尽量使用Server.Transfer ,而不是使用Response.Redirect
    因为当使用Response.Redirect 的时候,服务端会向客户端的浏览器发送一个响应:告诉浏览器去加载转向的那个页面。然后浏览器再次发送请求到服务端去请求另外的那个页面。
 
    当我们使用Server.Transfer 的时候,服务端就立刻执行跳转。这样做的一个不好的地方可能就是:此时请求的是A.aspx ,其实服务端已经跳转到了B.aspx 页面,但是浏览器上面的Url 还是显示的A.aspx
 
      当使用Server.Transfer 需要注意:确定每次访问A 页面都需要跳转到B 页面的时候,就是用Server.Transfer 。例如,拿博客园来举例,当用户在没有登录的时候想对正在阅读的一篇文章评论,那么此时,页面就会跳转到Login 的登陆页面,登陆之后,页面就跳转到之前看文章的那个页面,然后写评论。此时的这个跳转就不适合用Server.Transfer ,而采用Response.Redirect 。如果不管用户在哪里,只要用户登陆,那么总是跳到一个固定的页面,那么就可以使用Server.Transfer
 
      还有就是Server.Transfer 毕竟会消耗服务端的资源,使用的时候要注意。
      通过上面可以看出:调优本来就是一个折中的过程,不是绝对的。调优最后说到底就是时空转换时间换空间,空间换时间         
 
    声明站点的默认页面
     当我们请求一个站点的时候,如http://domain/folder IIS 会自动进行一些重定向到 http://domain/folder/ 。同时,http.sys 也不会把没有声明默认页面的站点的默认首页加入到内核的缓存中( 可能说的有点的绕) ,例如,如果在程序中,我们设置站点的默认页面时Default.aspx ,但是我们在部署到IIS 的时候,没有配置Default.aspx 就是站点的默认页面,那么这个页面的内容不会被http.sys 缓存到内核中。所以为了避免IIS 重定向和允许http.sys 缓存页面,我们在 IIS 中要配置站点的默认页面( 或者每次在浏览器中输入 http://domain/folder/default.aspx ,但是我们不能控制用户的行为,所以这招这几乎不可能)
 
     永久跳转相关话题
     如果我们站点的某个页面过期了或者不再用了,那么我们就可以采用301 永久跳转。当服务端向客户端发出301 响应的时候,浏览器和代理都会去更新他们的缓存( 如果之前的旧页面采用了缓存) ,而且搜索引擎也会采用新的页面。
      要让服务端向客户端发送301 响应,如下的方式:
1. 代码:
 
Response.StatusCode  =   301 ;
Response.AddHeader(
" Location " " NewPage.aspx " );
Response.End();

 
    ASP.NET 4.0  及以后的版本:
Response.RedirectPermanent( " NewPage.aspx " );

  
2. IIS 配置
a)         IIS 6 配置
1.        IIS 中站点中,选中你想跳转的文件或者目录。
2.        选中”A redirection to a URL”
3.        然后输入你想跳转到的页面。
4.        然后选中”The exact url entered above” ”A permanent redirect for this resource”
b)         IIS 7
Server 2008 上面
1.        打开开始”->” 管理工具”->” 服务器管理
 
2.        IIS 上面添加角色服务
 
3.        常见Http 功能下面选中”Http 重定向
4.        然后安装。
 
Win7  上面,如下:
 
然后,在我们的站点的web.config 配置如下:
 
代码
< configuration >
  
< location  path ="OldPage.aspx" >
    
< system.webServer >
       <httpRedirect enabled="true" destination="NewPage.aspx" httpResponseStatus="Permanent" />
    
</ system.webServer >
  
</ location >
</ configuration >
 
 
    今天就到这里,多谢各位!






















本文转自yanyangtian51CTO博客,原文链接:  http://blog.51cto.com/yanyangtian/494224 ,如需转载请自行联系原作者

相关文章
|
开发框架 JSON 缓存
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
此处我们基于 Debian11 的 Linux 发行版,实现目标是编写 Dockerfile 构建 asp.net core 6.x 框架的 runtime 基础镜像。在 Docker 容器化运行环境中,应用程序运行中存在异常情况,此时可以借助一些常用的基础工具方便排查,因此我们需要在 asp.net core 6.x runtime 基础镜像添加 linux 环境常用的...
289 1
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
|
.NET 开发框架
IIS&ASP.NET 站点IP跳转到域名
前言:先到微软的 https://www.iis.net/downloads/microsoft/url-rewrite  下载URL Rewrite 目标:输入ip跳转到域名所在的网站 比如58的115.
1670 0
|
NoSQL 应用服务中间件 Redis
Docker-Compose一键部署Ningx+Asp.net core站点+Redis
生产环境更新追求快速平稳,Docker-Compose 通过一个配置文件来管理多个Docker容器,在配置文件中services来定义,然后使用脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器的应用场景,实现环境的快速搭建。
5376 0
|
中间件 .NET 容器
4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
原文:4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁、等公交,积少成多,水滴石穿,谢谢关注。 管道实现机制 要了解管道的实现机制,我们必须要深入框架的源码,幸亏微软开源了,我们可以访问GitHub的地址来下载源码。
1168 0
|
中间件 .NET 容器
4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
要了解管道的实现机制,我们必须要深入框架的源码,幸亏微软开源了,我们可以访问GitHub的地址来下载源码。
1643 0
|
JSON 前端开发 .NET
如何构建ASP.NET MVC4&JQuery&AJax&JSon示例
背景:   博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax。 步骤: 1,添加控制器(HomeController)和动作方法(Index),并为Index动作方法添加视图(Index.cshtml),视图中HTML如下: 输入你的姓名: 输入你的年龄: 提交 清空   视图中包含两个文本框,分别用来输入名字和年龄,包含连个按钮,分别用来提交信息和清空文本框的内容,同时包含一个段落,用来显示Ajax返回的数据信息。
1050 0
|
中间件 .NET 开发框架
菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道
中间件:是汇集到以处理请求和响应的一个应用程序管道的软件。 每个组件: 可以选择是否要将请求传递到管道中的下一个组件。 之前和之后调用管道中的下一个组件,可以执行工作。 使用请求委托来生成请求管道。
1602 0
|
前端开发 .NET API
ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能。 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文件夹,填加后,选中API文件夹, 选择新建项,选择填加Web API控制器,要注意控制器在命名时,是以Controller结尾的,这个不能改,前面的随意,比如,此处以NoteController.cs为例 填加后,打开NoteController.cs,系统已经帮我们构建好了一些基础的功能,我们需要在其基础上进行一些个性化修改使其成为我们自己的代码。
1068 0
|
.NET Linux 程序员
从博客园博问站点迁移ASP.NET Core展望.NET Core
今年年初,博客园的博问系统就已经迁移到了 ASP.NET Core on Linux并发布上线发布。 我们看到博客园发表官方博客-- .NET跨平台之旅:博问站点迁移至ASP.NETCore on Linux并发布上线 访问地址:http://www.cnblogs.com/cmt/p/6437901.html   博客园在文章末尾说: 虽然在迁移过程中遇到了很多问题,但是我们的最大体会是:对 .NET Core 的了解越多,你就越喜欢它,这才是真正的魅力。
1190 0
|
.NET Windows 开发框架
ASP.NET 站点出错 NT AUTHORITY\NETWORK SERVICE) does not have write access to Temporary ASP.NET Files
出错信息如下: Server Error in '/' Application. The current identity (NT AUTHORITY\NETWORK SERVICE) does not have write access to 'C:\WINDOWS\Microsoft.
935 0