仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 443|回复: 9
打印 上一主题 下一主题

[学习教程] ASP编程:编写高功能 Web 使用程序的10 个技能

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 23:41:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来;web|程序|技能|功能|技能|功能技能

RobHoward

本文会商

•罕见ASP.NET功能难点

•面向ASP.NET的有效功能提醒和技能

•在ASP.NET中利用数据库的倡议

•利用ASP.NET举行缓存和背景处置




本文利用了以下手艺:
ASP.NET、.NETFramework和IIS



本页内容
数据层功能
技能1―前往多个了局集
技能2―分页的数据会见
技能3―毗连池
技能4―ASP.NET缓存API
技能5―每哀求缓存
技能6―背景处置
技能7―页输入缓存和代办署理服务器
技能8―运转IIS6.0(只需用于内核缓存)
技能9―利用Gzip紧缩
技能10―服务器控件视图形态
小结

利用ASP.NET编写Web使用程序的复杂水平使人不敢信任。正由于云云复杂,以是良多开辟职员就不会花工夫来计划其使用程序的布局,以取得更好的功能了。在本文中,我将报告10个用于编写高功能Web使用程序的技能。可是我其实不会将这些倡议仅范围于ASP.NET使用程序,由于这些使用程序只是Web使用程序的一部分。本文不作为对Web使用程序举行功能调剂的威望性指南―一整本书生怕都没法轻松讲分明这个成绩。请将本文视作一个很好的出发点。

成为事情狂之前,我本来喜好攀岩。在举行任何年夜型攀岩举动之前,我城市起首细心检察指南中的线路,浏览之前旅客提出的倡议。可是,不管指南怎样好,您都必要真实的攀岩体验,然后才干实验一个出格具有应战性的攀爬。与之类似,当您面对修复功能成绩大概运转一个高吞吐量站点的成绩时,您只能进修怎样编写高功能Web使用程序。

我的团体体验来安闲Microsoft的ASP.NET部门作为基本架构程序司理的履历,在此时代我运转和办理www.ASP.NET,匡助计划社区服务器的布局,社区服务器是几个出名ASP.NET使用程序(组合到一个平台的ASP.NETForums、.Text和nGallery)。我确信有些已经匡助过我的技能对您一定也会有所匡助。

您应当思索将使用程序分为几个逻辑层。您大概传闻过3层(大概n层)物理系统布局一词。这些一般都是划定好的系统布局体例,将功效在历程和/或硬件之间举行了物理分别。当体系必要扩展时,能够很轻松地增加更多的硬件。可是会呈现一个与历程和呆板腾跃相干的功能下落,因而应当制止。以是,假如大概的话,请只管在统一个使用程序中一同运转ASP.NET页及其相干组件。

由于代码分别和层之间的界限,以是利用Web服务或远程处置将会使得功能下落20%乃至更多。

数据层有点不同凡响,由于一般情形下,最好具有公用于数据库的硬件。但是历程腾跃到数据库的本钱仍然很高,因而数据层的功能是您在优化代码时起首要思索的成绩。

在深切使用程序的功能修复成绩之前,请起首确保对使用程序举行分析,以便找出详细的成绩地点。次要功能计数器(如暗示实行渣滓接纳所需工夫百分比的计数器)关于找出使用程序在哪些地位消费了其次要工夫也十分有效。但是消费工夫的地位一般十分不直不雅。

本文报告了两品种型的功能改良:年夜型优化(如利用ASP.NET缓存),和举行本身反复的小型优化。这些小型优化偶然出格成心思。您对代码举行一点小小的变动,就会取得良多良多工夫。利用年夜型优化,您大概会看到全体功能的较年夜奔腾。而利用小型优化时,关于某个特定哀求大概只会节俭几毫秒的工夫,可是天天一切哀求加起来,则大概会发生伟大的改良。

数据层功能


谈到使用程序的功能调剂,有一个试纸性的测试可用来对事情举行优先级分别:代码是不是会见数据库?假如是,频次是如何的?请注重,这一不异测试也可使用于利用Web服务或远程处置的代码,可是本文对这些内容未做报告。

假如某个特定的代码路径中必须举行数据库哀求,而且您以为要起首优化其他范畴(如字符串操纵),则请中断,然后实行这个试纸性测试。假如您的功能成绩不长短常严峻的话,最好花一些工夫来优化一下与数据库、前往的数据量、收支数据库的往复频次相干的消费工夫。

懂得这些惯例信息以后,我们来看一下大概会有助于进步使用程序功能的十个技能。起首,我要报告大概会引发最年夜变动的变动。

前往页首
技能1―前往多个了局集


细心检察您的数据库代码,看是不是存在屡次进进数据库的哀求路径。每一个如许的往复城市下降使用程序能够供应的每秒哀求数目。经由过程在一个数据库哀求中前往多个了局集,能够节俭与数据库举行通讯所需的总工夫长度。同时由于削减了数据库服务器办理哀求的事情,还会使得体系伸缩性更强。

固然可使用静态SQL前往多个了局集,可是我首选利用存储历程。关于营业逻辑是不是应当驻留于存储历程的成绩还存在一些争议,可是我以为,假如存储过程当中的逻辑能够束缚前往数据的话(减少数据集的巨细、延长收集上所消费工夫,不用选择逻辑层的数据),则应同意如许做。

