XIUNO BBS稳定版本 主程序下载 XiunoPHP

四叶草创始人 迷途 9月前 362

什么是 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 协议发布,您可以自由修改、派生版本、商用而不用担心任何法律风险(修改后应保留原来文件的版权信息)。


产品形态:轻论坛

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

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


前端:Bootstrap 4 全球生态

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



性能方面

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 语句,程序员如果也盲从就暴漏智商了,要明白你们不是一群生物,需求不一样。

像这样的设计原则和平衡,在 xiuno 里随处可见。

另外我们坚持用 SELECT * 而不写长条字段,也是有原因的,因为我们可以在中间加入缓存。比如用户数据,我们按条去,按条缓存,在开启 memcached, yac 后,中间的这些 SQL 都消失了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 从缓存中读取,避免重复从数据库取数据,主要用来前端显示,可能有延迟。重要业务逻辑不要调用此函数,数据可能不准确,因为并没有清理缓存,针对 request 生命周期有效。
function user_read_cache($uid) {
        global $conf$g_static_users;
        if(isset($g_static_users[$uid])) return $g_static_users[$uid]
        // 游客
        if($uid == 0) return user_guest()
        if($conf['cache']['type'] != 'mysql') {
                $r = cache_get("user-$uid");
                if($r === NULL) {
                        $r = user_read($uid);
                        cache_set("user-$uid"$r);
                }
        else {
                $r = user_read($uid);
        }
        $g_static_users[$uid] = $r $r : user_guest()
        return $g_static_users[$uid];
}

在 PHP 的性能方面,要注意的也很多,比如要尽量减少 IO 密集型和 CPU 密集型相关函数的使用,循环的深度和次数等等,有机会我会展开说。


安全方面

不用再担心被 Webshell,SQL 注射等这些问题困扰。xiuno 在安全方面一直很注重,经过了多年的实战检验,作者经常接触安全圈,熟悉常见攻击手段,国内知名社区看雪安全论坛采用的就是 xiuno BBS 4.0,目前还未出现过什么安全问题。xiuno 的参数经过了严格的类型过滤,拼接 SQL 的相关函数也严格进行了转义,正常写是不会有什么安全问题的。

但是,安全问题是一个综合问题,框架层面只能保证最基础的,最终还是要靠安全意识来保障,比如弱密码,越权等问题,信息泄露,旁注等,谁也不敢说自己是百分之百安全,不能说你家防盗门结实就是安全的,窗户,通风管道,都有可能成为突破口。插件可能会成为一个软肋,不要随便安装第三方作者开发的插件,除非第三方作者有较好的安全意识,或者插件被官方认证过。

以下为参数过滤、数据库传参的范例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
include './xiunophp/xiunophp.min.php';
 
// 安全的参数获取方式:
$uid = param('uid', 0);     //  整形类型,默认 0
$name = param('name''');       // 默认为字符串,并且默认会做 XSS 过滤
$arr = param('ids'array(0));     // 数组类型,元素为整形,默认 0
$word = param_word('word', 32);     // 默认获取单词类型,长度 32
$s = param_base64('filedata', 1000000);    // base64 类型的数据
$arr = param_json('arr');     // json 格式的数据
 
// 送入 db 层
db_create('user'array('uid'=>123, 'email'=>'xxx@gmail.com'));
db_update('user'array('uid'=>123), array('email'=>'yyy@gmail.com'));
db_delete('user'array('uid'=>123)); 
 
?>


对 HTTPS / CDN 支持

部署 https 不需要修改任何代码和配置。

对市面各种 CDN 兼容性完好,同时感谢可靠云免费给修罗官方提供支持,使用这段时间来很稳定,免费还支持 HTTPS。

如何配置HTTPS: xiuno.com/thread-18004.htm" target="_blank" title="http://bbs.xiuno.com/thread-18004.htm" _href="http://bbs.xiuno.com/thread-18004.htm">http://bbs.xiuno.com/thread-18004.htm


未来:不可知

从刚开始只需要考虑 IE6 到浏览器百花齐放,到 CHROME 一统江湖,到移动端大潮,到 AI、区块链 ......

未来是 React 的?还是 VUE ? 还是小程序?还是 Web Asambley?还是 C++11 / QT?go ? 还是其他?

这个问题我想时间会给我们答案,目前重要的是,我们要把眼前的事情做到足够好。


感谢各位开发者和站长的支持,不厌其烦的反馈八哥,给修罗提建议,没有你们,就没有修罗。

最后感谢 CCTV,不敢想象假如没有 CCTV,我们该如何树立正确的人生观世界观?如何正确的编写代码?

系统官网:bbs.xiuno.com

上传的附件:

最新回复 (4)
  • 论坛常客 zhang 9月前
    引用 2
    不是最新版吧,我那个问题你记得手动改改。
  • 四叶草创始人 迷途 9月前
    引用 3
    zhang 不是最新版吧,我那个问题你记得手动改改。
    不是最新的, 这个是最稳定的版本,应该是这次更新的前一个版本,我保存一下~
  • 论坛常客 zhang 9月前
    引用 4
    最近更新的就那个问题,不知作者为啥注释掉了,可能改什么给忘了。
  • 四叶草创始人 迷途 9月前
    引用 5
    zhang 最近更新的就那个问题,不知作者为啥注释掉了,可能改什么给忘了。
    不晓得~   我这边一直都用稳定版开发制作~~ , 今天争取吧 众筹功能做出来, 这样你们就可以在四叶草 提功能, 然后我来众筹~
返回
Title - Artist
0:00
    [复制本页网址]
    Date...
    *四叶草提供天气查询