ASP.NET网站页面加载及运行效率等多方面实战优化

news/2024/5/14 3:02:13/文章来源:https://yangyisen.blog.csdn.net/article/details/48490355

网站加载内容较多,图片、Flash等文件较大、请求次数较多、页面不具有缓存性等等都会影响网站的页面加载速度和运行效率。之前做过很多网站,但是基本上都没有进行过优化,比如运用缓存等技术。最近有一个网站加载内容比较多,例如图片及Flash。运行过程中发现网页运行不是很流畅,所以下定决心将网站进行一次彻底优化调整!(这里介绍的是ASP.NET WebForm应用程序开发的网站,其他网站在这里不做介绍,但是有些地方优化方法基本相同,可做参考!)


优化ASP.NET网页的方法总结整理如下:

1.减少请求次数:合并图片、CSS、JS,改进首次访问等待时间;
2.使用长连接 (keep alive):服务器开启长连接后针对同一域名的多个页面元素将会复用同一下载连接(socket);
3.设置页面内容具有缓存性:CSS、JS、图片资源都应该明确的指定一个缓存时间,避免了接下来的页面访问中不必要的HTTP请求;
4.开启GZIP压缩:服务器是否返回了"Transfer-encoding: gzip"响应头;
5.把JS置于底部:把JS文件置于页面底部,防止js加载对之后资源造成阻塞;
6.精简CSS和JS文件:去除CSS和JS文件中不必要的字符,减少文件大小从而节省下载时间;
7.避免404错误:使用HTTP请求来获得一个404页面是完全没有必要的,它只会降低用户体验;
8.减小Cookie体积:保持coockie尽可能的小以减少用户的响应时间十分重要;
9.使用CDN(外链):使用CDN(Content Delivery Network,内容分发网络)或外链可以优化网站访问速度;
10.压缩页面图片及Flash等文件大小,尽量减少数量;
11.网站程序中采用DIV+CSS这种模式,不用Table:目前DIV+CSS是主流的编程语言,这与其体积小加载快的优点是密不可分的。主流的网站和CMS采用的也都是这种模式。因此建议大家也采用这种模式来编程,而不要采用原始的Table结构。Table结构不但管理不方便,网页体积也会变大,降低网站的加载速度。
12.减少JavaScript脚本文件,尽量存放在一个文件中: 尽量外部调用JS代码,不要放在网页中,更不要远程调用外部的JS代码。例 如Google建议您加载在HEAD标签的分析。您也可以尝试结合的JavaScript和压缩他们更快地加载。有些时候我们在头部的CSS,JS代码太 多,导致中间内容部分加载太慢。所以尽量减少头部的代码;
13.关闭不必要的页面Session和控件的ViewState <%@Page EnableSessionState =”false”%>;


一、首先,我们可以打开360“奇云测”进行网站测速、网站评分、PING检测和DNS检测。网址是:http://ce.cloud.360.cn/task。我们主要进行“网站测速”和“网站评分”,结果如下图:







二、缓存技术

其他的内容大家参考上方的优化方法13条逐个进行优化即可,当然还有很多优化的方法,这些只是最基本的。这里我主要介绍一下”缓存技术“

ASP.NET中的缓存主要分为:"页面缓存,数据源缓存,自定义数据缓存"三种类型。

缓存是一种用空间换取时间的技术,通俗点也就是说把你得到的数据存放在内存中一段时间,在这短时间内服务器不去读取数据库、或是真实的数据源,而是读取你存放在内存中的数据,这里你会疑惑怎么设置存放数据,能存放什么样子的数据,存放时间的设置,真实数据源数据改变服务器不就读取存在偏差?别急,下面慢慢会说到的。。
缓存的好处,缓存是网站性能优化不可缺少的一种数据处理机制,他能有效的缓解数据库压力,例如,网站每分钟的点击率为100万,如果不使用缓存的静态页面,这里也没有viewstate的情况下(viewstate会产生大量的字符串,对服务器交互数据是一种压力,所以一般页面是要禁用viewstate,采用缓存的),只能是用户点击一次该页面,这个页面就读取一次数据库,这样给数据库造成的压力可想而知,如果这里我们使用了缓存的话,设置缓存有效期为1分钟,则这一分钟只内,点击100万次跟点击一次是一样的,都是读取一次数据库,数据源是被缓存在内存中了。


1.数据缓存:

