构建高性能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 ,如需转载请自行联系原作者

相关文章
|
2月前
|
消息中间件 前端开发 小程序
一个基于.NET Core构建的简单、跨平台、模块化的商城系统
今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。
|
9月前
|
Go
Go 使用标准库 net/http 包构建服务器
Go 使用标准库 net/http 包构建服务器
32 0
|
9天前
|
Kubernetes Cloud Native Linux
如何使用 Containerfile/Dockerfile 构建 .net 镜像?
构建轻量级的 .NET Core 镜像通常涉及到几个关键步骤,主要是选择正确的基础镜像、使用多阶段构建、优化文件结构以及清理不必要的文件。.NET 8 在云原生方面的支持有了显著的增强,这些改进旨在提高性能、减少资源消耗、简化部署流程以及提升应用程序的可观察性和可维护性。
60 5
如何使用 Containerfile/Dockerfile 构建 .net 镜像?
|
2月前
|
开发框架 缓存 前端开发
利用Visual Basic构建高效的ASP.NET Web应用
【4月更文挑战第27天】本文探讨使用Visual Basic与ASP.NET创建高效Web应用的策略,包括了解两者基础、项目规划、MVC架构、数据访问与缓存、代码优化、异步编程、安全性、测试及部署维护。通过这些步骤,开发者能构建出快速、可靠且安全的Web应用,适应不断进步的技术环境。
|
21天前
|
开发框架 安全 .NET
使用VB.NET构建Web服务和REST API的指南
【7月更文挑战第2天】使用VB.NET构建Web服务和REST API的指南:从Web服务基础到ASP.NET Core实践,涵盖控制器、路由、模型绑定、安全措施(如JWT、HTTPS)及测试、部署(Azure、Docker)与监控工具。了解如何利用VB.NET在现代云环境中创建高效、安全的API。开始你的VB.NET Web服务开发之旅!**
20 1
|
2月前
|
中间件 Go API
Golang深入浅出之-Go语言标准库net/http:构建Web服务器
【4月更文挑战第25天】Go语言的`net/http`包是构建高性能Web服务器的核心,提供创建服务器和发起请求的功能。本文讨论了使用中的常见问题和解决方案,包括:使用第三方路由库改进路由设计、引入中间件处理通用逻辑、设置合适的超时和连接管理以防止资源泄露。通过基础服务器和中间件的代码示例,展示了如何有效运用`net/http`包。掌握这些最佳实践,有助于开发出高效、易维护的Web服务。
56 1
|
2月前
|
机器学习/深度学习 自然语言处理 安全
【专栏】.NET 开发:构建智能应用的关键
【4月更文挑战第29天】本文探讨了.NET开发在构建智能应用中的关键作用,强调了其强大的框架、工具集、高效性能和跨平台支持。通过实例展示了.NET在人工智能、物联网及企业级应用中的应用。同时,指出了.NET开发面临的挑战,如技术更新的学习成本、性能优化、资源管理和安全隐私保护,并提出了应对策略。随着技术进步,.NET将在智能应用领域发挥更大作用,推动创新与便利。
|
2月前
|
应用服务中间件 nginx
Angular打包构建项目服务器运行runtime.js、polyfills.js、vendor.js报错net::ERR_ABORTED 404 (Not Found),build修改为相对路径./
Angular打包构建项目服务器运行runtime.js、polyfills.js、vendor.js报错net::ERR_ABORTED 404 (Not Found),build修改为相对路径./
|
开发框架 JSON 缓存
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
此处我们基于 Debian11 的 Linux 发行版,实现目标是编写 Dockerfile 构建 asp.net core 6.x 框架的 runtime 基础镜像。在 Docker 容器化运行环境中,应用程序运行中存在异常情况,此时可以借助一些常用的基础工具方便排查,因此我们需要在 asp.net core 6.x runtime 基础镜像添加 linux 环境常用的...
296 1
基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像
|
Java 开发工具
『性能调优』在生产环境中,.Net如何定位系统内存泄露具体位置
📣读完这篇文章里你能收获到 - 生产环境排查内存问题的工具 - 排查命令的使用 - 排查经验分享
365 1
『性能调优』在生产环境中,.Net如何定位系统内存泄露具体位置