构建高性能的ASP.NET应用(五)-如何开始寻找性能瓶颈

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

既然我们讲的是如何构建高性能的ASP.NET站点应用,那么我们就开始涉及网站方面的东西。我们说过,我们会把关注点放在“调优”上面。

在调优的时候,我们没有必要把事情搞的很复杂,要“由表及里。从整体到局部”。对于一个站点而言,我们最直接看到的就是网站的页面。换句话说,如果站点性能处理问题,肯定在页面上面会有反应。一个最显而易见的反应就是:页面加载很慢,半天看不到内容。

此时,我们可以进一步的分析,页面加载很慢,是什么原因导致的?

这里还是从最简单的方面入手。没有必要想的很复杂,我们要清楚:页面是由什么组成的?

很显而易见,一个页面,无非就是由Html文本,图片或者Flash,还有JS和CSS组成。换句话说,如果页面加载很慢,那么问题就出现在这些页面的这些组成部分上面。

页面解析过程

为了更好的说明,我们先来看看一个页面的加载的过程。 

1.      当用户在浏览器地址输入一个地址,然后enter。

2.      此时浏览器首先会去进行域名解析,要么读取本地的DNS缓存,或者去远程网络上面解析,最后的结果就是把域名对应的IP地址得到。

3.      得到了IP地址之后,浏览器就开始发送请求,建立TCP连接,经过三次握手之后,连接就建立了。

4.      TCP连接建立之后,浏览器就把请求发送过去。

5.      服务端接收到请求之后,就开始处理,例如,如果请求的是一个页面(不管是动态的还是静态的),最后的结果就是:服务端把响应发送发送给客户端。

6.      在响应中,先发送的是响应头,之后就开始传递html内容。

7.      Html内容经过网络传输到了客户端浏览器之后,浏览器就开始加载网页的内容,开始呈现。产生的页面的内容html文本是以流的形式传递的,通俗的说就是一点点的传输的,直到html文本传递完成,此时页面里面所有的资源还是没有加载的,只是页面的html骨架加载完成了。

所以浏览器这边收到html内容之后就开始解析html,而且是从上到下进行解析的:先解析html标记,然后解析head,然后解析body…

在解析的过程之后,如果遇到要去加载资源的标记,例如<script>,<img> 等,此时浏览器再次发送请求,获取资源。一步步的,最后一直把整个页面全部解析完成,资源加载完成,展示在用户眼前。

问题解析

理解了这个过程,我们再次回到之前的问题。我们可以知道页面中不同的组成部分,对应的问题是不一样的,大致可以分为下面几类:

如果Html的产生过慢,那么,用户势必会花很长时间才能看到页面。如图:

同理,如果页面(页面的html文本内容)的传输过慢,那么,最后整个页面的解析也会往后面推迟,最后也导致用户很长时间之后才能看到页面,如图:

另外,图片和flash等资源的加载有问题,那么一方面会让用户看到这些资源,另外也会增加服务器的负担。如图:

Js和css的加载是个特别要注意的问题,因为js的加载是很“霸道“的:如果此时,在解析页面的html的时候,看到了<script  scr="www.agilesharp.com/js/ag.js/> 此时,浏览器就会发送请求去获取这个脚本,而且此时浏览器不会继续解析后面的页面内容,而是等到这个js回来之后,才能继续往下走。这就是为什么很多时候我们总是把一些不必要的脚本放在页面的最后加载的原因。而对于css而言,它不霸道,在加载css的同时,浏览器可以继续往下面走,解析下面的页面内容。 

问题的分类

看完了上面简单的分析之后,我们可以再次思考,把上面的问题进行分类。因为上面的问题的产生,肯定有一个最后归根究底的原因的,我们可以通过上面的分析,把他们这些原因对应上,如图:

在我们后续的讲解中,更多的从上图中的内容进行讨论。

从这里就验证了我们之前讲述的很多的内容:分析问题要顺藤摸瓜,由表及里的分析.

 

更多:

构建高性能的ASP.NET应用(一)-先把思路搞对,然后对症下药

构建高性能的ASP.NET应用(二)-性能优化演绎法

构建高性能的ASP.NET应用(三)-从监控出发,让一切用数据说话

构建高性能的ASP.NET应用(四)-性能的优化的目标 

 






















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


相关文章
|
4月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
195 10
|
6天前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
51 23
|
2月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
2月前
|
消息中间件 Linux iOS开发
.NET 高性能异步套接字库,支持多协议、跨平台、高并发
【11月更文挑战第3天】本文介绍了高性能异步套接字库在网络编程中的重要性,特别是在处理大量并发连接的应用中。重点讨论了 .NET 中的 Socket.IO 和 SuperSocket 两个库,它们分别在多协议支持、跨平台特性和高并发处理方面表现出色。Socket.IO 基于 WebSocket 协议,支持多种通信协议和跨平台运行,适用于实时通信应用。SuperSocket 则通过事件驱动的异步编程模型,实现了高效的高并发处理,适用于需要自定义协议的场景。这些库各有特点,可根据具体需求选择合适的库。
|
2月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
147 2
|
4月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
194 6
|
4月前
|
前端开发 关系型数据库 MySQL
ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
133 2
|
5月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
86 0
|
5月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
93 0
|
5月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
59 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等