public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){//  Cache["date"]=要缓存的数据;   这里是自定义缓存的简单声明使用string datastr = DateTime.Now.ToLongTimeString();Response.Write("第一个输出时间:"+datastr+"</br>");  //这里读取的当前的时间,刷新页面时,这里的时间会随着变化。if (Cache["date"] == null) //判断是否存在value值为date的缓存是否存在{Cache["date"] = datastr;Response.Write("第二个输出时间为:"+Cache["date"] + "这里读取的当前的时间");   //这里读取的当前的时间,刷新页面时,这里的时间会随着变化。}else{Response.Write(Cache["date"] + "这里是从缓存中读取的时间");//这里读取的缓存中的时间,刷新页面时,这里的随着时间变化,不会变化。}}}

上面数据缓存由于没有设置缓存的过期时间,所以第一个输出时间为当前时间(刷新页面会变),第二个输出时间会一直为第一次存入缓存的时间(刷新页面不变)。
下面我们给数据缓存添加一些实用的参数,代码如下:

protected void Page_Load(object sender, EventArgs e){string ids="";Maticsoft.BLL.ScriptsBak bll = new Maticsoft.BLL.ScriptsBak();List<Maticsoft.Model.ScriptsBak> list = new List<Maticsoft.Model.ScriptsBak>();list = bll.GetAll();for (int i = 0; i < list.Count; i++){ids += list[i].ScriptId.ToString()+"--";}ids = ids + "完";  //这里的ids为从数据库中读取表中的id值然后用--链接起来的一个字符串if (Cache["key"] == null){Cache.Insert("key", ids, null, DateTime.Now.AddSeconds(40), System.Web.Caching.Cache.NoSlidingExpiration);  //这里给数据加缓存,设置缓存时间//"key"为缓存的键,ids为缓存起来的值,null为缓存依赖项,这里没有使用缓存依赖项,所以为null,下面会详细介绍缓存依赖项//null后面为缓存的时间为40秒//最后一个参数为设置时间的格式,ASP.NET允许你设置一个绝对过期时间或滑动过期时间,但不能同时使用,//我们这里设置的为绝对过期时间,也就是没刷新一次页面后缓存数据为40秒,40秒后会从数据库中重新获取。 Response.Write("cache加载为---" + Cache["key"] + "</br>");}else{Response.Write("cache加载为---" + Cache["key"] + "</br>");}Response.Write("直接加载为---" + ids + "</br>");}

数据缓存:将一些耗费时间的条目加入到一个对象缓存集合中,以键值的方式存储。我们可以通过使用Cache.Insert()方法来设置缓存的过期,优先级,依赖项等。



2.页面缓存:

 protected void Page_Load(object sender, EventArgs e){string date = DateTime.Now.ToString();Response.Write(date);}
复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>
<%@ OutputCache Duration="10" VaryByParam="none" %>  
<!---添加上这一句代码意思是,添加此页面缓存十秒,这十秒之内,刷新页面将读缓存起来页面的值,不再执行Page_Load方法。Page_Load方法是每十秒执行一次--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title>
</head>
<body><div></div>
</body>
</html>

<%@ OutputCache Duration="10" VaryByParam="none" %> 这条指令标签为该页面添加缓存,Duration这个参数指定页面缓存时间为10秒,VaryByParam这个指定页面参数,也就是这样子的,打个比方,例如这样一个页面http://www.cnblogs.com/knowledgesea/admin/EditPosts.aspx?postid=2536603&update=1,那么他的参数也就是postid和update,如果这样页面我们可以把指令标签写为<%@ OutputCache Duration="10" VaryByParam="postid;update" %> 参数与参数之间用分号隔开,这样子也就吧每个单独的页面缓存起来了,他缓存的就是postid=2536603&update=1或者postid=1&update=2等等不一样的参数页面全部缓存起来。这里可以使用一个简便的方法,就是<%@ OutputCache Duration="10" VaryByParam="*" %>,缓存起来所有当前的页面下参数不一样的页面。


ASP.NET不会再执行页面的生命周期和相关代码而是直接使用缓存的页面,简单点理解也就是我注释中介绍的。



3.控件缓存:

1).ObjectDataSource这样的数据源控件,可以在属性栏中找到相应的属性,进行设置,下面我列出个例子,设置启动缓存,缓存时间为10秒,时间类型为绝对时间。


<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnableCaching="True" CacheDuration="10" CacheExpirationPolicy="Absolute"></asp:ObjectDataSource>


2).没有缓存属性的控件要加缓存:

