您現在的位置是:電腦技術吧?>? 基礎知識 ??>??性能優化,前端性能優化??>??正文詳情

性能優化,前端性能優化

赤晴嵐2019-12-04 14:32:12 人圍觀
簡介MySQL 性能優化在本文中,我將引導您學習實用的、經過驗證的性能調優技術,這將極大地提高您的servlet和JSP頁面的性能,進而提高J2EE的性能。這些技術的一部分用于開發階段react 性能優

在本文中,帶領你學習已經實踐和得到證實的性能調整技術,它將大大地提高你的servlet和jsp頁面的性能,進而提升J2EE的性能。

這些技術的部分用于開發階段,例如,設計和編碼階段。

另一部分技術則與配置相關。

  技術1:在HttpServlet init()方法中緩存數據  服務器會在創建servlet實例之后和servlet處理任何請求之前調用servlet的init()方法。

該方法在servlet的生命周期中僅調用一次。

為了提高性能,在init()中緩存靜態數據或完成要在初始化期間完成的代價昂貴的操作。

例如,一個最佳實踐是使用實現了 javax.sql.DataSource接口的JDBC連接池。

DataSource從JNDI樹中獲得。

每調用一次SQL就要使用JNDI查找 DataSource是非常昂貴的工作,而且嚴重影響了應用的性能。

