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

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

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

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

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

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

          先寫(xiě)這么多。因?yàn)槭褂昧?/span> 2 臺(tái) server 做集群,在分布式環(huán)境下,開(kāi)發(fā)也有了更多的要求(比如 cache ),后一篇文章再細(xì)細(xì)道來(lái)。

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

          評(píng)論

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

          這次忙的時(shí)間不短啊,問(wèn)個(gè)問(wèn)題:

          可不可以將"正在Loading"換成反應(yīng)響應(yīng)速度的進(jìn)度條?  回復(fù)  更多評(píng)論   

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

          portal 不太了解~
          能說(shuō)的詳細(xì)些嗎  回復(fù)  更多評(píng)論   

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

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

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

          我們公司最近也做了IBM的portal ,可惜我沒(méi)參與,期待您的文章  回復(fù)  更多評(píng)論   

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

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

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

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

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

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

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

          ajax我不太熟悉,有空討論一下,我也想學(xué)習(xí)學(xué)習(xí)好的ajax的框架和模式:)  回復(fù)  更多評(píng)論   

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

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

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

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

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

          你能否詳細(xì)說(shuō)明一下你的方法  回復(fù)  更多評(píng)論   

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

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

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


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


          網(wǎng)站導(dǎo)航:
           
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          公告

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

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          收藏夾

          java技術(shù)

          人間百態(tài)

          朋友們的blog

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 通化市| 鄂伦春自治旗| 嘉峪关市| 南京市| 迭部县| 荔浦县| 应城市| 西乌| 会同县| 晋州市| 阿拉善右旗| 饶阳县| 清远市| 宁波市| 闽侯县| 富顺县| 榕江县| 吉隆县| 黄大仙区| 新邵县| 商丘市| 通化市| 原平市| 定襄县| 类乌齐县| 望谟县| 汪清县| 晋州市| 仁化县| 商都县| 西宁市| 同江市| 巩留县| 永仁县| 高唐县| 皮山县| 长海县| 古田县| 修武县| 安岳县| 井研县|