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

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

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

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

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

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

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

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

          評論

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

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

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

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

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

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

          想了解一下cache和集群相關(guān)的內(nèi)容,
          期待樓主的后續(xù)  回復  更多評論   

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

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

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

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

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

          架構(gòu)上的想法很有意思,以前沒這么想過。

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

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

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

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

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

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

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

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

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

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

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

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

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


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


          網(wǎng)站導航:
           
          <2006年11月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統(tǒng)計

          公告

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

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術(shù)

          人間百態(tài)

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灵台县| 迁安市| 盐边县| 手机| 阿瓦提县| 滦平县| 和田市| 玉山县| 米林县| 华亭县| 石柱| 娱乐| 沧源| 旬阳县| 岐山县| 临武县| 贵南县| 滦平县| 大连市| 板桥市| 永善县| 长寿区| 桐乡市| 涿州市| 马山县| 林西县| 嘉峪关市| 济宁市| 策勒县| 运城市| 东城区| 绥化市| 石家庄市| 海门市| 林芝县| 谢通门县| 竹北市| 长春市| 宁化县| 曲阜市| 三原县|