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

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

既然我们讲的是如何构建高性能的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,如需转载请自行联系原作者


相关文章
|
1月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
61 10
|
22天前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
58 6
|
2月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
72 3
|
2月前
|
缓存 Java API
【揭秘】.NET高手不愿透露的秘密:如何让应用瞬间提速?
【8月更文挑战第28天】本文通过对比的方式,介绍了针对 .NET 应用性能瓶颈的优化方法。以一个存在响应延迟和并发处理不足的 Web API 项目为例,从性能分析入手,探讨了使用结构体减少内存分配、异步编程提高吞吐量、EF Core 惰性加载减少数据库访问以及垃圾回收机制优化等多个方面,帮助开发者全面提升 .NET 应用的性能和稳定性。通过具体示例,展示了如何在不同场景下选择最佳实践,以实现更高效的应用体验。
34 3
|
2月前
|
前端开发 JavaScript 开发工具
跨域联姻:React.NET——.NET应用与React的完美融合,解锁前后端高效协作新姿势。
【8月更文挑战第28天】探索React.NET,这是将热门前端框架React与强大的.NET后端无缝集成的创新方案。React以其组件化和虚拟DOM技术著称,能构建高性能、可维护的用户界面;.NET则擅长企业级应用开发。React.NET作为桥梁,使.NET应用轻松采用React构建前端,并优化开发流程与性能。通过直接托管React组件,.NET应用简化了部署流程,同时支持服务器端渲染(SSR),提升首屏加载速度与SEO优化。
31 1
|
2月前
|
存储 缓存 安全
.NET 在金融行业的应用:高并发交易系统的构建与优化之路
【8月更文挑战第28天】在金融行业,交易系统需具备高并发处理、低延迟及高稳定性和安全性。利用.NET构建此类系统时,可采用异步编程提升并发能力,优化数据库访问以降低延迟,使用缓存减少数据库访问频率,借助分布式事务确保数据一致性,并加强安全性措施。通过综合优化,满足金融行业的严苛要求。
39 1
|
2月前
|
数据库 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 应用中集成这两种技术,提高开发效率。
41 0
|
2月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
54 0
|
2月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
32 0
|
2月前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
63 0