编写高性能Web网站应用程序入门的10个技巧

news/2024/5/10 1:25:44/文章来源:https://blog.csdn.net/comlc/article/details/4093727

IT168 技术文档】

    用 ASP.NET 编写 Web 应用程序其轻松程度令人难以置信。它是如此的容易,以至于许多开发人员不用花费多少时间来构筑其应用便能获得非常好的性能。在本文中,我将给出10个编写高性能 Web 应用的技巧。我的评论不仅仅局限与 ASP.NET 应用,因为它们只是 Web 应用的一个子集。本文也不是 Web 应用性能调整的权威指南——这方面的内容可以写成一本书。相反,本文可以被视作一个好的起点。

  在废寝忘食地工作之前,我常常要去攀岩。在攀岩之前,我总是要看一下指南手册中的线路并阅读以前来此一游的人留下的建议和忠告。但是,不管指南手册有多磨好,在尝试一次特定的具有挑战性的攀爬之前,你都必须付诸实际的行动。同样,在你面临解决的性能问题或者营运一个高吞吐量的站点之前,你只能想方设法编写高性能 Web 应用程序。
  我们个人经验来自在微软 ASP.NET 团队从事底层架构程序经理,运行和管理
www.asp.net ,并协助架构 Community Server 过程中的经历,Community Server 是几个有名的 ASP.NET 应用程序的下一个版本(它将 ASP.NET Forums,.Text 和 nGallery 整合到一个平台)。我确信这些帮助过我的技巧也会对你有所裨益。
  你应该考虑将应用程序分离成几个逻辑层。你可能听说过术语3-层(或n-层)物理体系结构。它们通常是跨进程和/或硬件对功能进行物理划分的规定的体系结构模式。当系统需要伸缩时,更多的硬件能被添加。然而,总是应该避免与进程和机器忙碌程度相关的性能问题。所以,不管什么时候,只要可能,都要在相同的应用中一起运行 ASP.NET 页面及其相关的组件。
  由于代码和层之间的边界分离,使用 Web 服务或远程调用将降低20%以上的性能。
  数据层则稍微有些不同,因为数据库通常都用专门的硬件。但是,数据库的处理成本仍然很高,因此最优化代码时,数据层的性能应该是首当其充要关注的地方。
  在着手解决你的应用程序的性能问题之前,一定要剖析应用程序,确定问题之所在。获取关键的性能计数器值(如实现垃圾收集所花时间之百分比的性能计数器的值)对于查找应用程序在何处最耗时也是非常重要的。凭借直觉常常也能找到耗时所在。
  本文所描述的性能改进有两种类型:大型优化,如使用 ASP.NET Cache,以及不断重复进行的微型优化。这些微型优化有时很有意思。对代码的小小改动便会引起很大的动静,产生成千次的调用。对于大型优化,你可能会看到整体性能的大跳跃。而对微型优化,给定请求可能只是毫秒级的调整,但按每天的请求总数计算,其结果的改进可能是巨大的。

数据层的性能

  当调整某个应用程序的性能时,有一个简单的试金石,你可以用它按先后次序:检查代码是否存取数据库?如果是,多长时间存取一次?注意相同的测试也可以被应用于使用 Web 服务或远程调用的代码,但我们本文中不涉及这方面内容。
  如果在特定的代码流程中必须具有对数据库的请求以及要考察其它方面,如:想对字符串处理进行优先优化,那么暂且把它放一放,先按照上面定好的优先次序来做。除非你有异乎寻常的性能问题,否则你的时间应该用在尝试最优化与数据库的连接所花的时间,返回的数据量以及多长时间往返一次和数据库的通讯上。
  有了这些概括信息,下面就让我们来看看能帮助你改善应用程序性能的十个技巧。我将从能获得最显著效果的改变开始。

技巧 1 —— 返回多个结果集

  复审你的数据库代码,看看是否有多于一次的对数据库的访问请求。这样每次往返数据库都降低你的应用程序能处理的每秒请求数。通过在单个数据库请求中返回多结果集,你能降低与数据库通信的总体时间。同时你也将使系统更具伸缩性,因为你减少了数据库服务器处理请求的负担。
  虽然你可以用动态 SQL 返回多结果集,我更喜欢使用存储过过程。是否将业务逻辑驻留在存储过程当中是个有待争论的问题,但我认为,如果存储过程中的逻辑能约束返回的数据(降低数据集的尺寸,在网络上传输的时间以及逻辑层不必过虑数据),这是一件好事情。
  使用 SqlCommand 命令实例及其 ExecuteReader 方法来处理强类型的各个业务类,你通过调用 NextResult 可以向前移动结果集指针。Figure 1 示范了处理几个带类型的 ArrayLists 例子会话。从数据库只返回你需要的数据还会降低服务器上内存的分配。

