为什么解道访问速度这么快

12-09-19 tianhandigeng
                   

10年的时候就开始接触到j道了,我发现页面打开速度是相当的快,基本上1、2秒钟就搞定了,用起来有“很滑”的感觉,不知道J道的高明之处在哪,为什么打开页面速度如此的快?

[该贴被admin于2012-09-20 11:10修改过]

                   

36
banq
2012-09-19 07:13

解道是使用基于Jdonframework的jivejdon开发的。其中使用到的性能加速技术有:

1.Disruptor并发加载技术,浏览一个帖子时,有很多数据表需要加载,jivejdon只加载主要值对象MessageVO相关的数据表,其他数据表只是在需要访问时使用。

2.基于内存的DDD模型技术,帖子实体常驻内存,帖子更新基于内存更新,异步更新数据库。

3.采取客户端缓存技术,对于帖子没有更新的,发送304给浏览器,节省带宽。

4.杜绝Cookie,只有登录用户才有Cookie,只读用户没有任何Cookie,并且根据帖子时间有一定的expire时间。

JiveJdon基本采取了目前能够采取的各种性能加速技术,之所以能够拓展到如此极致,关键是JiveJdon的读写分离的清晰CQRS架构。

[该贴被banq于2012-09-20 08:53修改过]

banq
2012-09-19 07:28

总体来说,是动态页面静态化,我以前说过:静态页面其实也是动态页面,静态页面是通过Apache或Nginx这些类似Java的C程序加载推送到客户端的,关键在于Http协议的设置,现在通过Java将动态页面模拟成静态页面,去除页面中和客户端有关的信息,不要每次加载页面内容不一样,去除Cookie等等综合方式。

还有反爬虫机制,对于各种不正常扫描使用fail2ban及时封杀。

使用的主机是阿里云最便宜的经济A型。

[该贴被banq于2012-09-20 08:53修改过]

banq
2012-09-20 12:26

2012-09-19 07:13 "@banq"的内容
Disruptor并发加载技术,浏览一个帖子时,有很多数据表需要加载,jivejdon只加载主要值对象MessageVO相关的数据表,其他数据表只是在需要访问时使用 ...

这种即用即加载和Hibernate的延迟加载或AJAX的异步加载是有区别的,AJAX的异步加载会发出很多Http请求;而Hibernate等延迟加载是无法跨请求的,只能在一个请求响应发往客户端结束前全部完成。

而基于Jdonframework+disruptor的即用即加载是跨请求的,也就是说,只有当第一次输出JSP页面时,需要访问模型对象的getXXX方法时,才会从数据库中加载。

当然,所有这些都必须以DDD模型对象为中心设计,这里也涉及到聚合根的设计。可以设计两种聚合根,一个负责对外,一个负责对内。

所谓对外,打个比喻,当我们看到一个球时,我们这时处于球的外部,看到的是球的表面特征,比如球面光滑等的;而当我们走到球内部,看到球里面有很多房子,这是对内。

我们人观察任何事物都有这样内外分别,那么在访问模型对象时,也有内外之分,这时聚合根就要负责其内外分别的职责。

比如DDD书籍中Car和发动机两个都是聚合根,发动机是提供Car内部动力,而Car则是一个集合概念,负责对外,我们首先看到的是CAR,走到Car内部,我们才感受到发动机。

但是Car和发动机的区别是:发动机你可以看到一个具体机器,而Car则没有具体形态,它内部是由发动机 车轮 车厢等组成,只有你走出Car内部,才看到Car的形态,这时Car其实是一种外表边界而已。

所以,一般重建聚合根时,我们可以倾向于先构建一个框架聚合根Car,然后由Car负责加载重建其内部一个个元素组件。

jivejdon论坛聚合根也是由Thread这个组合体和RootMessage这两个聚合根,因此加载一个帖子时,首先加载一个Thread,其他部分加载看情况而定,如果是要看帖子内部内容,届时显示时会加载与内容显示相关的部件;而如果只是想看看很多Thread列表,从外部看Thread,那届时就会加载Thread与外部特征有关的数据。这和从外部看球与走到球内部的道理是一样的。

alexwoo
2012-09-20 21:52

确实很快,体验很棒。 感觉Jdon的风格一点都不浮躁。

[该贴被alexwoo于2012-09-20 21:54修改过]

6Go 1 2 3 4 ... 6 下一页