分页: 1 / 2

你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 7日 20:48
13畅游
写在前面:这是我对Typecho的个人看法,纯属个人意见,也是希望typecho能够越办越好,虽然现在我已经不用typecho了...
我们在设计一个单用户blog系统时,我们要时刻把*单用户*这三个字放在心上.单用户意味着数据的查询是很集中的,当一个用户页面的访问量比较小时,他几乎感觉不到这多出的几次查询带来多少延迟.而当访问量比较大时,他必然有实力去升级他的系统...
上面是typecho的原话,觉得有点不负责任的。因为是单用户,所以不论效率如何槽糕都不去理会,最终留下一句:他必然有实力去升级他的系统。wordpress虽然对数据库的查询也比较多,但是在WP2.x版本,缓存时内置的,后来才被移除,直到现在WP仍旧有各种缓存插件,typecho呢?别提插件,缓存机制都没有...
好了,回到正题吧。

缺陷1:RSS头信息
我不知道使用typecho的博主都不关心RSS还是我没研究透彻,反正这个问题已经存在很久很久了。RSS的头信息中的Content-Type的标准是application/rss+xml,但是标准不顶用啊,这种mime类型在互联网上的RSS阅读没问题,类似QQ订阅这种是直接抓取,因此mime类型的设置关系不大,但是如果我想要在浏览器上订阅RSS,那么麻烦就来了。我试过各种支持RSS订阅的浏览器,如果mime类型设置为application/rss+xml,那么浏览器会把页面作为文件下载,根本无法实现RSS订阅的功能。将mime类型设置为text/xml不是挺好么?

缺陷2:数据调用,这是我最不能容忍的
一个列表页,只输出栏目列表和文章列表,你知道会查询多少次数据库吗?我们来算一算:
首先调用全局参数:
SELECT * FROM typecho_options WHERE (`user` = 0 )
然后判断分类是否存在:
SELECT * FROM typecho_metas WHERE (`type` = 'category' ) AND (`slug` = '分类别名' ) LIMIT 1
然后调用分类列表
SELECT * FROM typecho_metas WHERE (`type` = 'category' ) ORDER BY typecho_metas.`order` ASC
好,才3次,没问题啊,重点不在这里!假如你设置的是每一页调用15篇文章,那么最基础的查询次数是1+15,也就是16次,然后如果你在列表中输出了作者信息,那就是1+15*2,也就是31次。一个非常简单的页面,查询数据库的次数达到34次。服务器性能差一点,你的并发一高,那么你的博客就被判死刑了。要是你的模板复杂一些,数据调用更多一点,那么搞死你的博客就是分分钟的事情....
最不能容忍的是,如果在列表中输出了作者信息,假如所有文章都是由你自己发布,那么:
SELECT * FROM typecho_users WHERE (`uid` = '1' )
这条语句也会被执行15次!搞个数组存一下不行么?非要重复地去查询数据库,数据库本身是有缓存,但程序怎么不处理?
不是说好的吗?"我们要时刻把*单用户*这三个字放在心上",但是你搞出了多用户,好吧,你做了多用户,那么你就不要支持在列表页显示作者信息啊,支持了却这样毛毛躁躁地进行数据处理,这样负责么?

缺陷3:功能隐藏?
不知道是不是typecho是协作开发的原因,还是其他原因,反正一些功能貌似太监了。我在阅读typecho代码的时候发现搜索有一个定义搜索的功能,但是这个功能我在后台并没有发现,也没有在相关文档中找到设置的方法,也没有去深究怎么回事儿...

反正还有其他一些毛病吧,写这么多也差不多了。基于种种原因,花了两天时间,全新开发了一套系统,将typecho平滑替换...php处理耗时由平均0.46秒提升到0.005秒,提高了9倍多,平均一个页面查询数据库的次数为1.4次,增加缓存机制,系统负载至少提升10倍。当初选择typecho是因为她轻盈如同少女,没有wordpress那么臃肿不堪,现在我觉得毕竟产品的用户不多,小众,我可以理解,但是没有我想象的那么好。

我的站点:http://13changyou.com/,欢迎大家吐槽,我原本还发布了一篇内容,现在看来也没意义了,毕竟不再使用typecho了....

大家的评论我看到了,大家这么调侃,也把我逗笑了,哈哈。
我说的的确是事实,平滑替换了typecho,但是希望大家考虑到一些原因:开发是针对性开发,不用为任何人做任何兼容处理,因为只是为自己写的。因此,没有插件、没有各种选项、没有各种其他任何需要包容其他用户的东西....把这些除开之后,博客系统就简单得不能再简单,然后再增加一个缓存机制即可。所以不是我自我感觉良好,而是我写的东西真心就这样而已,只是没有说清楚,让大家曲解了我的意思。。。。
我对typecho仍旧持有非常好的评价,因为这是一个博客系统,我之所以不用,是因为我的站不是一个博客...哈哈。

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 00:07
ClayMore
缓存机制 看来在Typecho也是有必要的

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 00:29
xian
基于种种原因,花了两天时间,全新开发了一套系统,将typecho平滑替换...

;) 看完我只注意到这句话……

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 00:54
joyqi
1。rss的标准没有什么错误

