这次做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 阅读(3613) 评论(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

搜索

最新评论

阅读排行榜

评论排行榜