這次做portal的一些總結(一)

          這次做 ibm portal ,算是臨危受命。做了幾個月的 SA 離職,留下一個功能和性能都有很多問題的項目,臨時讓我頂上。經過一個多月的緊張工作(經常加班,上班上不了網,也沒時間上網),總算功能和性能上都能達到客戶要求了。而我也由一個不懂 portal 的人,經過項目中實戰,不說成為高手,一般的概念、開發、配置、優化等也都有了很多體會。

          這次技術上值得推薦的就是合理的使用 ajax ,既加快了首頁的 load 速度,又帶來了很好的用戶體驗。開始首頁上所有 portlet 都是串行加載,有的 portlet 比如新郵件,依賴于 mail 系統提供的接口。開始這個接口在較大壓力下就出現性能瓶頸,后在我們的要求下替換了協議,性能也在 1s-2s 之間。如果采用常規的辦法,加上 wps 驗證、運算,顯示主題、皮膚,加載所有 portlet ,響應時間肯定在 10s 以上。

          我在 openfans 中使用了 ajax ,有些經驗,所以決定采用異步加載:首頁 load 時一些 portlet 直接顯示正在 loading 的字樣,在 body onload 時再使用 ajax 填充內容;使用 iframe portlet ,也是 src 先指向一個靜態的正在 loading 頁面, body onload 時再替換 src 到實際地址(這是 ajax 模式的一種)。這樣首頁登錄實際上只經過 wps 內部的驗證和顯示,所有業務邏輯都是加載成功后再并行進行。實際表現效果就是:頭上的主題很快出來,一塊塊區域顯示正在 loading 字樣,性能快的 portlet 很快出來,需要幾秒的 portlet 隨后出來,而不是讓用戶傻等 10 s 再一下全部顯示。

          使用 ajax 同時也能解決頁面刷新問題和獲取返回值的問題。比如前面顯示新郵件的 portlet ,用戶點擊了一封郵件,新郵件數應該減 1 ,剛點擊的郵件也應該上頁面上消失。原始的做法就是刷新整個頁面,既加大服務器壓力,又帶來很差的用戶體驗。使用 ajax ,在點擊后 1s (或者更長,這取決于郵件系統對點擊操作的響應快慢)刷新 div 的內容,用戶甚至感覺不到內容已經更新。其它 portlet 也不需要重新載入,大大減輕服務器的壓力。有的操作需要提交給其它系統,而且可能成功可能失敗,這就需要獲得返回值。如果使用普通的 form 提交,需要更新整個頁面。而使用 ajax 提交,可以方便的獲得其返回值,進而顯示不同的提示。

          另一個架構上的特點就是 portal 服務器職責單一 。開始所有的業務邏輯都是寫在 portlet 里,加重了 portlet 服務器的壓力。我進來后做的一個大的規劃就是,把業務邏輯抽離到其它 server 上,然后通過 ajax 加載到 portlet 中。這樣既可以充分利用服務器資源(新的 server 使用單獨的內存空間和線程池),又使得 portal 服務器職責更單一:僅進行驗證、權限控制、主題、皮膚和 portlet 的展示。

          先寫這么多。因為使用了 2 server 做集群,在分布式環境下,開發也有了更多的要求(比如 cache ),后一篇文章再細細道來。

          posted on 2006-11-28 14:49 pesome 閱讀(3666) 評論(9)  編輯  收藏

          評論

          # re: 這次做portal的一些總結(一) 2006-11-28 15:40 Flyingis

          這次忙的時間不短啊,問個問題:

          可不可以將"正在Loading"換成反應響應速度的進度條?  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2006-11-28 15:50 young

          portal 不太了解~
          能說的詳細些嗎  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2006-11-28 16:32 ChuPaChuPs

          想了解一下cache和集群相關的內容,
          期待樓主的后續  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2006-11-28 18:45 dennis

          我們公司最近也做了IBM的portal ,可惜我沒參與,期待您的文章  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2006-11-28 19:19

          @Flyingis
          這會給用戶帶來很不好的體驗。
          因為顯示速度快的話,他會很期待迅速完成響應,但是由于網絡的延時,經常會比寫的速度慢;相反,如果顯示的速度本身很慢的話,會給他很不好的感覺,當然,如果顯示速度很慢,但是一下子就完成了響應,比“用戶認為的”快多了,那會達到很不錯的效果,那樣做并不提倡,因為這往往意味著你的算法出現了問題:(  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2007-01-03 10:55 guoyumin

          架構上的想法很有意思,以前沒這么想過。

          考慮一下另外一種實現方法:
          首先ibm的portal一定有異步加載portlet的功能,也就是在加載一個頁面上的portlet的時候,是同時多個線程去渲染不同的portlet。這是前提

          其次,如果把業務邏輯包裝為Web service的接口而不是ajax的接口,是不是可重用性,邊界,及業務邏輯劃分更為清晰?然后每一個portlet通過web service去獲取業務數據,在portal server上僅放置顯示邏輯。

          這樣的方案下是不是也同樣能達到你說的一塊塊渲染的效果而結構更為清晰?

          ajax我不太熟悉,有空討論一下,我也想學習學習好的ajax的框架和模式:)  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2007-01-03 22:04 pesome

          呵呵,對于webservice我目前持保守態度,主要還是架構的復雜度和可測試性。使用ajax載入內容,內容提供者實際是一個普通的web應用,可以方便的進行單元測試。
          你說的異步加載portlet,ibm的portal的確提供了,而且不需要重啟portal服務器,但這只能解決串行的問題,異步加載的另一個好處是讓頁面更快相應,提高用戶體驗。  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2007-02-13 16:10 靈石

          ==============
          難道在主題中的default頁面上去加入body的onload方法,如果這樣,不是這個主題,必須要部署你的相應的portlet?

          如果iframe指向的靜態的頁面上的body上的onload方法中去替換父頁面中相應Iframe的src,基本上也沒有任何意義。

          你能否詳細說明一下你的方法  回復  更多評論   

          # re: 這次做portal的一些總結(一) 2008-03-21 22:44 我現在碰到問題了

          我現在碰到問題了,AJAX如何讓異步加載執行時間短的先顯示在portlet中,執行長的晚一點顯示.

          我異步加載之后,為什么必須等所有異步結果都得到后才顯示在portlet中,大俠賜教 .  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2006年11月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          公告

          主要記錄作者在學習java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創,如需轉載請注明出處和原作者,如用于商業目的,需跟作者本人聯系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術

          人間百態

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 彝良县| 天等县| 济宁市| 澄城县| 平谷区| 安陆市| 孝感市| 北流市| 临泉县| 四会市| 新平| 正定县| 武清区| 沙雅县| 青铜峡市| 铁岭县| 忻州市| 柏乡县| 临沧市| 彭州市| 定陶县| 通化市| 榕江县| 博兴县| 讷河市| 商南县| 华安县| 资阳市| 四子王旗| 永和县| 蓝山县| 邯郸县| 峡江县| 五华县| 峨山| 枣强县| 诸暨市| 浠水县| 修武县| 固始县| 扶沟县|