技巧 2 —— 分页数据存取

  ASP.NET DataGrid 提供了非常好的能力:数据分页支持。当启用 DataGrid 中的分页功能,则每次只显示固定数量的记录。此外,分页用户界面也会显示在 DataGrid 底部用于导航记录。分页用户界面允许你向前向后导航所显示的记录,一次显示固定数量的记录。
  有一个美中不足的是用 DataGrid 分页需要将所有数据邦定到此栅格控件(gird)。例如,你的数据层必须返回所有数据,然后 DataGrid 将根据当前页过滤掉所有显示的记录。当你通过 DataGrid 进行分页时,如果有 100,000 条记录被返回,那么每个请求有 99,975 条记录将被废弃掉(假设页尺寸为 25)。当记录数不断增加,此应用程序的性能便会遭受痛苦,因为每次请求所要发送的数据会越来越多。
  编写较好的分页代码的一个好的方法是用存储过程。Figure 2 示范了一个用 Northwind 数据库中 Orders 表通过存储过程分页的例子。很简单,只要你在页面中传递索引以及页尺寸即可。相应的结果集先被计算然后被返回。
  在 Community Server 中,我们编写了几个分页控件来完成数据分页。你将会看到,我使用了技巧 1 中讨论的思路,从一个存储过程中返回连个结果集:总记录数和请求的数据。
  返回的总记录数依赖于所执行的查询不同而不同。例如,某个 WHERE 子句可被用于约束返回的数据。为了计算在分页用户界面显示的总页数,返回的总记录数必须是已知的。例如,如果有 1,000,000 条记录,用一个 WHERE 子句对之过滤后为 1,000 条记录,则分页逻辑必须要知道总记录数以便在分页用户界面中正确呈现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_859020.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15个优秀的Google提供给网站建立者的工具

转载自: 我想网 http://www.iwanna.cn/archives/2010/04/18/2773/ 发布者: seasun 一直以来,Google 为 Web 开发与设计者推出了大量的免费工具,让他们更好地创建,维护,改善他们的 Web 站点,这些工具包含…

关于手机网站开发的数据总结

目录 手机用户设备统计分析 手机浏览器兼容性测试结果概要 手机网站开发中你需要注意的问题 推荐参考资料 总结 手机用户设备统计分析 拥有全面的用户数据,无疑能帮助我们做出更符合用户需求的产品。内部数据能帮我们精确了解我们的目标用户群的特征;而…

操作指南丨利用IPFS相关技术/工具托管网站

