asp.net网站优化经验之谈

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

最近公司一个项目上线后,经常崩溃,于是开始重视性能问题,在网上看到了许多相关文章,整理下发了上来。以备参考。

在用asp.net开发网站的时候,性能是永远需要考虑和关注的问题,性能不仅仅只是程序代码执行时候的速度,而是涉及到方方面面的东西。

就拿ASP.NET的一个请求来讲,从浏览器向服务器的ASP.NET网站发送请求开始一直到最后整个页面呈现在我们面前,其中请求经过的每一个步骤,都是有不同的调优方式的,而且调用的方法也很多,不仅仅只是常见的:缓存,多线程,异步等。

本系列的文章决定从两个大的方面来讲述调优:

前台调优:主要包含如何尽量的减少http请求,从http请求开始,到如何加载js,CSS,如何压缩传输的数据等。

后台调优:分析ASP.NET请求的处理过程,并在每一步给出相应的调优方法,而且在代码组织,架构和数据库的操作上面给出调优的方法。

记得在刚刚开发网站的时候,一提到提高性能,最容易也是最快想到的就是缓存,而且在微软官方的BestPRactice的一些文档中也是建议:层层缓存(在数据存储层,DAL,BLL,UI等都要缓存)。然后在网站中就”缓存遍地开花”,最后的确实不尽人意。

另外的一个常见的优化针对数据库的:如尽量减少子查询,使用join联接;在常常需要查询的字段上面建立索引。确实,这些是很通用,也不错的一些规则。

而且还有一个体会就是,在优化性能的时候,如果选择优化代码和数据库,往往优化数据库的一些操作带来的效果会更加的好,很可惜的是:在项目中(至少在我开发的一些项目中),数据库仅仅就只是一个数据的存储设备而已,仅此而已,没有发挥出数据库的强大作用。所以还是建议对数据库的内部查询和存储的机制要熟悉,毕竟很多时候开发人员也担任了DBA的工作(很多公司没有正式的DBA)。

而且在项目中我们设计数据库的时候,特别是表字段的时候,是需要有些考虑的,很多人建议表字段的长度不要太长,这也是大家常见的建议,但是为什么?其实,这就需要懂得一些数据库的内部存储机制了:在数据库(SQL SERVER )保存的时候,数据是以”页”为最小的单位的,每一页有8K的大小,如果你的一个表中的数据超过8K,那么这个表的数据就要分几个页面保存,这样在对数据进行查询的时候,就要跨页查询了,跨页是需要性能消耗的,如果数据都在一个页面上,那么速度肯定快些。

所以,要优化网站,就得知道性能消耗在哪里。

当优化的一个网站的时候,不是盲目的一概而论的,一般来说有两种情况:

1、网站已经存在了,并且运行了,现在要优化。

2、正在从头开发一个新的网站。

如果是第一种情况,那么首先要找出网站性能的瓶颈,从前台的请求的到后台的请求处理,一直到最后页面的呈现,都要一步步的审查。

如果是第二种情况,可能情况就稍微好一点,并且网站现在完全由我们控制,所有在开发和设计的过程中就可以采用很多的优化原则来优化。

优化不一定就是代码重写或者做些很大的改动,优化时一点点的累积的,就好比代码的重构一样,都是一个积累的效果。比如,是在页面一开始的时候载入js脚本,还是在整个页面的最后载入js脚本,有时候往往就只是简单的调整一下载入的文件,或者异步的载入脚本,或者通过CDN传输脚本等等方法,性能就提升了。性能的提升也不是没有代价的,有的代价很小,例如只是把脚本的载入放在页面最后,大的代价就是,例如买些服务器设备,如Content Delivery Network(CDN)来把静态的文件(js,css,image)传送到客户端。所以说,优化需要权衡策略。

以下是一些javascript与c#交互的常见问题及解决方案

1.如何在Javascript访问C#函数?

2.如何在Javascript访问C#变量?

3.如何在C#中访问JavaScript的已有变量?

4.如何在C#中访问JavaScript函数?

问题1答案如下:

javaScript函数中执行C#代码中的函数:

方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;

2、在前台写一个js函数,内容为

document.getElementById("btn1").click();

3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;

方法二:1、函数声明为public

后台代码(把public改成PRotected也可以)

1 public string ss()

2 {

3 return("a");

4 }

2、在html里用可以调用

前台脚本

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

1 <script language=javascript>

2

3 var a = "<%=ss()%>";

4

5 alert(a);

6

7 </script>

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

方法三:1、

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

1 <script language="javascript">

2

3 <!--

4

5 function __doPostBack(eventTarget, eventArgument)

6

7 {

8

9 var theForm = document.Form1; //指runat=server的form

10

11 theForm.__EVENTTARGET.value = eventTarget;

12

13 theFrom.__EVENTARGUMENT.value = eventArgument;

14

15 theForm.submit();

16

17 }

18

19 -->

20

21 </script>

22

23 <input id="Button1" type="button" name="Button1" value="按钮" onclick="javascript:__doPostBack('Button1','')">

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

方法四:

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

1 <script language="javascript">

2

3 function SubmitKeyClick()

4

5 {

6

7 if (event.keyCode == 13)

8

9 {

10

11 event.cancelBubble = true;

12

13 event.returnValue = false;

14

15 document.all.FunName.value="你要调用的函数名";

16

17 document.form[0].submit();

18

19 }

20

21 }

22

23 </script>

24

25 <INPUT onkeypress="SubmitKeyClick()" id="aaa" type="text">

26

27 <input type="hidden" name="FunName"> 〈!--用来存储你要调用的函数 --〉

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

在.CS里有:

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

public Page_OnLoad()

{

if (!Page.IsPost())

{

string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";

//根据传回来的值决定调用哪个函数

switch(strFunName)

{

case "enter()":

enter() ; //调用该函数

break;

case "其他":

//调用其他函数

break;

default:

//调用默认函数 http://www.cnblogs.com/sosoft/

break;

}

}

}

public void enter()

{

//……比如计算某值

}

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

问题2.如何在JavaScript访问C#变量?

答案如下:

方法一:1、通过页面上隐藏域访问

<input id="xx" type="hidden" runat="server">

方法二:1、如后台定义了PUBLIC STRING N; 前台js中引用该变量的格式为''或"++"

方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本

"<script language='javascript'>var temp=" + tmp + "</script>"

tmp是后台变量,然后js中可以直接访问temp获得值。

问题3.如何在C#中访问JavaScript的已有变量?

答案如下:

方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;2、后台用request["id"]来获取值;

方法二:可以用cookie或session

问题4.如何在C#中访问JavaScript函数?

答案如下:

c#代码中执行javaScript函数:

方法一:1、

Page.RegisterStartupScript("ggg"," ");

方法二:使用Literal类,然后

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

1 private void Button2_Click(object sender, System.EventArgs e)

2 {

3 string str;

4 str=" ";

5 //Literal1.Visible=true;

6 Literal1.Text=str;

7 }

[flash=500,400]http://s1.knowsky.com/20160211/gfejvoqarjb17.gif[/flash]

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航