V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lincanbin
V2EX  ›  开源软件

以前的一个 ASP 论坛,现在用 PHP 重构了小半了,基本功能都差不多了

  •  1
     
  •   lincanbin · 2014-11-04 23:23:35 +08:00 · 5097 次点击
    这是一个创建于 3706 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://www.94cb.com/t/2188
    性能上还是有些没达到预期,还留有不少优化余地,大家能帮我测测有什么BUG或者有什么需要改进的吗?
    Github地址: https://github.com/lincanbin/Carbon-Forum
    45 条回复    2016-09-30 11:33:07 +08:00
    raincious
        1
    raincious  
       2014-11-04 23:47:07 +08:00
    1、速度非常之快,1毫秒左右的速度已经足够的快了,按照我的看法是如果数据库设计没问题那么程序没必要继续优化(速度方面)。

    2、我看了下你现在的文件,具体是这个: https://github.com/lincanbin/Carbon-Forum/blob/master/register.php

    这样的话……感觉你重构好那个ASP的紧接着就得重构这个……

    建议上MVC结构开发,这样虽然性能可能会有损失,但是维护会非常方便。
    lincanbin
        2
    lincanbin  
    OP
       2014-11-04 23:52:08 +08:00
    @raincious 前后端分离就够了,反正就我一个人在做,我连PHP框架都没敢用就怕10%~30%的性能损失,还有前端Bootstrap也有太多冗余代码我也没用,以后还打算把jQuery剔掉或者根据需求精简。

    然后多重if嵌套的风格其实我也想过,但是这种嵌套方法是效率最高的。

    例如
    if(XXX1){
    $Message = 'XXX1';
    }
    if(XXX2){
    $Message = 'XXX2';
    }
    if(XXX3){
    $Message = 'XXX3';
    }

    最后再来
    if($Message)
    {
    #注册操作
    }
    这样写起来好看一些,但是性能有一点点损失。
    raincious
        3
    raincious  
       2014-11-05 00:02:28 +08:00
    @lincanbin

    可能你现在项目尺寸不大,所以没有这方面的感觉。等需要的时候你自己就重构了 :D。

    无论怎么说,一天时间写出这样的论坛,挺牛的。
    lincanbin
        4
    lincanbin  
    OP
       2014-11-05 00:07:20 +08:00
    @raincious 不是一天,算工时的话得好几十个工时了。
    然后有好多东西都是从以前那ASP的坟里挖出来了,还有以前造的一些PHP的轮子。
    数据库结构从MSSQL转成MySQL,改动的地方不多。
    raincious
        5
    raincious  
       2014-11-05 00:12:36 +08:00
    @lincanbin

    另外,如果你用框架的话,性能“损失”可能会大于30%。肯定达不到你目前平均小于5ms的速度。我自己的框架不带数据库出页面(路由->控制器->渲染页->输出)最快也需要3ms,这还是PHP 5.5带极限配置的Opcache的情况。

    建议不要过度“微优化”,不值得。因为你挖空心思优化出的结果可能一天下来加起来也就能节省几分钟时间(流量小的话,可能只有几秒)。

    下面是一份很老的测试数据,只需要注意其中的例外情况(红色)就可以了:
    http://maettig.com/code/php/php-performance-benchmarks.php
    lincanbin
        6
    lincanbin  
    OP
       2014-11-05 00:22:26 +08:00
    性能上抠门点总没错,要是以后访问量要是稍微大点,这个VPS还能顶着继续用。
    现在这个VPS上还挂着另一个一天十几万访问、数据库6G的网站,那个网站总体响应就高达3~20ms了。
    lincanbin
        7
    lincanbin  
    OP
       2014-11-05 00:30:51 +08:00
    @raincious 而且我功能上不会做太复杂,整体肯定会保持在我的可控范围内。
    数据库相对目前前后端的完成度还有些过度设计了,不过就算所有设想的功能都完成,后端代码量应该也不会太大。
    鉴权、弹出提示信息、数据库操作等常用操作我都封装好了,可以最大程度复用,最多等我做完了,再整体重构一次,性能肯定要排第一位。
    panxianhai
        8
    panxianhai  
       2014-11-05 06:58:57 +08:00 via iPad
    为你的执行力和论坛的速度点赞
    hjc4869
        9
    hjc4869  
       2014-11-05 07:17:19 +08:00 via iPhone
    lincanbin
        10
    lincanbin  
    OP
       2014-11-05 09:02:51 +08:00 via Android
    @hjc4869 跨平台表现不好,Windows vps 太贵。
    另外我发现我域名被中国移动屏蔽了该怎么办?这个域名几年前有人买过,过期好几年后不久前又让我给买了。
    hjc4869
        11
    hjc4869  
       2014-11-05 09:06:37 +08:00
    @lincanbin ASP.Net跟PHP的性能真心不是一个级别的,而且现在很多便宜的KVM VPS也支持自己上传iso安装windows了。。
    如果只是移动屏蔽的话,工信部投诉吧。。。
    millken
        12
    millken  
       2014-11-05 09:45:32 +08:00
    php7都快出来了,你还用php4.
    lincanbin
        13
    lincanbin  
    OP
       2014-11-05 10:02:55 +08:00
    @millken 我开发机用的是PHP5.5,VPS上的是最新的PHP5.6,PHP7是实际上是PHPNG,要后年才退出,现在PHP5.6是最新的了。
    lincanbin
        14
    lincanbin  
    OP
       2014-11-05 10:25:00 +08:00
    @hjc4869 开源项目的话,还是要方便部署的好,Windows VPS用的人不多。
    网络上最常见的虚拟主机又是PHP+MySQL,不然的话,本来Python也和PHP一样是跨平台的——本来有打算用Python。
    另外性能的话,等我下次换VPS,装上Facebook的HHVM(现在的VPS是CentOS 5),应该有机会跑进1ms,到时候超越ASP.Net应该不是问题。
    sujin190
        15
    sujin190  
       2014-11-05 10:45:47 +08:00
    不错,很简洁
    oott123
        16
    oott123  
       2014-11-05 13:57:06 +08:00 via Android
    这个速度真是吓的我虎躯一震…我随便连个MySQL查查数据库就50ms+了,三四毫秒简直太厉害…
    lincanbin
        17
    lincanbin  
    OP
       2014-11-05 14:43:22 +08:00
    @oott123 合理利用索引,避免使用冗余度过高的开发框架,合理设计架构就能达到这个速度。

    例如v2ex,分页时就没用上索引,你注意v2ex这一页的底部执行时间,明显就没有用上索引
    http://v2ex.com/recent?p=5000
    你再看看我写的sql语句: https://github.com/lincanbin/Carbon-Forum/blob/master/index.php

    我的DBA经验全堆这上面了,当然,这里还有很多优化余地,以后架构定型再重构一次。
    oott123
        18
    oott123  
       2014-11-05 14:47:37 +08:00
    @lincanbin DBA 确实是很重要啊……

    我仔细研究了下你的 SQL,似乎除了 `force index(LastTime)` 之外和我自己写的区别也不大的样子。

    难道不 force 它就不会自己判断索引么?用不用 force 差距应该不大吧?
    lincanbin
        19
    lincanbin  
    OP
       2014-11-05 14:53:12 +08:00
    @oott123 是这句
    SELECT * FROM '.$Prefix.'topics force index(LastTime) WHERE LastTime<=(SELECT LastTime FROM '.$Prefix.'topics ORDER BY LastTime DESC LIMIT '.($Page-1)*$Config['TopicsPerPage'].',1) and IsDel=0 ORDER BY LastTime DESC LIMIT '.$Config['TopicsPerPage'

    mysql的limit这样加入一个子查询,就能避免扫描页数少于当前页的列,这是limit的一个缺陷,我用子查询补上了
    linfox
        20
    linfox  
       2014-11-05 14:58:19 +08:00
    楼主,你在github上的carbon程序。
    我可以下载下来自己搭建一个小论坛吗?
    lincanbin
        21
    lincanbin  
    OP
       2014-11-05 15:00:23 +08:00
    @linfox 当然可以,是Apache License。
    不过建议再等一两个星期,这个目前只能算半成品,连自动化安装我都还没写。
    linfox
        22
    linfox  
       2014-11-05 15:02:36 +08:00
    @lincanbin

    恩。谢谢啦。

    我刚刚上了一下,非常喜欢。很简洁很快。
    oott123
        23
    oott123  
       2014-11-05 15:03:49 +08:00
    @lincanbin 原来如此,学习了。
    kmvan
        24
    kmvan  
       2014-11-05 15:05:04 +08:00
    Processed in 0.753 ms, 1 SQL Queries

    为啥1个sql查询量已经要700多毫秒呢。。。那如果;并发量10个人的话,不就打开页面要等7秒?
    lincanbin
        25
    lincanbin  
    OP
       2014-11-05 15:06:04 +08:00
    @kmvan 注意单位,这是差不多1ms吧
    raincious
        26
    raincious  
       2014-11-05 15:06:19 +08:00
    @kmvan 因为你走神的少看了个m……
    kmvan
        27
    kmvan  
       2014-11-05 15:06:57 +08:00
    发现个经典问题,就是 margin 重叠问题。lz 的论坛设计中经常用到 margin 重叠,这个不好控制,容易出现意料不到的问题,不易于后续的维护和第三方插件开发啊。。
    kmvan
        28
    kmvan  
       2014-11-05 15:07:42 +08:00
    @lincanbin 注意单位,这是差不多1ms吧
    @raincious 因为你走神的少看了个m……
    kmvan
        29
    kmvan  
       2014-11-05 15:08:04 +08:00
    @lincanbin 注意单位,这是差不多1ms吧
    @raincious 因为你走神的少看了个m……

    我去,这速度略屌啊。。。。我错了
    lincanbin
        30
    lincanbin  
    OP
       2014-11-05 15:14:29 +08:00
    @kmvan 页面层次已经尽量少了,div嵌套差不多就两三层吧,比bootstrap少太多了,后期问题应该不会太大。
    等差不多做出成品了,我再重构一次前端。
    fkccp
        31
    fkccp  
       2014-11-05 18:47:17 +08:00
    哪家的vps啊速度这么快~~
    lincanbin
        32
    lincanbin  
    OP
       2014-11-05 18:54:49 +08:00 via Android
    @fkccp 洛杉矶的一家VPS,好像只有一个人在管,256内存,512突发,1核心,HDD 硬盘,价格比DO 还便宜一些。
    我觉得不怎么快,那家超售严重,还没SSD 。
    快大概是因为我页面控制得足够小?
    kmvan
        33
    kmvan  
       2014-11-05 19:25:58 +08:00
    我下载后安装了,在二级目录下访问 http://xxxx/bbs/index.php ,报错
    ( ! ) Warning: include(layout.php): failed to open stream: No such file or directory in \bbs\common.php on line 101

    $TemplatePath 是 null 值- -
    lincanbin
        34
    lincanbin  
    OP
       2014-11-05 19:34:41 +08:00 via Android
    @kmvan 目前暂时不支持二级目录访问,不过我留了接口,下个版本接上就是
    lincanbin
        35
    lincanbin  
    OP
       2014-11-05 19:39:59 +08:00
    @lincanbin 要放在二级目录,你要:
    1. .htaccess里的RewriteBase /改为RewriteBase /bbs/
    2. MySQL carbon_config表,WebsitePath改为/bbs
    LoadJqueryUrl改为/bbs/static/js/jquery.js
    lincanbin
        36
    lincanbin  
    OP
       2014-11-05 19:51:01 +08:00
    @kmvan @ 错了
    要放在二级目录的话,你要:
    1. .htaccess里的RewriteBase /改为RewriteBase /bbs/
    2. 打开MySQL的carbon_config表,根:
    将ConfigName为WebsitePath的那一行的ConfigValue改为/bbs
    将ConfigName为LoadJquery的那一行的ConfigValue改为/bbs/static/js/jquery.js
    kmvan
        37
    kmvan  
       2014-11-05 19:59:45 +08:00
    话说我稍微认真看了一下论坛的源码,发现……
    令我最惊叹的是,lz 居然能写出这么多层 if else 嵌套而不头晕!真心赞
    不过可能是因为追求 TOP speed 的缘故吧,感觉程序没有插件或扩展机制,通用性和接口都不够强啊。
    可能因为我是 wp 开发者,用 wp 的标准来看待了:)
    lincanbin
        38
    lincanbin  
    OP
       2014-11-05 20:05:25 +08:00
    @kmvan 不打算给插件或者扩展机制,要这样不如直接用Discuz !
    lincanbin
        39
    lincanbin  
    OP
       2014-11-05 20:10:17 +08:00
    @kmvan 还好是用PHP,要是用Python,没有原生的switch实现,那这种嵌套写起来就要蛋疼了

    https://github.com/lincanbin/Carbon-Forum/blob/master/manage.php
    linfox
        40
    linfox  
       2014-11-21 15:38:12 +08:00
    @lincanbin


    楼主,你的网站重构的怎么样了?
    lincanbin
        41
    lincanbin  
    OP
       2014-11-21 17:58:20 +08:00   ❤️ 1
    @linfox 能用了,直接下载https://github.com/lincanbin/Carbon-Forum/archive/master.zip
    即可
    linfox
        42
    linfox  
       2014-11-21 19:04:55 +08:00
    @lincanbin


    太感谢了!!
    lincanbin
        43
    lincanbin  
    OP
       2014-11-21 19:07:02 +08:00
    @linfox 要用自动推荐话题功能的话,还有一个数据库拓展包
    http://www.94cb.com/t/2199
    linfox
        44
    linfox  
       2014-11-21 19:07:51 +08:00
    @lincanbin

    恩。

    这个暂时不需要,就要一个简单的!
    scyuns
        45
    scyuns  
       2016-09-30 11:33:07 +08:00 via Android
    佩服
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.