麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

asp.net網(wǎng)站優(yōu)化經(jīng)驗之談

2019-11-14 14:31:30
字體:
供稿:網(wǎng)友

最近公司一個項目上線后,經(jīng)常崩潰,于是開始重視性能問題,在網(wǎng)上看到了許多相關(guān)文章,整理下發(fā)了上來。以備參考。

 

在用asp.net開發(fā)網(wǎng)站的時候,性能是永遠需要考慮和關(guān)注的問題,性能不僅僅只是程序代碼執(zhí)行時候的速度,而是涉及到方方面面的東西。 

就拿ASP.NET的一個請求來講,從瀏覽器向服務(wù)器的ASP.NET網(wǎng)站發(fā)送請求開始一直到最后整個頁面呈現(xiàn)在我們面前,其中請求經(jīng)過的每一個步驟,都是有不同的調(diào)優(yōu)方式的,而且調(diào)用的方法也很多,不僅僅只是常見的:緩存,多線程,異步等。 

本系列的文章決定從兩個大的方面來講述調(diào)優(yōu): 

前臺調(diào)優(yōu):主要包含如何盡量的減少http請求,從http請求開始,到如何加載js, CSS,如何壓縮傳輸?shù)臄?shù)據(jù)等。 

后臺調(diào)優(yōu):分析ASP.NET請求的處理過程,并在每一步給出相應(yīng)的調(diào)優(yōu)方法,而且在代碼組織,架構(gòu)和數(shù)據(jù)庫的操作上面給出調(diào)優(yōu)的方法。 

記得在剛剛開發(fā)網(wǎng)站的時候,一提到提高性能,最容易也是最快想到的就是緩存,而且在微軟官方的Best PRactice的一些文檔中也是建議:層層緩存(在數(shù)據(jù)存儲層,DAL,BLL,UI等都要緩存)。然后在網(wǎng)站中就”緩存遍地開花”,最后的確實不盡人意。 

另外的一個常見的優(yōu)化針對數(shù)據(jù)庫的:如盡量減少子查詢,使用join聯(lián)接;在常常需要查詢的字段上面建立索引。確實,這些是很通用,也不錯的一些規(guī)則。 

而且還有一個體會就是,在優(yōu)化性能的時候,如果選擇優(yōu)化代碼和數(shù)據(jù)庫,往往優(yōu)化數(shù)據(jù)庫的一些操作帶來的效果會更加的好,很可惜的是:在項目中(至少在我開發(fā)的一些項目中),數(shù)據(jù)庫僅僅就只是一個數(shù)據(jù)的存儲設(shè)備而已,僅此而已,沒有發(fā)揮出數(shù)據(jù)庫的強大作用。所以還是建議對數(shù)據(jù)庫的內(nèi)部查詢和存儲的機制要熟悉,畢竟很多時候開發(fā)人員也擔(dān)任了DBA的工作(很多公司沒有正式的DBA)。 

而且在項目中我們設(shè)計數(shù)據(jù)庫的時候,特別是表字段的時候,是需要有些考慮的,很多人建議表字段的長度不要太長,這也是大家常見的建議,但是為什么?其實,這就需要懂得一些數(shù)據(jù)庫的內(nèi)部存儲機制了:在數(shù)據(jù)庫(SQL SERVER )保存的時候,數(shù)據(jù)是以”頁”為最小的單位的,每一頁有8K的大小,如果你的一個表中的數(shù)據(jù)超過8K,那么這個表的數(shù)據(jù)就要分幾個頁面保存,這樣在對數(shù)據(jù)進行查詢的時候,就要跨頁查詢了,跨頁是需要性能消耗的,如果數(shù)據(jù)都在一個頁面上,那么速度肯定快些。 

所以,要優(yōu)化網(wǎng)站,就得知道性能消耗在哪里。 

當(dāng)優(yōu)化的一個網(wǎng)站的時候,不是盲目的一概而論的,一般來說有兩種情況: 

1、網(wǎng)站已經(jīng)存在了,并且運行了,現(xiàn)在要優(yōu)化。 

2、正在從頭開發(fā)一個新的網(wǎng)站。 

如果是第一種情況,那么首先要找出網(wǎng)站性能的瓶頸,從前臺的請求的到后臺的請求處理,一直到最后頁面的呈現(xiàn),都要一步步的審查。 

如果是第二種情況,可能情況就稍微好一點,并且網(wǎng)站現(xiàn)在完全由我們控制,所有在開發(fā)和設(shè)計的過程中就可以采用很多的優(yōu)化原則來優(yōu)化。 

