<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    心的方向

    新的征途......
    posts - 75,comments - 19,trackbacks - 0
      轉自:http://blog.tostudy.com.cn/blog/show_3574.html

    優化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腳本調用。

      性能技巧之十二:從正式發行的軟件中刪除調試信息

    posted on 2008-04-08 13:03 阿偉 閱讀(202) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 久青草视频在线观看免费| 精品无码一级毛片免费视频观看 | 中文字幕无码不卡免费视频| 亚洲影视自拍揄拍愉拍| 国产精品免费_区二区三区观看| 日韩精品视频在线观看免费| 久久久久久久久亚洲 | 国产亚洲成人久久| 久草视频在线免费| 黄色三级三级免费看| 亚洲精品高清视频| 在线观看永久免费视频网站| 99久久免费国产精精品| 亚洲日韩中文字幕| 亚洲人成无码久久电影网站| 最近中文字幕大全免费视频| 免费激情网站国产高清第一页| 亚洲Av无码精品色午夜| 国产精品深夜福利免费观看| 久久精品中文字幕免费| 老司机午夜性生免费福利| 亚洲黄色三级网站| 亚洲第一黄片大全| 999久久久免费精品国产| 一级毛片高清免费播放| 亚洲国产亚洲综合在线尤物| 亚洲毛片av日韩av无码| 黄瓜视频高清在线看免费下载| 在线涩涩免费观看国产精品| 白白色免费在线视频| 亚洲精品人成网在线播放影院| 久久久久久久综合日本亚洲| 免费看小12萝裸体视频国产| 亚洲免费在线观看视频| 中文字幕免费人成乱码中国| 国产精品亚洲片在线花蝴蝶| 亚洲人成网站在线观看播放青青| 在线A亚洲老鸭窝天堂| 日本不卡高清中文字幕免费| 成人免费的性色视频| 国产免费无码AV片在线观看不卡|