对于最终用户 - end users 来说, 评估论坛效率主要包含两个方面, 一是执行时间 Process Time, 就是下面 0.0x 那个标注, 二是数据库请求次数, 及下面 4 queries 那个标注.
执行时间只和服务器有关, 和用户的网络状况无关, 无论你是用 56K 还是 T1 专线上论坛, 都不会影响执行时间.
执行时间 Process Time 又基本分为三个主要组成部分:
(1) PHP 脚本执行时间
(2) mysql 数据库请求往返的开销
(3) 页面输出时间.
这里首先阐明两件实事:
一. 某些论坛产品会在执行时间上作假 (故意的或者非故意的), 没有包括 (3), 或者只包括了 (1) 的一部分, 这样执行时间看起来会很快, 但是实际上效率却很低. 这里举一个例子, Celeste 2003 / 2004 就属于这种情况. (非故意行为, 由于其采用全推式的模板系统, 无法正确统计指标 (3))
二. 如果全部统计了以上三项指标, 一个正常页面在 1.5 G 机器上的执行时间极限就是 0.01 左右, 如果某个论坛标注出 0.003 这样的执行时间, 除了作假, 我们只能假设他是在 "深蓝" 或者 "银河" 系列超级服务器上跑出来的了..
话说回来, 以上三项指标中, 第二项非常重要, 你的论坛能否支撑数千人甚至上万人很大程度上取决于这个指标. 而 (2) 又和第一段中所说的数据库请求次数 ? queries 有关. 如果某个经常打开的页面 (例如看贴子) 其执行时间为 0.008xxx, 但是却有 10 多个 queries. 那我保证在人多的情况下这个页面效率下降是最迅速的.
一台 P3 * 2 的机器能够容忍的 mysql 请求总量大约为平均一秒钟 200 次(SQL 平均复杂程度下), 这时候已经非常慢了. 一秒钟 200 次是个什么概念呢, 大约就是 1000 个人在线的 vbb 论坛 (30 分钟统计) 的极限 query 次数. 所以我们说 vbb 的效率很差就是这个原因, 他主要页面的 query 次数大约都是以 10 为基数, 如果每一秒钟内都有 20 个人同时刷新页面, 那服务器卡是意料之中的事情.
那么是否数据库请求的 query 次数越少就一定越好呢 ?
这不一定, 他还要取决于 query 的复杂程度, 比如做一个查看贴子的动作, 论坛会请求一个 SQL 如下, SELECT a FROM b LEFT JOIN c LEFT JOIN d LEFT JOIN e..... WHERE... 可以看出这个 query 中有很多 LEFT JOIN 语句, 做了很多表的连接, 连接越多, 速度越慢, vbb 大约会做出 5 ~ 7 个 LEFT JOIN, celeste 2004 是 4, 5 个, 国内的论坛像 phpwind, discuz 似乎都是 2 ~ 4 个, 效率差距一看即可明白.
一个系统的设计是一件很科学的事情, 要在 query 次数和各类查询复杂程度上做一个平衡.
我个人认为像 phpwind 论坛那样过渡宣扬 query 次数少的行为没有意义. 首先撇开 phpwind 写得让业内人士笑掉大牙的代码格式不说, 为了减少 query 次数, phpwind 用了一种文本数据库格式, 实际上就是以读磁盘文件来代替 mysql query, 当磁盘文件不大的时候效率尚可, 当文件很大的时候惨不忍睹. 例如 phpwind 用文本来记录论坛在线列表(非索引模式), 若一个论坛只有 200 人在线, 那么这个文本大约就有 200 行, 读取是很快的. 但如果一个论坛有 6000 人在线呢 ? 呵呵, 不知道原作者有没有考虑到这个问题 ?
本人参与管理大型论坛很久了, 为了效率问题, 先后换过很多论坛系统(掏钱买的正版), 对其中的利弊深有体会, 对于目前流行的 php 论坛, 从用户和程序员两个角度来说, 比较欣赏的只有两个, 一个是 discuz (代码格式不错, 看起来舒服, 有一些先进的理念, 速度也快), 另外一个是 celeste 2004 (核心代码赏心悦目, oop 思想十分优越, 可惜 bug 太多, 速度稍慢), 其余碌碌, 尤其是那个 xxx wind.. 简直不入法眼.. 呵呵.. (很难想象缩进书写都不规范的程序还能拿出来卖)
[ Last edited by LostButterfly on 2004-9-23 at 12:04 PM ] |