頁面輸出太多會嚴重影響web程式的效能

來源:互聯網
上載者:User
web|程式|效能|頁面

我有這樣一個小程式:asp + sqlserver2000。
  資料量增加的很快,最近發現它的效能非常差,每次開啟都需要十幾秒,甚至幾十秒,因為我
的程式分頁用的是我自己的分頁程式:
  難道這個分頁程式有問題,但是其他地方用到它沒有感覺到慢呀,我沒事就琢磨他,到網上查資料,結果沒有具體查到說到我的那個分頁程式效能差的相關資料,後來我發現我的程式中的頁導航用的是數字導航方法,而且所有的頁導航的數字全都輸出來了,一共一千多頁,能不能使這個地方慢呢?我決定測試一下,所以,我就只讓他輸出前200頁的導航連結,結果1秒鐘就刷出來了。這我才恍然大悟,原來是輸出內容太多導致的。以前遇到效能問題都會去想資料庫操作,從來沒有想到其他地方會不會有問題,或很少想其他地方。其實頁面輸出的資料量對效能也是有很大影響的,所以我們一定要養成良好的程式書寫習慣,力求簡單。

  後來我對程式進行了最佳化,最佳化分兩個步驟,第一個步驟我不將所有的導航都輸出來,只輸出前200多頁,後面再加一個文字框用於導航。

  同時我對每個連結進行了簡化,原來每個上面都有很長的連結,至此我將連結放到了javascript函數中,然後再導航數字上只加上一個onclick事件。這樣又可以減少很多輸出資料。結果效能非常好。 

  原來的代碼片斷:

 <font color="#008080" size="2">當前<font color=ff0000>
<%=tCurPage%></font>頁 共<font color=ff0000>
<%=tpagecount%></font>頁   
  <br><%     if tTotalCount>0 then                      
   for i=1 to tPagecount                                                              
   %><a href='<%=request.servervariables("Path_Info")%>
?page=<%=i%>&browserSize=<%=browserSize%>
&t_count=<%=tTotalCount%>&order_field=<%=tOrderField%>
&order_dir=<%=tOrderDirection%>&oType=<%=oType%>
&oOP=<%=oOP%>&oKey=<%=FilterParam4(oKey)%>
&page_size=<%=tPageSize%><%=add_Option%>'><%=i%></a>
<% if browserSize=1 then      
         if i=20 or i=36 then response.write " "       
      end if    
      if i=fCou then   
         exit for     
      end if      
      response.write ""           
   next %>
  <%dim allStr             
   if tpagecount>fCou then                                       
      for i=fCou+1 to tpagecount          
     if browserSize=0 then      
       m=(i=74 or i=107 or (i>107 and ((i-107) mod 27)=0))      
     else      
       m=(i=94 or i=130 or (i>130 and ((i-130) mod 35)=0))  
     end if               
                                                                                          
       allStr=allStr & "<a href='"&request.servervariables("Path_Info")&"?
page="&i&"&browserSize="&browserSize&"&t_count=" & tTotalCount &
"&order_field=" & tOrderField & "&order_dir=" & tOrderDirection & "&
oType=" & oType & "&oOP=" & oOP & "&oKey=" & FilterParam4
(oKey) & "&page_size=" & tPageSize & add_Option &
"'>"       
       allStr=allStr & i     
       allStr=allStr & "</a>"          
       if not m then allStr=allStr & " "       
       if m then allStr=allStr & "<br>"           
       if browserSize=1  then               
           if i=58 or i=71 then allStr=allStr & " "               
       end if                
      if i=106 then allStr=allStr & " "       
      next%>                                        
      <script language=javascript>            
         var allStr;                       
         allStr="<%=allStr%>";                                                 
      </script><a href="#" title="顯示更多…" id=seemore
>
<font color=ff0000>∨</font></a><span id=morePage></span>
<%end if %>                                                             
<% end if  %>  </font>      

                                                                                                  
              
更改後的代碼片斷:

 < script language="javascript">
   function mP(curPage)
   {
     try{
      if(!curPage)return false;

      var patInt=/^\d+$/;
      if(!patInt.test(curPage)) return false;

      if(parseInt(curPage)<=0) return false;
      self.location='<%=request.servervariables("Path_Info")%>?
page=' + curPage+ '&browserSize=<%=browserSize%>
&t_count=<%=tTotalCount%>&order_field=<%=tOrderField%>
&order_dir=<%=tOrderDirection%>&oType=<%=oType%>
&oOP=<%=oOP%>&oKey=<%=FilterParam4(oKey)%>
&page_size=<%=tPageSize%><%=add_Option%>';
      }
      catch(e) {
        window.status=e.description
        return false;
      }
   }  
< /script>                                                                                  
   <font color="#008080" size="2">當前<font color=ff0000>
<%=tCurPage%></font>頁 共<font color=ff0000>
<%=tpagecount%></font>頁     
<br><%  if tTotalCount>0 then
    for i=1 to tPagecount     
     %><span ><%=i%></span>
     <% if browserSize=1 then   
           if i=20 or i=36 then response.write " "      
        end if  
        if i=fCou then                
           exit for               
        end if  
response.write ""    
    next
    dim allStr 
                                                       
    if tpagecount>fCou then 
       showPageCount=tpagecount
       if showPageCount>260 then showPageCount=260                   
       for i=fCou+1 to showPageCount     
                    
    if browserSize=0 then                  
       m=(i=74 or i=107 or (i>107 and ((i-107) mod 27)=0))               
    else               
       m=(i=94 or i=130 or (i>130 and ((i-130) mod 35)=0))               
    end if                                                                             
       allStr=allStr & "<span onclick='mP(" & i & ")'>" & i & "</span>"     
       if not m then allStr=allStr & " "       
       if m then allStr=allStr & "<br>"                      
       if browserSize=1  then               
           if i=58 or i=71 then allStr=allStr & " "               
       end if                
    if i=106 then allStr=allStr & " "          
       next
       allStr=allStr & "  轉至 第<input id=""sPageNo""
class=""line"" maxlength=""5""
size=""6"">頁 <span onclick='mP(document.getElementById(""sPageNo"").value)'>GO</span>"%><a href="#" title="顯示更多…"
id=seemore ><font color=ff0000>∨</font></a>     
  <span id=morePage style="display:none"><%=allStr%></span>                                                    
 <%end if                                                                                     
end if                                                                                            
   %>  </font>  

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。