整站源码 网站源码 ·

Xiuno BBS 4.0.4 正式版发布

一、什么是 Xiuno BBS 4.0?

它是一款国产、小巧、稳定、支持在大数据量下仍然保持高负载能力的轻论坛。它只有 20 多个表,源代码压缩后 1M 左右,运行速度非常快,处理单次请求在 0.01 秒级别,在有 APC、Yac、XCache 的环境下可以跑到 0.00x 秒,对第三方类库依赖少,作者认为它就像一辆纯手工打造的法拉利,动力强劲,没有一丝赘肉,方便部署和维护,是一个非常好的二次开发的基石。

Xiuno BBS 4.0 采用 Bootstrap 4 + JQuery 3 作为前端类库,全面支持移动端浏览器;后端 XiunoPHP 4.0 支持了 NoSQL 的方式操作各种数据库,这个版本是一个巨大的飞跃。

Xiuno 发音“修罗”,英文为 Shura,在佛教里面为六道之一"修罗道",处于人道和天道之间。

Xiuno BBS 4.0 采用 MIT 协议发布,您可以自由修改、派生版本、商用而不用担心任何法律风险(修改后应保留原来文件的版权信息)。

二、漫长的等待:近两年

让各位同学们久等了,这次延迟的锅主要应该由 Bootstrap 4 来背(果断甩锅老外),我们跟踪它的版本经历了: alpha 3,4,5,6, beta1,2,3一年多,等到后面以为出不来了,还好虽然正式版终于出来了,正好同步发布!

 

而 Xiuno BBS 也经历了 1,2,3,4 的蜕变,期间我们也做过了很多尝试,最终产品形态和代码风格定型为当前形态。

后端采用自己的框架 XiunoPHP,面向对象封装底层,屏蔽 DB CACHE API 差异,应用层采用函数风格调用。

最后它看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include "./xiunophp/xiunophp.min.php";
include "./model/user.func.php";
// 读取一个用户资料
$user = user_read(123);
// 更新一条用户资料
$r = user_update($uidarray('email'=>'xxx@gmail.com'));
// 删除一个用户
$r = user_delete($uid);
// 创建一个用户
$r = user_create(array('uid'=>1, 'gid'=>1, 'email'=>'xxx@gmail.com'));
// 查找一批用户
$userlist = user_find_by_gid($gid);
?>

没有 UserControl extends BaseControl 这样的继承,没有异常等高科技,回归本质,只是本本分分的写代码,让新人可以平滑的进入,而不像某些自称优美的框架,实际上学习成本高,远离了 PHP 简单高效的初衷。

因为后院的安定,使得我们可以把更多精力放到了产品的形态改造之上。

二、产品形态:轻论坛

在产品的形态方面,我们也摸索了很多种形式,最终我们定型为轻论坛,支持一维的板块,多维的主题分类(插件),自适应同时支持 PC 和手机,不搞全站无刷新。

最早我们针对手机和 PC 写了2套前端代码,发现后面维护相当的麻烦,一致性问题是个很严重的问题,随着时间的流失,当模板中的逻辑出现差异的时候,你不知道那边是对的。后来我们又针对宽屏尝试了三列布局,还有 AJAX 全站无刷新尝试...... 趟过了如此多的坑,最终我们发现 Bootstrap 4 给了我们最终的答案,响应式布局+跳转,平衡了用户体验和开发维护难度。(话说 Bootstrap 4 的 Flex 都应用都成熟了,Twitter 官方网站还一大坨 float style)

Xiuno BBS 4.0 正式版最后的 PC 界面:

手机版:

三、前端:Bootstrap 4 全球生态

我们遵照 Bootstrap 4 的 UI 规范,基本上没有写过 style,尽量用 class 搞定。另外 flex 布局的加入,确实方便了很多。比如页脚底部对齐,在语义不变的情况下很轻松就搞定了。Bootstrap 4 的全球生态链未来肯定也会惠及 Xiuno,这点是毋庸置疑的。比如插件的编写可以直接使用 BS 的现成的控件和引入基于 BS 开发的模块。

来看看 Bootstrap 带来了哪些方便的特性:

3.1 Flex 布局,.col 自适应宽度:

https://getbootstrap.com/docs/4.0/layout/grid/

3.2 标准化控件:

更多请自行了解:https://getbootstrap.com/docs/4.0/getting-started/introduction/

在使用 SCSS 后制作风格效率大大提高,例如红色模板,只花了大约十分钟时间:

此次同步发布了三套免费模板:

分别对应三种不同的风格制作方式, 最简单的 css overwrite,到 SCSS 编译,详细的教程随后会出来,有经验的打开插件目录看下就懂了。另外理论上还有未来海量的 BS4 全球生态带来的各种组件和风格可用。

链接:如何玩转 CSS3、SASS、Xiuno 4.0 模板风格?

四、性能方面

Xiuno 最早诞生就是为了解决负载问题,这个基因不会变,2.1 用力过猛,4.0 往回收了收,更多让位给了易读性和可维护性。性能和安全、复杂度是矛盾的,我们尽量降低业务、代码、数据库设计等多方面的复杂度。在表的设计上,非常注重索引和缓存的使用。这里面有一个平衡性问题,经过了反复调整,最后找到了一个比较完美的尺度。

比如,拿置顶帖这个功能来说,一般会这么设计表结构

1
2
3
4
5
6
7
CREATE TABLE bbs_thread(
    fid int(10),    
    tid int(10),
    top tinyint(3),
    KEY(fid, tid),
    KEY(fid, top,tid)
);

查询的时候,一条SQL搞定:

1
SELECT FROM bbs_thread WHERE fid=1 ORDER BY top DESC, tid DESC LIMIT 0, 10;

简单粗暴是不是?但是在数据量特别大,并发请求高的时候,这样就会有性能问题。假定数据量有 1000w,置顶帖子不超过10个,为了照顾这 10 个帖子,我们要对 1000w 主题进行排序,是不是太浪费?所以正确的做法是,小表。

1
2
3
4
5
6
7
8
9
CREATE TABLE bbs_thread_top(
        fid int(10),
        tid int(10),
        top tinyint(3),
        KEY (fid)
)
SELECT FROM bbs_thread WHERE tid IN(SELECT tid FROM bbs_thread_top);
SELECT FROM bbs_thread WHERE fid=123 ORDER BY tid DESC LIMIT 0, 10;
# PHP 合并两条结果

我们用一个小表来降低大表的负载,虽然业务逻辑会变的复杂一点,但是很好的照顾到了性能。

SQL 并不是写的越长水平越高,看到 DBA show SQL 语句,程序员如果也盲从就暴漏智商了,要明白你们不是一群生物,需求不一样。

相关下载

点击下载

参与评论