这是一个快速教程,教你: 在IPFS上托管一个简单的静态网站 更改网站内容时,使用IPNS保留一个id(地址) 使用DNSLink将IPNS id替换为可读的地址 首先你需要安装、初始化(https://ipfser.org/2019/09/06/ipf…

IPFS周报-83期:Opera浏览器、ETH网站纷纷入驻IPFS!

协议实验室 编制 IPFS原力区 编译 星际文件系统(IPFS)是一种新的超媒体分发协议,通过内容和身份进行寻址。IPFS支持创建完全分布式应用程序,它的目的是使网络更快、更安全、更开放。 以下是本期IPFS周报的一些亮点: …

IPFS周报-85期:IPFS发行网站改成什么样了?

协议实验室 编制 IPFS原力区 编译 星际文件系统(IPFS)是一种新的超媒体分发协议,通过内容和身份进行寻址。IPFS支持创建完全分布式应用程序,它的目的是使网络更快、更安全、更开放。 以下是本期IPFS周报的一些亮点: …

Django框架实现可运营电商网站(一)-- 后台部分

文章目录 0 业务准备工作0.1 产品需求描述0.2 业务主体描述0.3 业务逻辑描述业务点 1、项目准备工作1.1、创建项目(可用pycharm,也可使用命令,这里用命令行来演示)1.2、pycharm操作1.3、配置子url、app静态文件夹、app网页文件夹1…

Django框架实现可运营电商网站(二)-- 前台部分

文章目录 1 前台模板修改1.1 模板制作1.2 静态链接1.3 在视图和路由中关联所有页面1.4 修改跳转链接1.5 运行项目1.6 收集静态文件 2 建模3 注册与登陆3.1 注册页面3.1.1 样式3.1.2 需要导入的所有包:3.1.3 密码加密函数:3.1.4 邮箱发送函数:…

mysql 5.6.12源码_最新LAMP源码搭建网站平台PHP5.5.1 + Apache2.4.6 + mysql5.6.12

记录一下,今天配置的这台网站服务器,大部分都是在官方找的最新版源码包。 1.下载安装所需要的最新软件源码包,包括最新的apache、mysql、php以及相关库文件的源码包。 2.检查安装时使用的编译工具是否存在。 3.卸载默认的低版本环境及rpm包环…

网站服务器如何导入数据库,网站服务器如何导入数据库

网站服务器如何导入数据库 内容精选 换一换 PostgreSQL支持逻辑备份。您可使用pg_dump逻辑备份功能,导出备份文件,再通过psql导入到RDS中,实现将PostgreSQL的数据导入到云数据库RDS中。云数据库RDS服务支持开启公网访问功能,通过弹…

阿里云服务器ubuntu18-04下使用wordpress搭建网站/ ‎编辑

** 阿里云服务器ubuntu18-04下使用wordpress搭建网站/ ‎编辑 ** 一. 服务器领取 高校学生可以免费领取,此处不做详述: 二. 配置wordpress 首先进入控制台: 然后远程登陆服务器(xshell、putty等)。 输入以下两条命令: &…

身为Android程序猿,必不可少的十大网站

 身为Android程序猿,必不可少的十大网站,让你更加高效的去开发。 第一,Google(http://www.google.com/)谷歌是Google公司开发的互联网搜索引擎。主要提供网页搜索,图片搜索&#…

手把手教你每个人都可以拥有的个人博客网站

题记 ------去过的地方越多,越知道自己想回到什么地方去! 雨又下了一夜,曾经多少次觉得下雨天是最适合睡觉的天气。而最近的雨,总感觉有些嘈杂,总怕吵醒远方睡梦中的星,晨。以至于翻来覆去睡不着。但是&…

手把手教你使用Hexo和github搭建免费个人博客网站

俗话说的好“吃水不忘挖井人”,当自己体验过Hexo搭建个人网站后,也来分享一下搭建过程遇到的乐趣以及遇到的坑! 准备工作(电脑配置工具) 在搭建Hexo博客之前,首先需要简单在你电脑安装一些工具以及依赖包…

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么…

【Python 爬虫 CASE】使用Selenium+BeautifulSoup获取新闻网站文章列表

一、需求 获取腾讯新闻网站(https://news.qq.com/)首页的新闻标题和列表 F12打开开发者工具,查看源代码 二、实现 Step1:获取网页源代码 如果使用requests库获取源代码 import requests res requests.get(http://news.qq.com/)但是这种方式获取的…

【Python 爬虫 CASE】使用Requests+BeautifulSoup获取新闻网站文章内容并整理成表

一、需求 获取新浪新闻网站(http://news.sina.com.cn/china/)首页的新闻内容 F12打开开发者工具,查看源代码 打开新闻链接,获取该新闻文章的“内容”、“标题”、“来源” F12打开开发者工具,查看源代码 二、实现 Step1:构建…

Magento开发教程 - 后台设置多个网站,商店和商店视图

1: 创建产品根目录 登录到Magento 2后台.点击 Products > Categories.点击 Add Root Category.在 Category Name 输入分类名称. 确保 Enable Category 设置 Yes. 如下图: 点击 Save. 2: 创建 websites(网站) 点击 Stores > 设置 >…

visual studio 2010教程-创建网站项目

1.打开visual studio 2010 选择新建 - 网站 2.进行对应的设置 3.创建完毕之后,在解决方案资源管理器中出现对应的项目 4.在项目名称上 右键 - 添加新项 5.选择web窗体,并命名新建的页面为index.aspx 6.创建完毕之后的工程 7.首页的源代码如下 8.接下来…

项目总结——Java web之实现当当网网站

Java web之实现当当网网站 运行环境:JDK1.8tomcat8.4MySQL5servlet技术 源码结构 CategoryDAO.java package com.tarena.dao;import java.sql.SQLException; import java.util.List;import com.tarena.entity.Category;public interface CategoryDAO {public Lis…