国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

優化Web Sphere性能應用技巧集錦

2024-07-21 02:38:04
字體:
來源:轉載
供稿:網友

  優化Web應用的性能絕不象有些人想象的那樣簡單易行,它涉及到諸多技術,從最簡單的Html代碼修改,到復雜的EJB改造,無不涉及性能問題。但有一點是非常清楚的:要想找出和解決Web應用的性能瓶頸,就必須深入全面地了解信息在Web應用中的流程。
  
  改善Web應用的性能不一定要局限于Web應用的java代碼,例如有些時候,簡單地改動一下HTML頁面的質量、減少其傳輸頻度和數據量就可以有效地提高應用的性能表現;有時提高性能的要害卻在于修改Web應用的數據庫訪問部分——這只是Java代碼之外影響性能的兩個因素,其他還有許多因素會影響到Web應用的整體性能表現。另一方面,就Java程序本身而言,其性能優化又可以分成三個領域:基本的Java代碼優化,jsp/Servlet優化,EJB優化。
  
  一、表現層優化
  
  Web應用的最大性能瓶頸經常不在其他地方,而在于最基本的網絡帶寬限制。假如你的Web應用也面臨這類問題,提高性能最簡單的辦法是減少HTTP傳輸,例如用javascript實現客戶端編輯功能以減少數據傳輸次數,避免將數據發送到服務器端再執行合法性驗證之類的編輯操作。
  
  應當采用一切可能措施減少通過網絡傳輸的數據。例如,你可以要求瀏覽器緩沖模塊化的Javascript文件,在SCRIPT標記的SRC中指定:
  
  SCRIPT LANGUAGE="JavaScript" SRC="FormChek.js"。
  
  其他減少網絡傳輸應當注重的地方還包括:避免過度使用隱藏域,減少超長Cookie值,在RADIO、CHECKBOX和SELECT域中用代碼來替代長長的字符串,等等。不過在HTML優化方面本文不預備作全面的討論,因為WebSphere應用的開發者一般不會擔負設計表現層的責任,只要了解下面這個原理就足夠了:
  
  性能技巧之一:盡可能減少HTTP數據傳輸的總量和頻度
  
  二、數據庫訪問
  
  朋友小A對Java的了解極為有限,但他卻成功地改進了許多WebSphere應用的性能。他是怎么做到的呢?原來,小A是一個數據庫專家,他通過優化數據庫訪問有效地改進了整個應用的性能,但對于Java,他只是略微了解一些有關JDBC的知識。在優化數據庫訪問時,小A做的第一件事情總是檢查數據庫的設計,有時他會建議重新構造數據庫的結構(必須指出的是,為了提高性能而重新構造數據庫結構有時可能使數據庫反規格化(De-Normalization),從而帶來維護方面的問題)。
  
  性能技巧之二:規格化(Normalization)數據庫結構
  
  小A做的第二件事情是執行數據庫分析,根據分析結果提出增加某個索引、減少某個索引的建議。完成這一步驟后,小A通常可以讓應用有令人滿足的性能表現,根本不必去查看應用的Java代碼。
  
  性能技巧之三:針對常用的SQL操作建立索引,刪除多余的索引
  
  有時,為了進一步優化應用的性能,小A會檢查Java(也許應該說是SQL)代碼,經常找到Java程序沒有合理運用PReparedStatement和連接緩沖池的情形。只要把Statement類的動態SQL替換成PreparedStatement類的靜態SQL,從連接池提取SQL連接(而不是直接創建連接),應用的性能將得到顯著的改善。注重DB2 UDB(包括其他一些數據庫)的PreparedStatement是可調整和配置的。
  
  性能技巧之四:合理運用PreparedStatement和連接池
  
  進一步分析應用的工作流程之后,小A有時會建議批量執行某些SQL命令,這樣就只需一個對數據庫服務器的請求就可以運行大量的SQL命令。
  
  性能技巧之五:考慮批量執行SQL命令
  
  既然如此,小A有時還會指出,假如應用中有些SQL命令可以組合成單個事務邏輯,那么應該可以用一個存儲過程來替代。DB2 UDB的存儲過程語言(SPL,Stored Procedure Language)非常強大,假如把數據庫操作邏輯從Web應用轉移到數據庫,一般總是對性能有益。不過需要注重的是,雖然批量執行SQL命令或使用存儲過程會提高性能,但就象重新構造數據庫結構一樣,有時會帶來維護方面的困難。
  
  性能技巧之六:考慮使用數據庫存儲過程
  
  檢查JDBC代碼的時候,小A總是留意對象有沒有及時正確釋放。這一點其實很重要。
  
  性能技巧之七:及時關閉不用的Statement、ResultSet、Connection等對象(但不是在finalize方法內)
  
  三、Java代碼
  
  前面我們以小A的經驗為例,探討了Web應用中數據庫訪問性能的重要性。
