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

2014-11-04 23:23:35 +08:00
 lincanbin
http://www.94cb.com/t/2188
性能上还是有些没达到预期,还留有不少优化余地,大家能帮我测测有什么BUG或者有什么需要改进的吗?
Github地址: https://github.com/lincanbin/Carbon-Forum
5069 次点击
所在节点    开源软件
45 条回复
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
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
2014-11-05 00:02:28 +08:00
@lincanbin

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

无论怎么说,一天时间写出这样的论坛,挺牛的。
lincanbin
2014-11-05 00:07:20 +08:00
@raincious 不是一天,算工时的话得好几十个工时了。
然后有好多东西都是从以前那ASP的坟里挖出来了,还有以前造的一些PHP的轮子。
数据库结构从MSSQL转成MySQL,改动的地方不多。
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
2014-11-05 00:22:26 +08:00
性能上抠门点总没错,要是以后访问量要是稍微大点,这个VPS还能顶着继续用。
现在这个VPS上还挂着另一个一天十几万访问、数据库6G的网站,那个网站总体响应就高达3~20ms了。
lincanbin
2014-11-05 00:30:51 +08:00
@raincious 而且我功能上不会做太复杂,整体肯定会保持在我的可控范围内。
数据库相对目前前后端的完成度还有些过度设计了,不过就算所有设想的功能都完成,后端代码量应该也不会太大。
鉴权、弹出提示信息、数据库操作等常用操作我都封装好了,可以最大程度复用,最多等我做完了,再整体重构一次,性能肯定要排第一位。
panxianhai
2014-11-05 06:58:57 +08:00
为你的执行力和论坛的速度点赞
hjc4869
2014-11-05 07:17:19 +08:00
lincanbin
2014-11-05 09:02:51 +08:00
@hjc4869 跨平台表现不好,Windows vps 太贵。
另外我发现我域名被中国移动屏蔽了该怎么办?这个域名几年前有人买过,过期好几年后不久前又让我给买了。
hjc4869
2014-11-05 09:06:37 +08:00
@lincanbin ASP.Net跟PHP的性能真心不是一个级别的,而且现在很多便宜的KVM VPS也支持自己上传iso安装windows了。。
如果只是移动屏蔽的话,工信部投诉吧。。。
millken
2014-11-05 09:45:32 +08:00
php7都快出来了,你还用php4.
lincanbin
2014-11-05 10:02:55 +08:00
@millken 我开发机用的是PHP5.5,VPS上的是最新的PHP5.6,PHP7是实际上是PHPNG,要后年才退出,现在PHP5.6是最新的了。
lincanbin
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
2014-11-05 10:45:47 +08:00
不错,很简洁
oott123
2014-11-05 13:57:06 +08:00
这个速度真是吓的我虎躯一震…我随便连个MySQL查查数据库就50ms+了,三四毫秒简直太厉害…
lincanbin
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
2014-11-05 14:47:37 +08:00
@lincanbin DBA 确实是很重要啊……

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

难道不 force 它就不会自己判断索引么?用不用 force 差距应该不大吧?
lincanbin
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
2014-11-05 14:58:19 +08:00
楼主,你在github上的carbon程序。
我可以下载下来自己搭建一个小论坛吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/144001

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX