這次做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) 編輯 收藏