利用SqlCommand实例及其ExecuteReader办法添补强范例的营业类时,能够经由过程挪用NextResult将了局集指针向前挪动。显现了利用范例类添补几个ArrayList的示例会话。只从数据库前往您必要的数据将进一步削减服务器上的内存分派。

前往页首
技能2―分页的数据会见


ASP.NETDataGrid具有一个很好的功效:数据分页撑持。在DataGrid中启用分页时,一次会显现流动数目的纪录。别的,在DataGrid的底部还会显现分页UI,以便在纪录之间举行导航。该分页UI使您可以在所显现的数据之间向前和向后导航,而且一次显现流动数目的纪录。

另有一个小小的妨害。利用DataGrid的分页必要一切数据均与网格举行绑定。比方,您的数据层必要前往一切数据,那末DataGrid就会基于以后页选择显现的一切纪录。假如经由过程DataGrid举行分页时前往了100,000个纪录,那末针对每一个哀求会保持99,975个纪录(假定每页巨细为25个纪录)。当纪录的数目不休增添时,使用程序的功能就会遭到影响,由于针对每一个哀求必需发送愈来愈多的数据。

要编写功能更好的分页代码,一个极佳的体例是利用存储历程。显现了针对Northwind数据库中的Orders表举行分页的一个示例存储历程。简而言之,您此时要做的只是传送页索引和页巨细。然后就管帐算符合的了局集,并将其前往。

在社区服务器中,我们编写了一个分页服务器控件,以完成一切的数据分页。您将会看到,我利用的就是技能1中会商的理念,从一个存储历程前往两个了局集:纪录的总数和哀求的数据。

前往纪录的总数大概会依据所实行查询的分歧而有所变更。比方,WHERE子句可用来束缚前往的数据。为了盘算在分页UI中显现的总页数,必需懂得要前往纪录的总数。比方,假如统共有1,000,000笔记录,而且要利用一个WHERE子句将其选择为1000笔记录,那末分页逻辑就必要懂得纪录的总数才干准确出现分页UI。

前往页首
技能3―毗连池


在Web使用程序和SQLServer™之间设置TCP毗连多是一个十分损耗资本的操纵。Microsoft的开辟职员到今朝为止可以利用毗连池已有一段工夫了,这使得他们可以重用数据库毗连。他们不是针对每一个哀求都设置一个新的TCP毗连,而是只在毗连池中没有任何毗连时才设置新毗连。当毗连封闭时,它会前往毗连池,在个中它会坚持与数据库的毗连,而不是完整损坏该TCP毗连。

固然,您必要当心是不是会呈现泄露毗连。当您完成利用毗连时,请必定要封闭这些毗连。再反复一遍:不管任何人对Microsoft?.NETFramework中的渣滓接纳有甚么批评,请必定要在完成利用毗连时针对该毗连显式挪用Close或Dispose。不要信任大众言语运转库(CLR)会在事后断定的工夫为您扫除和封闭毗连。只管CLR终极会损坏该类,并强迫毗连封闭,可是当针对工具的渣滓接纳真正产生时,其实不能包管。

要以最优化的体例利用毗连池,必要恪守一些划定规矩。起首翻开毗连,实行操纵,然后封闭该毗连。假如您必需云云的话,能够针对每一个哀求屡次翻开和封闭毗连(最好使用技能1),可是不要一向将毗连坚持翻开形态并利用各类分歧的办法对其举行收支传送。第二,利用不异的毗连字符串(假如利用集成身份考证的话,还要利用不异的线程标识)。假如不利用不异的毗连字符串,比方依据登录的用户自界说毗连字符串,那末您将没法失掉毗连池供应的统一个优化值。假如您利用集成身份考证,同时还要摹拟大批用户,毗连池的效力也会年夜年夜下落。实验跟踪与毗连池相干的任何功能成绩时,.NETCLR数据功能计数器大概十分有效。

每当使用程序毗连资本时,如在另外一个历程中运转的数据库,您都应当重点思索毗连该资本所花工夫、发送或检索数据所花工夫,和往复的数目,从而举行优化。优化使用程序中任何品种的历程腾跃都是取得更佳功能的主要一点。

使用层包括了毗连数据层、将数据转换为成心义类实例和营业流程的逻辑。比方社区服务器,您要在个中添补Forums或Threads汇合,使用营业划定规矩(如权限);最主要的是要在个中实行缓存逻辑。

前往页首
技能4―ASP.NET缓存API


编写使用程序代码行之前,一个主要完成的操纵是计划使用层的布局,以便最年夜化使用ASP.NET缓存功效。

假如您的组件要在ASP.NET使用程序中运转,则只需在该使用程序项目中包含一个System.We</p>由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。
飘飘悠悠 该用户已被删除
沙发
 楼主| 发表于 2015-1-20 09:45:08 | 只看该作者
作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。
简单生活 该用户已被删除
板凳
发表于 2015-1-25 11:29:39 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
山那边是海 该用户已被删除
地板
发表于 2015-1-31 22:58:48 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
admin 该用户已被删除
5#
发表于 2015-2-1 10:01:58 来自手机 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
柔情似水 该用户已被删除
6#
发表于 2015-2-7 02:36:13 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-19 21:17:21 | 只看该作者
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
只想知道 该用户已被删除
8#
发表于 2015-3-6 15:36:39 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
蒙在股里 该用户已被删除
9#
发表于 2015-3-13 03:32:47 | 只看该作者
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
变相怪杰 该用户已被删除
10#
发表于 2015-3-20 11:28:02 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-4 02:39

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表