調整好數據庫之后,接下來要做的自然是深入分析應用的Java代碼。從哪里入手呢?你最好使用Java分析工具來找出性能問題的焦點所在。優化Java代碼的性能是一個艱苦的過程,因此一個重要的原則是把精力集中到那些可能引起性能問題的代碼上。換句話說,就是要尊重80/20規則:利用Java分析工具的結果,調整帶來80%性能開銷的那20%代碼。
  
  性能技巧之八:用Java分析工具清楚地界定性能問題所在
  
  目前市場上已經有許多優秀的Java分析工具,例如ej-technologie的JProfile(http://www.ej-technologies.com),Klgroup的Jprobe(http://www.klg.com),以及Intuitive Systems的OptimizeIt(http://www.optimizeit.com)。不過不要忘記WebSphere Studio application Developer(WSAD)本身也集成了一個優秀的分析器,有條件的話,最好多用幾種分析工具分析Java代碼。
  
  考慮到資金問題,你不一定樂意購買昂貴的分析軟件,但你可以用Java本身的命令行工具生成分析信息。例如,在JDK 1.3中,你可以用下面的命令將TestOrderProcessing類的CPU使用情況保存到java.hprof文件:java -Xrunhprof:cpu=times,format=a,file=java.hprof TestOrderProcessing。
  
  這種辦法的缺點是它提供的信息條理不夠清楚,比較繁雜;也許可以找到一些源代碼開放的工具輔助分析,但一般不如使用WSAD本身的分析工具或商業化的分析工具方便。另外,假如你已經了解哪些代碼塊可能引起性能問題,可以通過保存系統時間的方式獲得分析信息,例如:
  long startTime = System.currentTimeMillis();
  // 執行某些操作
  long endTime = System.currentTimeMillis();
  
  3.1 基本篇
  
  有人建議“穩定性第一,速度第二”,一般而言遵從這個建議是不會錯的,但這并不妨礙我們在編寫代碼的同時運用某些已經證實的性能技巧。例如,我們都知道String類是不可變的,連接兩個String是一項開銷很大操作。
  
  性能技巧之九:用StringBuffer來連接兩個字符串
  
  也許你已經注重到,Sun的許多標準Java類是線程安全的,這些類內部的同步機制實際上很輕易造成性能問題。例如,Vector類就是一個線程安全的類,除非確實要用到同步機制,否則使用Vector是不值得的,如有可能,應當盡量改用非線程安全的類如ArrayList。
  
  性能技巧之十:只有在必要時才運用線程安全的類
  
  許多人習慣使用System.out.println來輸出跟蹤信息,但println要占用不少資源,所以輸出跟蹤信息最好使用專用日志記錄框架,如IBM的JRas或Apache的Log4j。
  
  性能技巧之十一:用日志記錄框架類輸出跟蹤信息,而不是使用System.out.println
  
  最后一個提高代碼性能的簡單技巧是清除類里面的調試信息,減小類的體積。IBM有一個WSAD插件,它提供了一個叫做setDebugInfo的任務,可以從Ant腳本調用。
  
  性能技巧之十二:從正式發行的軟件中刪除調試信息

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固原市| 桐庐县| 江源县| 镇巴县| 安泽县| 甘谷县| 永新县| 临泉县| 巴中市| 永昌县| 广南县| 望谟县| 册亨县| 莒南县| 木兰县| 榆林市| 同江市| 开鲁县| 察雅县| 讷河市| 习水县| 富锦市| 兴和县| 正阳县| 万州区| 定西市| 逊克县| 屏南县| 乐安县| 凭祥市| 云浮市| 中山市| 临沂市| 玉门市| 石门县| 秦皇岛市| 凤冈县| 昌邑市| 德庆县| 乌鲁木齐县| 榕江县|