protected void Page_Load(object sender, EventArgs e)  {string date = DateTime.Now.ToString();TextBox1.Text = date;}
复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>
<%@ OutputCache Duration="10" VaryByControl="TextBox1"%>
<!--VaryByControl的参数为要缓存的控件id--><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title>
</head>
<body><form id="form1" runat="server"><div><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div></form>
</body>
</html>


4.缓存依赖:

protected void Page_Load(object sender, EventArgs e)  {string str = "";if (Cache["key"] == null){str = System.IO.File.ReadAllText(Server.MapPath("TextFile1.txt")); //读取TextFile1.txt文件中的数据CacheDependency dp = new CacheDependency(Server.MapPath("TextFile1.txt"));//建立缓存依赖项dpCache.Insert("key", str, dp);Response.Write(Cache["key"]);   //如果TextFile1.txt这个文件的内容不变就一直读取缓存中的数据,一旦TextFile1.txt文件中的数据改变里面重新读取TextFile1.txt文件中的数据}else{Response.Write(Cache["key"]);}}

缓存依赖项使缓存依赖于其他资源,当依赖项更改时,缓存条目项将自动从缓存中移除。缓存依赖项可以是应用程序的 Cache 中的文件、目录或与其他对象的键。如果文件或目录更改,缓存就会过期。


5.配置文件中设置缓存:

<system.web><caching><outputCacheSettings><outputCacheProfiles><addname="ProductItemCacheProfile" duration="60"/></outputCacheProfiles>
</outputCacheSettings></caching>
</system.web>
复制代码
复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="cache.WebForm1" %>
<%@ OutputCache CacheProfile="ProductItemCacheProfile" VaryByParam="none" %>
<!--这里的CacheProfile参数与配置文件中的保持一至-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title>
</head>
<body><div></div>
</body>
</html>

这样就给页面添加了缓存为60秒的页面。


6.缓存的回调函数:

protected void Page_Load(object sender, EventArgs e)  {string str = "";if (Cache["key"] == null){str = System.IO.File.ReadAllText(Server.MapPath("TextFile1.txt")); //读取TextFile1.txt文件中的数据CacheDependency dp = new CacheDependency(Server.MapPath("TextFile1.txt"));//建立缓存依赖项dpCache.Insert("key", str, dp, DateTime.Now.AddSeconds(20), Cache.NoSlidingExpiration, CacheItemPriority.Low, CacheItemRemovedCallback); //CacheItemPriority这个参数为缓存的优先级他分好多种级别,为了防止缓存占满时系统自己删除缓存的优先顺序废除缓存的,后面的为回调函数的名称。Response.Write(Cache["key"]);   //如果TextFile1.txt这个文件的内容不变就一直读取缓存中的数据,一旦TextFile1.txt文件中的数据改变里面重新读取TextFile1.txt文件中的数据}else{Response.Write(Cache["key"]);}}public void CacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason) //这个为缓存移除时的回调函数,一定要保持与 Cache.Insert()方法中的最后一个参数名字一致,//这里使用了委托,你可以在 Cache.Insert()这个函数中转定义看到的,所以这里的格式就只能按我写的这种方法签名写。{System.IO.File.WriteAllText(Server.MapPath("log.txt"),"缓存移除原因为:"+reason.ToString());}

例子中的回调函数写的是生成一个log.txt,文件记录每一次缓存移除的原因。


7.配置文件中的缓存设置:

我们服务器有开启缓存功能, 缓存功能可以减少您访问网站时候网站在服务器里面的编译时间, 大大加快您网站的访问速度, 如果您需要对您网站进行频繁更新的话, 您可以考虑暂时将缓存时间减少,或者暂时关闭缓存


请将下列代码放进web.config文件里面放在您网站的根目录;


1.在web.config里面设置缩小缓存的时间,请在web.config里面用下面的定义



<system.webServer>
<caching>
<profiles>
<remove extension=".aspx" />
<add extension=".aspx" policy="CacheForTimePeriod" 


kernelCachePolicy="DontCache" duration="00:00:01" varyByQueryString="*" />
</profiles>
</caching>
</system.webServer>


2. 如果要关闭某个页面的caching功能,请在web.config里面用下面的定义


<configuration>
<location path="showStockPrice.asp">
<system.webServer> 
<caching>
<profiles>
<remove extension=".asp" />
<add extension=".asp" policy="DontCache" kernelCachePolicy="DontCache"/>
</profiles>
</caching>
</system.webServer>
</location>
</configuration>


3. 如果要关闭整个程序的caching功能,请在web.config里面用下面的定义


<configuration>
<system.webServer> 
<caching>
<profiles>
<remove extension=".asp" />
<add extension=".asp" policy="DontCache" kernelCachePolicy="DontCache"/>
</profiles>
</caching>
</system.webServer>
</configuration>


4. 如果要关闭根目录某个或某几个文件夹的caching功能,请在web.config里面用下面的定义


<location path="~/folderA,~/folderB">
<system.webServer>
<caching>
<profiles>
<remove extension=".asp" />
<add extension=".asp" policy="DontCache" kernelCachePolicy="DontCache"/>
</profiles>
</caching>
</system.webServer>
</location>
</configuration>


通过种种优化,网站评分如下:



当然,这个评分只是通过模拟浏览器请求获得的评分,并不完全说明网站的优劣!仅供大家学习参考!以上部分文字截取自博客园。



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

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

相关文章

2015年个人收获-成果、经验分享(项目经理、集成资质、网站开发、服务器等)

2015年&#xff0c;对我来说是忙碌的一年&#xff0c;是幸运的一年&#xff0c;是收获的一年。 一、坚持写CSDN博客&#xff0c;将技术和遇到的问题分享给大家&#xff01; 坚持写博客其目的主要有两个&#xff0c;一是为了自己积累知识和锻炼&#xff0c;而是为了和大家分享…

浏览器模式调整-网站显示问题根本解决方案(Winform和CMD程序解决)

相信大家上一些网站经常遇到网站错乱和控件显示不全的问题&#xff0c;那是因为很多网站对浏览器的兼容性比较差&#xff0c;特别是一些网上银行&#xff08;中、农、工、商银行等&#xff09;、公共服务网站&#xff08;社保、公积金等政府网站&#xff09;等&#xff0c;虽然…

仿“唯品会”钓鱼网站分析

引言&#xff1a; 昨天晚上&#xff0c;一个朋友找我说自己被骗了&#xff0c;了解到原来是打开了钓鱼网站输入了自己信息和银行卡信息&#xff0c;虽然到最后一步发现了猫腻&#xff0c;但是信息已经泄露出去了&#xff0c;据说是唯品会的卖家给她发的信息&#xff0c;说之前买…

asp.net政府企业网站前台+后台源码

最近几年比较流行这样的政府网站&#xff0c;一般以红色和蓝色为主&#xff0c;这里先展示红色的&#xff0c;包括前台和后台源码&#xff0c;后台可以增删改查前台发布的文章&#xff0c;管理用户&#xff0c;管理幻灯片&#xff0c;设置信息和超级链接等等&#xff0c;一般的…

CDN加速会影响网站排名吗?

网络环境复杂多变&#xff0c;为了满足业务快速发展的需要&#xff0c;许多企业会使用蔚可云CDN给网站、app加速&#xff0c;加快网站访问速度&#xff0c;提升用户体验。由于CDN会将网站内容分发至各个边缘节点&#xff0c;还会隐藏源站IP&#xff0c;CDN加速会不会影响网站排…

使用ThinkPHP框架快速搭建网站

使用ThinkPHP框架快速搭建网站这一周一直忙于做实验室的网站&#xff0c;基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助&#xff0c;那就更好了挖。 以前用PHP做过一个很蹩脚的网站&#xff0c…

如何一个人打造日PV百万的网站架构——SDCC 2013讲师曹力专访

编者按&#xff1a;CSDN年度技术盛宴SDCC 2013中国软件开发者大会将于2013年8月30-31日在北京新云南皇冠假日酒店举行。软件研发频道将采访一些与会讲师&#xff0c;谈谈他们将在会上分享的内容&#xff08;报名参会&#xff09;。 本期我们采访的讲师是糗事百科前联合创始人、…

电商网站,性能优化

电商网站&#xff0c;性能优化 问题&#xff1a; 1)当大型网站系统>10万人 一个小时内&#xff0c;会跟数据库交互10万次&#xff08;国内有京东&#xff0c;淘宝&#xff09;&#xff0c;这就会出现数据库瓶颈&#xff0c;每个数据库最大连接数&#xff08;socket&#xf…

java下的大型网站对图片的下载,存放,及压缩管理

大型网站对图片的下载&#xff0c;存放&#xff0c;及压缩管理 构建保存图片的路径&#xff1a; 1 String pathdir "/images/product/" productTypeId "/" productId "/prototype";//构建文件保存的目录 为什么要有那么多个目录&#xff0c;因…

网站制作的切图技巧

一般的网站制作步骤大体上为&#xff1a;设计效果图–》切图制作静态html模板–》嵌套至CMS&#xff0c;其中&#xff0c;切图虽然是很简单的一个步骤&#xff0c;但其中也有很多技巧&#xff0c;以下是我个人总结出来的几点。 总体上&#xff0c;把握一个原则&#xff0c;能用…

计算机组成原理与jsp总分,基于JSP的计算机组成原理教学网站的设计与开发

随着互联网技术不断的发展和成熟,开展远程教学,开发整体教学系统成为计算机发展的一个全新课题。这种方式打破了时间、空间的限制,有效地实现了教学资源和教学方法的共享、教学过程的交互性、教学内容快速的更新、教学媒体的充分利用。介绍了该教学系统的设计意图及工作原理,论…

Centos6.0下安装mono 4.0和Jexus 5.6.4,并配置运行网站

很多朋友想要在Linux下部署asp.net的网站&#xff0c;但是又苦于不懂配置环境。今天&#xff0c;我在这里给大家讲解一下如何在Centos 7.0下安装最新版的mono 4.0.0 Jexus 5.6.4&#xff0c;并配置运行网站。 首先用ssh连接linux机器&#xff0c;登录root账号。在这里直接用我…

oracle10g 是rac,dbca建库-RAC安装完成 - Oracle10.2.0.4-RAC两节点集群环境搭建_数据库技术_Linux公社-Linux系统门户网站...

Oracle用户下,dbca启动界面&#xff0c;来创建数据库实例&#xff1a;选择节点&#xff1a;配置ORACLE_SID选择ASM存储(ASM磁盘之前已经创建)换成pfile这里提示没有监听&#xff0c;选Yes&#xff0c;会自动配置监听/oracle/product/10.2.0/crs_1/log/dbcc1/crsd/crsd.log日志信…

网站用户单点登录系统解决方案

1 背景 在网站建设的过程中&#xff0c;多个应用系统一般是在不同的时期开发完成的。各应用系统由于功能侧重、设计方法和开发技术有所不同&#xff0c;也就形成了各自独立的用户库和用户认证体系。随着网站的发展&#xff0c;会出现这样的用户群体&#xff1a;以其中的一个用户…

CTFHub-备份文件下载 - 网站源码

上面一些是网页源码文件后缀&#xff0c;下面的是文件名&#xff0c;用他它们排列组合&#xff0c;最终www.zip有文件下载 但三个文件里都没有flag&#xff0c;其中flag文件的文件名有点奇怪&#xff0c;输入到网页上

bugku-网站被黑

网站和网页源代码都没有东西&#xff0c;根据题目提示&#xff0c;应该要扫描一下目录 用AppScan没扫出来 再用御剑扫描试试 第一个是题目的页面&#xff0c;第二个就是后门页面 用字典没爆出来&#xff0c;查了wp是hack&#xff0c;说要用shell专用字典

【ASP.NET 问题】IIS发布网站后出现 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误的解决办法...

新装IIS&#xff0c;然后发布网站&#xff0c;运行出现如下错误提示 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 于是去网上找资料&#xff0c;轻松搞定。o(∩_∩)o 哈哈 原因: vs2010默认的是4.0框架&#xff0c;4.0的…

【ASP.NET 问题】IIS发布网站后出现“检测到在集成的托管管道模式下不适用的ASP.NET设置”的解决办法...

系统环境:win7 asp.net4.0网站挂到本地IIS上报错: google一下,发现N页解决方案,但是点进去一看前篇一律的解决方法是.将IIS7 下网站托管管道由继承模式修改为经典模式,这其实是治标不治本,iis7在经典模式下和iis6没有什么两样. 但是你修改以后也许真跑起来了,但是也有可能接着出…

【温故而知新-CSS】使用CSS设计网站导航栏

1.实现背景变换的导航菜单效果预览&#xff1a; 首页公司频道最新动态客房介绍酒店服务休闲娱乐旅行社源代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"…

【读书笔记《Bootstrap 实战》】4.企业网站

上一章有对个人作品站点进行一些优化。本章&#xff0c;轮到我们充实这个作品站点了&#xff0c;补充一些项目&#xff0c;从而展示我们的能力。换句话说&#xff0c;我们要构建一个相对复杂的企业网站主页。 下面有几个成功企业的网站&#xff1a; □ Zappos (http://www.zapp…