Servlet的init()方法可以用于獲取DataSource并緩存它以便之后的重用:以下是引用片段:  public class ControllerServlet extends HttpServlet   {   private javax.sql.DataSource testDS = null;   public void init(ServletConfig config) throws ServletException   {   super.init(config);   Context ctx = null;   try   {   ctx = new InitialContext();   testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");   }   catch(NamingException ne)   {   ne.printStackTrace();   }   catch(Exception e)   {   e.printStackTrace();   }   }   public javax.sql.DataSource getTestDS()   {   return testDS;   }   ...   ...   }   技術2:禁用servlet和Jsp的自動裝載功能  當每次修改了Servlet/JSP之后,你將不得不重新啟動服務器。

由于自動裝載功能減少開發時間,該功能被認為在開發階段是非常有用的。

但是,它在運行階段是非常昂貴的;servlet/JSP由于不必要的裝載,增加類裝載器的負擔而造成很差的性能。

同樣,這會使你的應用由于已被某種類裝載器裝載的類不能和當前類裝載器裝載的類不能相互協作而出現奇怪的沖突現象。

因此,在運行環境中為了得到更好的性能,關閉servlet/JSP的自動裝載功能。

  技術3:控制HttpSession  許多應用需要一系列客戶端的請求,因此他們能互相相關聯。

由于HTTP協議是無狀態的,所以基于Web的應用需要負責維護這樣一個叫做 session的狀態。

為了支持必須維護狀態的應用,Java servlet技術提供了管理session和允許多種機制實現session的API。

HttpSession對象扮演了session,但是使用它需要成本。

無論何時HttpSession被使用和重寫,它都由servlet讀取。

你可以通過使用下面的技術來提高性能:  在JSP頁面中不要創建默認的HttpSession:默認情況下,JSP頁面創建HttpSession。

如果你在JSP頁面中不用HttpSession,為了節省性能開銷,使用下邊的頁面指令可以避免自動創建HttpSession對象:以下是引用片段: %@ page session="false"%   不要將大的對象圖存儲在HttpSession中:如果你將數據當作一個大的對象圖存儲在HttpSession中,應用服務器每次將不得不處理整個HttpSession對象。

這將迫使Java序列化和增加計算開銷。

由于序列化的開銷,隨著存儲在HttpSession對象中數據對象的增大,系統的吞吐量將會下降。

  用完后釋放HttpSession:當不在使用HttpSession時,使用HttpSession.invalidate()方法使sesion失效。

  設置超時值:一個servlet引擎有一個默認的超時值。

如果你不刪除session或者一直把session用到它超時的時候,servlet引擎將把session從內存中刪除。

由于在內存和垃圾收集上的開銷,session的超時值越大,它對系統彈性和性能的影響也越大。

試著將session的超時值設置的盡可能低。

  技術4:使用gzip壓縮  壓縮是刪除冗余信息的作法,用盡可能小的空間描述你的信息。

使用gzip(GNU zip)壓縮文檔能有效地減少下載HTML文件的時間。

你的信息量越小,它們被送出的速度越快。

因此,如果你壓縮了由你web應用產生的內容,它到達用戶并顯示在用戶屏幕上的速度就越快。

不是任何瀏覽器都支持gzip壓縮的,但檢查一個瀏覽器是否支持它并發送gzip壓縮內容到瀏覽器是很容易的事情。

下邊的代碼段說明了如何發送壓縮的內容。

以下是引用片段:  public void doGet(HttpServletRequest request, HttpServletResponse response)   throws IOException, ServletException   {   OutputStream out = null   // Check the Accepting-Encoding header from the HTTP request.   // If the header includes gzip, choose GZIP.   // If the header includes compress, choose ZIP.   // Otherwise choose no compression.   String encoding = request.getHeader("Accept-Encoding");   if (encoding != null   out = new GZIPOutputStream(response.getOutputStream());   }   else if (encoding != null   out = new ZIPOutputStream(response.getOutputStream());   }   else   {   out = response.getOutputStream();   }   ...   ...   }   技術5:不要使用SingleThreadModel  SingleThreadModel保證servlet一次僅處理一個請求。

如果一個servlet實現了這個接口,servlet引擎將為每個新的請求創建一個單獨的servlet實例,這將引起大量的系統開銷。

如果你需要解決線程安全問題,請使用其他的辦法替代這個接口。

SingleThreadModel在Servlet 2.4中是不再提倡使用。

  技術6:使用線程池  servlet引擎為每個請求創建一個單獨的線程,將該線程指派給service()方法,然后在service()方法執行完后刪除該線程。

默認情況下,servlet引擎可能為每個請求創建一個新的線程。

由于創建和刪除線程的開銷是很昂貴的,于是這種默認行為降低了系統的性能。

我們可以使用線程池來提高性能。

根據預期的并發用戶數量,配置一個線程池,設置好線程池里的線程數量的最小和最大值以及增長的最小和最大值。

起初,servlet引擎創建一個線程數與配置中的最小線程數量相等的線程池。

然后servlet引擎把池中的一個線程指派給一個請求而不是每次都創建新的線程,完成操作之后,servlet引擎把線程放回到線程池中。

使用線程池,性能可以顯著地提高。

如果需要,根據線程的最大數和增長數,可以創建更多的線程。

  技術7:選擇正確的包括機制  在JSP頁面中,有兩中方式可以包括文件:包括指令( %@ include file="test.jsp" %)和包括動作( jsp:include page="test.jsp" flush="true" /)。

包括指令在編譯階段包括一個指定文件的內容;例如,當一個頁面編譯成一個servlet時。

包括動作是指在請求階段包括文件內容;例如,當一個用戶請求一個頁面時。

包括指令要比包括動作快些。

因此除非被包括的文件經常變動,否則使用包括指令將會獲得更好的性能。

(www.3lian.com)  技術8:在useBean動作中使用合適的范圍  使用JSP頁面最強大方式之一是和JavaBean組件協同工作。

JavaBean使用 jsp:useBean標簽可以嵌入到JSP頁面中。

語法如下:以下是引用片段:   jsp:useBean id="name" scope="page|request|session|application" class=   "package.className" type="typeName"    /jsp:useBean   scope屬性說明了bean的可見范圍。

scope屬性的默認值是page。

你應該根據你應用的需求選擇正確的范圍,否則它將影響應用的性能。

  例如,如果你需要一個專用于某些請求的對象,但是你把范圍設置成了session,那么那個對象將在請求結束之后還保留在內存中。

它將一直保留在內存中除非你明確地把它從內存中刪除、使session無效或session超時。

如果你沒有選擇正確的范圍屬性,由于內存和垃圾收集的開銷將會影響性能。

因此為對象設置合適的范圍并在用完它們之后立即刪除。

版權聲明:本文由 赤晴嵐 整理編輯。

原標題:js性能優化,前端性能優化的理解

轉載注明出處:http://www.dn9ww09s.icu/basics/15115.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • matlab將數據存入數組,怎么把字符串存入數組

    matlab將數據存入數組,怎么把字符串存入數組 相關圖片數組輸入本文的示例描述了PHP如何獲取web頁面中的所有圖片并將它們存儲在數組中。與您分享以供參考。具體如下:123456789101213141516$images=數組轉list...

  • 自定義標簽,自定義標簽在哪

    自定義標簽,自定義標簽在哪 相關圖片自定義一。基本概念:1。Tag:Tag是一個XML元素,通過它可以使JSP頁面變得簡單易維護,并且可以很容易地實現同一個JSP文件來支持多種語言版本。由于標記是XMLQQ自定義標簽8個字...

  • 圓角,圓角怎么用

    圓角,圓角怎么用 相關圖片html圓角代碼如下:?PHP$image﹐file=$﹐get['src'];$corner﹐radius=isset($﹐get['radius'])?$﹐get['rCAD圓角怎么用...

  • 數據庫入門,數據庫的基礎是

    數據庫入門,數據庫的基礎是 相關圖片數據庫基礎教材最初的計劃是從本文開始向您介紹ASP的內置ActiveX組件,但考慮到我們在以后的研究中會接觸到大量的數據庫查詢,筆者暫時決定用一兩篇文章來簡要介紹一下數據庫查數...

  • struts2和spring,spring struts

    struts2和spring,spring struts 相關圖片spring與struts的區別剛剛接觸到JSP的struts不久,我將再次學習spring,然后將兩者結合起來。所以我在網上找到了很多關于struts spring的例子,但基本上都是a的例struts2和spring整合...

  • 參數的傳遞,參數傳遞的方式有哪些

    參數的傳遞,參數傳遞的方式有哪些 相關圖片過程參數的傳遞方式目前,JSP頁面中傳遞中文參數的方式主要有兩種:URL,如http://website/test1。JSP?Act=AddType=orange param=%編譯原理參數傳遞...

  • php字符串截取,php截取指定字符串

    php字符串截取,php截取指定字符串 相關圖片php截取字符串前幾位在這里,您可以指定字符串和截取代碼的字數,如下所示:?Phpfunction limit_words($string,$word_limit){$words=e字符串截取...

  • openrasp,openwaf

    openrasp,openwaf 相關圖片open資訊1.0用rs.open SQL讀取數據,Conn,1,1修改數據:rs.open SQL,Conn,1,3刪除數據:需要Conn.execute(delete*frorasp...

  • php返回,php返回結果

    php返回,php返回結果 相關圖片php這個例子描述了PHP如何返回相對時間(例如,20分鐘前,3天前)。與您分享以供參考。具體如下:123456789101213141516171819202122php點擊返回...

  • php跳轉頁面,php跳轉其他頁面

    php跳轉頁面,php跳轉其他頁面 相關圖片php跳轉到html登錄頁面在PHP編寫中,有時用戶頁面會跳轉。這里我們收集了幾種好的跳躍方法,可以使用。利用HTTP頭信息實現PHP的頭函數。PHP中的header函數用于向瀏覽器發送控php框架跳轉...

熱評文章

  • 靜態測試的常用方法,軟件測試中常用的靜態方法是

    靜態測試的常用方法,軟件測試中常用的靜態方法是 相關圖片怎么做靜態測量PHP開發中常用的一個詳細的操作類-希望您能添加更多-完善這個操作類1234567891013141516171819202122232425262728293靜態工作的...

  • 怎么生成pdf格式文件,怎么轉換pdf格式文件

    怎么生成pdf格式文件,怎么轉換pdf格式文件 相關圖片文件怎么轉換成pdfASP是一種古老的語言,它的一些功能對UTF-8的支持很差。例如,如果要生成UTF-8文件,則不能使用常用的SCR instrumentation.filesywps是什么格式的文件...

  • 什么是JSP,JSP

    什么是JSP,JSP 相關圖片js和jspCookie應該是一種使用了很長時間的技術。早在HTML出現時,就沒有辦法記錄和識別每個單獨頁面之間的不同用戶。后來,人們發明了曲奇技術。當用戶訪問網頁時,它可yjsp18...

  • 電子表格數組,excel數組怎么用

    電子表格數組,excel數組怎么用 相關圖片excel生成數組本文的例子描述了PHP如何將HTML表的每一行和每一列轉換成一個數組來收集表數據。與您分享以供參考。具體如下:下面的PHP代碼可以將HTML表的每一行和每一列轉數組...

  • 正則表達式 字符串,正則表達式包含字符串

    正則表達式 字符串,正則表達式包含字符串 相關圖片c正則表達式提取字符串本文為您提供了一個優秀的ASP教程,用于刪除字符串中的空格和數字正則表達式。這四個替換空間和數字正則表達式是不同的。腳本語言=web效果類型=文本/JavaSc正...

  • php文件是什么,怎么打開php文件

    php文件是什么,怎么打開php文件 相關圖片php下載文件PHP文件下載處理方法分析本文主要介紹了PHP文件下載處理方法,實例分析了PHP對于文件下載常見的處理技巧,具有一定的參考價值,需要朋友可以參考本文下面的例子來運行...

  • 防注入攻擊,注入攻擊

    防注入攻擊,注入攻擊 相關圖片注入式攻擊要防止asp.net應用程序被SQL注入攻擊入侵并不是一件特別困難的事情,只要在使用表單輸入內容構造SQL命令之前過濾所有輸入內容。過濾輸入可以通過多種方式完成數據庫注入...

  • Date函數,Date日期函數

    Date函數,Date日期函數 相關圖片date函數的意思一。date adddateadd函數返回已添加指定時間間隔的日期。DateAdd(interval,number,date)DateAdd函數的語法具有以下所concatenate函數...

  • if函數判斷空值,空值函數

    if函數判斷空值,空值函數 相關圖片非空函數本文主要介紹了幾種PHP函數的比較,以判斷其是否為空。本文介紹了gettype()、empty()、is_null()、isset()等函數在不同變量下的返回值函數空值怎么表示...

  • jsperror500,jsperrorpage

    jsperror500,jsperrorpage 相關圖片jsp處理錯誤是什么1. Error page: errorpage.jsp% @ page iserrorpage = "true"% HTML head meta http ejsp文件...

關注微信

变脸官网查询