優(yōu)化不一定就是代碼重寫或者做些很大的改動,優(yōu)化時一點點的累積的,就好比代碼的重構(gòu)一樣,都是一個積累的效果。比如,是在頁面一開始的時候載入js腳本,還是在整個頁面的最后載入js腳本,有時候往往就只是簡單的調(diào)整一下載入的文件,或者異步的載入腳本,或者通過CDN傳輸腳本等等方法,性能就提升了。性能的提升也不是沒有代價的,有的代價很小,例如只是把腳本的載入放在頁面最后,大的代價就是,例如買些服務(wù)器設(shè)備,如Content Delivery Network(CDN)來把靜態(tài)的文件(js,css,image)傳送到客戶端。所以說,優(yōu)化需要權(quán)衡策略。 

以下是一些javascript與c#交互的常見問題及解決方案

1.如何在Javascript訪問C#函數(shù)?

  2.如何在Javascript訪問C#變量?

  3.如何在C#中訪問JavaScript的已有變量?

  4.如何在C#中訪問JavaScript函數(shù)?

  問題1答案如下:

  javaScript函數(shù)中執(zhí)行C#代碼中的函數(shù):

  方法一:1、首先建立一個按鈕,在后臺將調(diào)用或處理的內(nèi)容寫入button_click中;

  2、在前臺寫一個js函數(shù),內(nèi)容為

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

 3、在前臺或后臺調(diào)用js函數(shù),激發(fā)click事件,等于訪問后臺c#函數(shù);

  方法二:1、函數(shù)聲明為public

  后臺代碼(把public改成PRotected也可以)

1 public string ss() 2   { 3     return("a"); 4   }

2、在html里用可以調(diào)用

  前臺腳本

復(fù)制代碼
1 <script language=javascript> 2 3   var a = "<%=ss()%>"; 4 5   alert(a); 6 7 </script>
復(fù)制代碼

 方法三:1、

復(fù)制代碼
 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','')">
復(fù)制代碼

  方法四:

復(fù)制代碼
 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="你要調(diào)用的函數(shù)名"; 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"> 〈!--用來存儲你要調(diào)用的函數(shù) --〉
復(fù)制代碼

在.CS里有:

復(fù)制代碼
public Page_OnLoad()   {     if (!Page.IsPost())     {       string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";       //根據(jù)傳回來的值決定調(diào)用哪個函數(shù)       switch(strFunName)       {         case "enter()":         enter() ; //調(diào)用該函數(shù)         break;         case "其他":         //調(diào)用其他函數(shù)         break;         default:         //調(diào)用默認函數(shù) http://www.companysz.com/sosoft/        break;       }     }   }   public void enter()   {     //……比如計算某值   }
復(fù)制代碼

問題2.如何在JavaScript訪問C#變量?

  答案如下:

  方法一:1、通過頁面上隱藏域訪問

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

方法二:1、如后臺定義了PUBLIC STRING N; 前臺js中引用該變量的格式為''或"++"

  方法三:1、或者你可以在服務(wù)器端變量賦值后在頁面注冊一段腳本

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

  tmp是后臺變量,然后js中可以直接訪問temp獲得值。

  問題3.如何在C#中訪問JavaScript的已有變量?

  答案如下:

  方法一:1、前臺使用靜態(tài)文本控件隱藏域,將js變量值寫入其中;2、后臺用request["id"]來獲取值;

  方法二:可以用cookie或session

  問題4.如何在C#中訪問JavaScript函數(shù)?

  答案如下:

  c#代碼中執(zhí)行javaScript函數(shù):

  方法一:1、

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

方法二:使用Literal類,然后

復(fù)制代碼
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   } 
復(fù)制代碼

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品一区二区免费在线观看 | 欧美精品电影一区二区 | 免费a视频在线观看 | 草莓视频久久 | 失禁高潮抽搐喷水h | 国产精品午夜在线观看 | 深夜视频在线观看 | 欧美18一19sex性护士农村 | 国产精品久久久久久久av三级 | 成人免费福利网站 | 爱高潮www亚洲精品 欧美黄色一级片视频 | 黑人一级片视频 | 精品国产99久久久久久宅男i | 欧美亚州| 日韩黄色片免费看 | 久久亚洲精品久久国产一区二区 | 夜间福利视频 | 精品久久一区二区 | omofun 动漫在线观看 | 九九午夜视频 | 日韩av有码在线 | wwwxxx国产 | 福利四区 | 一级电影在线观看 | 国产91丝袜在线播放 | 免费一级毛片电影 | 男女做性免费网站 | 成人午夜视频在线观看 | 国产精品久久久久久久久久久久久久久 | 国产精品久久久网站 | 久久影院一区二区三区 | 免费国产不卡午夜福在线 | 欧美日韩在线免费观看 | 日韩精品中文字幕在线观看 | 国产精品久久久久久久久久10秀 | 操操操操操 | 亚洲精品 欧美 | 国产一区日韩一区 | 欧美人与性禽动交精品 | 午夜生活理论片 | 国内精品久久久久久2021浪潮 |