2。数据库的查询没这么可怕,mysql有query cache,对于分类和标签这种不经常变化的数据,这些查询都是从内存里fecth的

3。不知道说的是哪个功能

这让我想到,我在Typecho之前写过一个Magike系统,各种缓存,非常快。但是随着经验的增多,我总结出一个道理,代码结构的合理化比执行速度的优化更重要。

怎么说呢,就好像我买了个电脑,速度确实慢点,但它接口很全,等硬件升级了我再换上去就行了。

为啥不用缓存,首先,Typecho是有插件机制的,插件里如果修改了数据库里的数据,要怎么更新缓存,它怎么知道要更新哪些缓存,如果其它插件还写入了缓存,是不是也要更新,那这个系统就复杂了。所以我把这个选择交给了用户,用户知道哪些用户需要缓存,自己写个插件缓存起来就行了。

而且,我把所有取数据的接口都暴露为一个统一的从数据库取出,到时候系统慢了,我只需要解决数据库就行了,比如我刚才说的query cache,它在MyISAM里是表级的,在InnoDB里是行级的。一个简单的机制就应付掉大量的缓存设计,我觉得有时候不设计比过度设计要好。

wordpress慢不是因为查询多,那几个查询还真不多,而且大部分都被缓存了。它慢是因为要加载的文件多,占内存,解析时间长。

Typecho是我7年前的作品,从设计之初到现在核心基本没变过,一个原因是变化大了用户要喊,另一个原因是基本还能应付需求。但它的设计肯定是有许多问题的,不过是在程序架构上的问题。

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 10:02
Way.So
基于种种原因,花了两天时间,全新开发了一套系统,将Windows平滑替换...

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 10:22
arest
基于种种原因,花了两天时间,全新开发了一套系统,将office平滑替换...

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 12:15
xiqingongzi
arest 写了:基于种种原因,花了两天时间,全新开发了一套系统,将office平滑替换...

同样觉得这句最吊!

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 13:59
Jr
基于种种原因,花了两天时间,全新开发了一套系统,将屌丝平滑替换...

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 22:11
13畅游
joyqi 写了:1。rss的标准没有什么错误

2。数据库的查询没这么可怕,mysql有query cache,对于分类和标签这种不经常变化的数据,这些查询都是从内存里fecth的

3。不知道说的是哪个功能

这让我想到,我在Typecho之前写过一个Magike系统,各种缓存,非常快。但是随着经验的增多,我总结出一个道理,代码结构的合理化比执行速度的优化更重要。

怎么说呢,就好像我买了个电脑,速度确实慢点,但它接口很全,等硬件升级了我再换上去就行了。

为啥不用缓存,首先,Typecho是有插件机制的,插件里如果修改了数据库里的数据,要怎么更新缓存,它怎么知道要更新哪些缓存,如果其它插件还写入了缓存,是不是也要更新,那这个系统就复杂了。所以我把这个选择交给了用户,用户知道哪些用户需要缓存,自己写个插件缓存起来就行了。

而且,我把所有取数据的接口都暴露为一个统一的从数据库取出,到时候系统慢了,我只需要解决数据库就行了,比如我刚才说的query cache,它在MyISAM里是表级的,在InnoDB里是行级的。一个简单的机制就应付掉大量的缓存设计,我觉得有时候不设计比过度设计要好。

wordpress慢不是因为查询多,那几个查询还真不多,而且大部分都被缓存了。它慢是因为要加载的文件多,占内存,解析时间长。

Typecho是我7年前的作品,从设计之初到现在核心基本没变过,一个原因是变化大了用户要喊,另一个原因是基本还能应付需求。但它的设计肯定是有许多问题的,不过是在程序架构上的问题。


写在前面:这是我对Typecho的个人看法,纯属个人意见,也是希望typecho能够越办越好,虽然现在我已经不用typecho了...
这是我的原话,我没有任何要攻击typecho的意思呢,只是我的一点意见,并且在文中我多次提到,我没有太过深入地研究...因为我对数据库的查询次数有癖好,也有需求(我的站不是单纯的博客,会做SEO,文章数据量会很大),不过RSS那个,我在火狐、遨游试的,真心直接被当做文件了。。。火狐和遨游本身有个RSS订阅功能,一直触发不了,我将mime类型换成text/xml就成功触发了RSS订阅功能。

数据这块,我只是希望typecho能够做得更好...完全没有其他意思哈!对于大神开发的typecho,我也一直在深深的膜拜中...架构真的很好,我看过DZ的代码,因为向下兼容的原因,DZ的架构有点别扭的感觉,typecho的架构真的很好!插件功能也非常简单,上手基本上不费事情。。。

只是提一点意见,大神心里别气疙瘩。

Re: 你不得不看:我所知道Typecho的各种缺陷

发表于 : 2014年 3月 8日 22:23
muchun
一个非常简单的页面,查询数据库的次数达到34次。服务器性能差一点,你的并发一高,那么你的博客就被判死刑了。要是你的模板复杂一些,数据调用更多一点,那么搞死你的博客就是分分钟的事情....


看一个用32MB的vps使用Typecho的实例:http://forum.typecho.org/viewtopic.php?f=9&t=4733