本来如果不是进入新公司,我可能不会再用Win来做开发.但是既然来了,我要主动学习新公司的规则.
然而”拥抱变化”是如此地吃力.三天过去了,我居然整不到一个好用的终端来通过ssh2连接到bsd服务器上进行开发.
首先当然是用Putty.这是一个免费的,据称非常非常牛的终端软件.
然而连上去我就晕了,不支持多标签编辑:我需要在n个server中间换来换去,现在同时开n个putty显然很不好,而且,我需要一个类似”站点管理器”类似的东西,它的那个进行多个会话的设置管理的功能太不好用了.另外,putty的复制粘贴功能用着极不爽,一点鼠标就自动把剪贴板的内容粘上去了,非常不爽.
再是SecureCRT.这是终端软件的老大,收费的.公司严令禁止用盗版,我也没试.注定只能私下用一下,如果用的人多的话,可以申请公司购买.不过我以前用过crack版的,仍然不好用:字体什么的设置太不舒服了,另外不知道为什么默认是没有多种颜色显示的.要知道用Vim编辑时没有颜色是多么难受(我向很多只用vi的人保证,当您用上花花绿绿的vim后,再也不想回去黑白两色的vi了).SecureCRT不知道怎么就把这个给我阉割了,让我掏钱买,很难!
师兄给我推荐了一款东洋鬼子的好东东,叫Poderosa,需要dotnet2.0 Framework,开源,免费,多标签编辑,字体也很漂亮,简直就要把它当做linux下的Konsole了,结果最后发现一个很郁闷的问题:中文不支持!也不是完全不能输入中文,但是大部分情况下输入中文会得到一些空格.所以,虽然我用它用了很长时间,还是决定换!
…. 继续在SF.net上找了很久,还是找不到一个应手的!
看来只能申请装一个Linux了.konsole,terminal用起来都不错…. 而且
新公司上班2天了。 第一次进入这样牛、这样大规模的技术公司,还真有点不适应。因为之前我不是自己做主管,管着公司唯一一台服务器,就是直接拿到所有机器的root帐号了,现在我只是一个大机器上的一个小螺丝,哈哈,所以一切都得先申请,什么帐号都没有,不过现在所有帐号都全了,还真不少,我专门把所有密码都记下来了。
大公司也有不少让人感觉特爽的地方(其实关键不是大,而是这么一个大公司办事速度如此快,让人感觉挺爽的)。入职第一天,我就拿到了办公用品,工卡,电脑也在当天下午为我装好了,域帐号什么的全设置好了。第二天饭卡和办公位上的贴姓名的牌儿也好了。下午我觉得用windows挺不爽的(关键是,没有一个好的终端工具,putty弱了点儿,secureCRT没正版,也不太好用,老覃给了一个比较好的东东,还是免费的,但是对中文支持不好,还时不时地出小毛病,我就怀念,microsoft大叔能不能把dos做好用点),于是写了封邮件给IT部门,申请看能不能让我装个linux,这样我就不用编辑器也要下载,终端要下载,感觉什么软件都要下载了…只要我想用的就一定需要专门下载,而且在公司里还不能用盗版,这就让我很为难了…),15分钟后我收到了IT部门同事的回复,速度真快,很不错。
就是比国企快啊。
我的师兄,从某种程度上说也是我php方面的师父,和他的同事做了测评,分别是针对php4,php5的性能对比和function,class的性能对比的。 这里是师兄的对比结果 师兄的同事做的测评 但是我不认为用ab来做出的测试是合理的.理由:用ab来测试时,结果好像总似是在跳舞一样.做为证据,我将我的notebook依文本方式重启,用ab来测lighttpd的表现. 具体环境: Haier H40S Notebook RAM:1.5G CPU:CY 1.6GHz 硬盘:60G,(具体型号什么的不清楚,列个60G表示不是SCSI硬盘) OS:Fedora Core 7.0(Moonshine) web server:lighttpd 1.4.15 测试工具:ab X环境:未运行X server 命令:ab -n 10000 -c 50 http://localhost:8181/ 第一份结果: This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Server Software: lighttpd/1.4.15 Server Hostname: localhost Server Port: 8181
Document Path: / Document Length: 345 bytes
Concurrency Level: 50 Time taken for tests: 1.786830 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Non-2xx responses: 10000 Total transferred: 4980000 bytes HTML transferred: 3450000 bytes Requests per second: 5596.50 [#/sec] (mean) Time per request: 8.934 [ms] (mean) Time per request: 0.179 [ms] (mean, across all concurrent requests) Transfer rate: 2721.58 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 3 2.6 4 8 Processing: 1 4 0.7 5 6 Waiting: 0 1 1.7 2 5 Total: 5 8 2.2 8 13 WARNING: The median and mean for the processing time are not within a normal deviation These results are probably not that reliable.
Percentage of the requests served within a certain time (ms) 50% 8 66% 10 75% 10 80% 11 90% 11 95% 12 98% 12 99% 12 100% 13 (longest request)
这里的结果是Requests per second: 5596.50 [#/sec] (mean)(插一句,lighttpd的性能真是好,用apache从来没上过3000) 第二份ab -n 10000 -c 50的结果: This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Concurrency Level: 50 Time taken for tests: 1.313719 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Non-2xx responses: 10011 Total transferred: 4985478 bytes HTML transferred: 3453795 bytes Requests per second: 7611.98 [#/sec] (mean) Time per request: 6.569 [ms] (mean) Time per request: 0.131 [ms] (mean, across all concurrent requests) Transfer rate: 3705.51 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.0 1 5 Processing: 1 5 2.0 5 32 Waiting: 0 3 1.8 3 30 Total: 1 6 2.1 6 35
Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 6 80% 6 90% 7 95% 8 98% 10 99% 11 100% 35 (longest request)
结果表明RPS是Requests per second: 7611.98 [#/sec] (mean). 第三份结果: This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Concurrency Level: 50 Time taken for tests: 1.300247 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Non-2xx responses: 10009 Total transferred: 4984482 bytes HTML transferred: 3453105 bytes Requests per second: 7690.85 [#/sec] (mean) Time per request: 6.501 [ms] (mean) Time per request: 0.130 [ms] (mean, across all concurrent requests) Transfer rate: 3743.14 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.0 1 5 Processing: 1 4 1.4 5 11 Waiting: 0 2 1.1 3 8 Total: 1 6 1.2 6 14
Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 6 80% 6 90% 7 95% 9 98% 10 99% 11 100% 14 (longest request)
RPS结果是Requests per second: 7690.85 [#/sec] (mean). 第四份结果是: This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Concurrency Level: 50 Time taken for tests: 1.315784 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Non-2xx responses: 10033 Total transferred: 4996434 bytes HTML transferred: 3461385 bytes Requests per second: 7600.03 [#/sec] (mean) Time per request: 6.579 [ms] (mean) Time per request: 0.132 [ms] (mean, across all concurrent requests) Transfer rate: 3708.06 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 1.2 1 8 Processing: 1 4 1.4 5 11 Waiting: 0 2 1.1 3 8 Total: 1 6 1.4 6 15
Percentage of the requests served within a certain time (ms) 50% 6 66% 6 75% 6 80% 6 90% 7 95% 9 98% 11 99% 12 100% 15 (longest request)
结果是Requests per second: 7600.03 [#/sec] (mean). 第五份结果是: This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Concurrency Level: 50 Time taken for tests: 1.812989 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Non-2xx responses: 10000 Total transferred: 4980000 bytes HTML transferred: 3450000 bytes Requests per second: 5515.75 [#/sec] (mean) Time per request: 9.065 [ms] (mean) Time per request: 0.181 [ms] (mean, across all concurrent requests) Transfer rate: 2682.31 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 3 2.7 4 9 Processing: 1 4 0.8 5 6 Waiting: 0 1 1.7 2 5 Total: 5 8 2.3 9 13 WARNING: The median and mean for the processing time are not within a normal deviation These results are probably not that reliable.
Percentage of the requests served within a certain time (ms) 50% 9 66% 10 75% 10 80% 11 90% 12 95% 12 98% 12 99% 12 100% 13 (longest request)
RPS结果是Requests per second: 5515.75 [#/sec] (mean);
可以看到,同是ab -n 10000 -c 50 http://localhost:8181/,结果大不一样,不仅分为7600RPS和5500RPS两档,而各档中具体数据也不一样.这个结果可以理解,OS中总是会有各种各样的消息要处理,影响具体数据结果也很正常. 因此,谢华亮(sir?mm?)的测试用ab的结果来进行php4,php5的性能比较是不太对的.至少目前看来,我没有从他的文章中看到他进行了多次ab测评后取结果的平均值.但是他列出来这样一个结果: 版本 函数测试 不实例化类 实例化类 类的继承 PHP 4.4.2 1047.23/rps 1034.98/rps 1006.14/rps 992.95/rps PHP 5.2.1 1176.06/rps 1197.17/rps 1187.93/rps 1128.54/rps 这大致可以说明,php5.2确实是比php4.4.2要快.但是从1197.17>1176.06得出php5的类跑得比functiong还快,我不这么认为.只是21个request的差别,太小了,ab测试的随便一个风吹草吹就行了(而且说class比function要快,严重地伤害了我的感情,哈哈)… 嗯,先整这么多.有空好好研究一下,如何对web程序进行性能测评. 另外,有空见到这两位兄台,好好争论一番.
我又写了一个文件.再测之:
function signin() { return "null"; } class User { public function signin() { return "null"; }
} function time1() { $arr=split(" ",microtime()); return $arr[1]+$arr[0]; } $t1= time1(); for($i=0;$i<100000;$i++) signin(); $t2=time1();
for($i=0;$i<100000;$i++) User::signin(); $t3=time1();
echo " function:".($t2-$t1)."ms class:".($t3-$t2)."ms"; 这是结果: function:0.071924924850464ms class:0.23149108886719ms 为了避免程序运行顺序的影响,我们再运行一次,这次先测静态类的,再测function的: function signin() { return "null"; } class User { public function signin() { return "null"; } } function time1() { $arr=split(" ",microtime()); return $arr[1]+$arr[0]; } $t1= time1(); for($i=0;$i<100000;$i++) User::signin(); $t2=time1(); for($i=0;$i<100000;$i++) signin(); $t3=time1(); echo " function:".($t3-$t2)."ms class:".($t2-$t1)."ms"; 这次测的时间如下: function:0.072422027587891ms class:0.26213884353638ms 从这个结果来看,php的function还是相当快的,比class,哪怕是静态方法要快。 看来我越来越喜欢用function的路子是对的。
} function time1() { $arr=split(" ",microtime()); return $arr[1]+$arr[0]; } $t1= time1();
for($i=0;$i<100000;$i++) User::signin(); $t2=time1();
for($i=0;$i<100000;$i++) signin(); $t3=time1();
echo " function:".($t3-$t2)."ms class:".($t2-$t1)."ms";
后来我加上另一个,把整个结果贴出来: $obj=& new User();
$t1= time1();
for($i=0;$i<100000;$i++) $obj->signin(); $t4=time1();
for($i=0;$i<100000;$i++) { $obj1=& new User(); $obj1->signin(); } $t5=time1(); echo ” function:”.($t3-$t2).”ms class:”.($t2-$t1).”ms object:”.($t4-$t3).”ms new object:”.($t5-$t4).”ms”; 结果是: function:0.071459054946899ms class:0.23710894584656ms object:0.08794093132019ms new object:0.17567801475525ms 也就是说,直接调用function是最快的,其次是重复调用已存在对象的方法,仅比纯function慢一点点。 接着是先新建class的实例再调用方法,最慢的是直接调用静态方法。 这个结果有一点点出乎我的意料,我没料到静态方法是最慢的一个。
老覃同学做了一个测试,来比较PHP5下利用function,class来编程时的效率差异。 我一向喜欢钻牛角尖: 有两个疑问: 1.ab本身的文档说了,ab自身是需要CPU资源的,有时候要注意你可能不是在测apache的性能,而是在测ab这个软件的性能。老覃同志如何去除ab的影响? 2.php编译时也是花费CPU时间的。我做了另一组测试: //t1.php
function signin()
{
echo “signin”;
}
signin();
?>
ab -n 10000 -c 50 的结果是: 1534.15 [#/sec] Time per request: 32.591 [ms] (mean)
,再另外一个:
//signin();
ab -n 10000 -c 50的结果是: 1748.48 [#/sec], Time per request: 28.596 。 就是说,算上ab的花费,apache的花费,php编译的花费,这几个的时间消费可能已经比php代码运行的时间花费要大了。加上运行的代码后,只相关几个ms。 如果要进行精确的比较,老覃的做法可能很不可靠。 PHP4与PHP5.20的效率目前还只有看官方的数据。 另外有个疑问,我的php比老覃同志的似乎快了不少,相差好几倍。可能是我的是Fedora 下运行的结果。
附注:
我后来做了一个实验,ab -n 10000 -c 50 http://localhost/test/23442.php ,返回的结果是:
Requests per second: 2192.03 [#/sec] (mean) Time per request: 22.810 [ms] (mean) 这是在请求的文件不存在下,apache简单返回一个静态面的情况下的。由此看来,ab和apache的开销就已经占了大约20ms.
再注,在这里 是老覃的同事做的测试.我google得到了这个结果.
2001.7.13日,中国申奥成功.那天我考完高考,正在努力地卖菜,以期解决部分学费问题.得知这个消息,我兴奋异常.真是小孩子,特愤青.这一天我还得到另一个好消息,我得到了一笔当时看起来不菲的助学金,起码让我有了走进大学校园的勇气。一个月后我收到了某大学录取通知书.虽然在我看来在这所大学里的四年课堂生活没有学到什么东西,但是我在这四年里从几乎从不主动跟人说话到后来像个老油条般发生了天大的变化,在那个图书馆唯一一个经常有新书的计算机室泡了差不多一年大致翻过了从word,execl的VBA编程到汇编程序设计,从JSCP参考书到ASP COM+编程,从DOS命令到Unix shell,Linux 源码的各种计算机类书,另外大四时我忙了一个学期完成了武汉某钢铁企业烟道热力学模拟计算的一个课程(这个设计拿了优,但是据说这个优只对研究生有用处,而且奖学金也是几个月后才评下来,于是我稍微计算了一下就得出这个评奖对我没有丝毫用处的结论,于是我没有去参加上报评比.) 2007.7.13日,发生了一件什么事呢?我用了好几年的PHP4宣告了生命的终结.在php.net见到这个消息,我不禁有些伤感.或许,很快PHP就宣告没落,做为PHP程序员的我将失去工作,也不是没有可能.(所以我在积极学习Python,Ruby,目前用来做网站没有问题了,哈哈,吃饭要紧…) 2007.8.8,我网站生涯中的第三个孩子:央视国际奥运频道上线.第一个孩子是原创中国,第二个是某新农村行业门户(现在被后继者折腾得不成样子,不好意思说了);当天一个留言板得到了全国各地网友的1024条祝福(哈哈,竟然恰好是2的10次方). 2007.8.13:Drupal的6.x.dev版提供下载了.这个是我最期望的CMS,我发誓如果他成功地解决多语种翻译引起的速度问题,我一定会选用Drupal.因为从程序到界面,他都酷呆了,Xoops有些老了,从phpNuke开始继承了太多的老传统,这制约了他的发展,尤其是对2.0时代新特性的支持开始力不从心,美化有待强化,Ajax支持不够好,而且权限过于学院派,实际应用中其实不需要那么完整的权限系统,大部分操作,例如文章阅读,默认就设为所有人只可看,不需要去做一大堆查询,验证用户是否有阅读权限,不然效率跟不上.Mambo跟Xoops基本上差不多,就是界面好看了点儿,权限弱了点,代码在速度上,工整上差劲了点.另外从我个人来说,目前见到的大多数CMS都有的问题是,所有的系统都是SQL语句满天飞,一个系统几千个php文件到处都是mysql_connect,mysql_query,以后想做多机集群时工程师恨不得跳楼:要改的地方太多了,压根儿就是重写整个系统.遗憾的是还没有时间好好研究一下drupal的代码.
两段代码,都是用来1到100之前计算三次方的. 同样的代码,第一个其实只需要一行(当然要考虑美观,分成了四行); 第二个估计要用上100来行;但是哪个更快呢?…. 读者说哪个程序更好? function getPower($n) { return $n*$n*$n; }
global $data; $data=array( 1=>1, 2=>8, 3=>27, 4=>64, 5=>125… ); function getPower($n) { global $n; return $data[$n]; }
前面几篇文章提到了APC.很多人问我:APC是什么?这里做个比较全面的介绍: APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”,但我个人觉得应该叫”另一个PHP缓存”.因为这个东西如果叫”可选PHP缓存”,容易给人一种可要可不要的,不怎么有用的错觉. APC的主页是:<a href=”http://pecl.php.net/package/apc” mce_href=”http://pecl.php.net/package/apc”>http://pecl.php.net/package/apc</a>.目前的版本是3.0.14,通过PECL安装,需要php4.3.0或更高版本. <b>APC的安装:</b> 一般是下载源代码然后phpize来编译安装,安装完以后在加上php.ini里加上 <coolcode> extension=apc.so </coolcode> 这么一行就行了. <b>APC的使用</b> APC的使用其实倒说不上.APC是个优化器,自安装之日起,就默默地在后台为您的PHP应用服务了.您的所有PHP代码会被缓存起来.
另外,APC可提供一定的内存缓存功能.但是这个功能并不是十分完美,有报告说如果频繁使用APC缓存的写入功能,会导致不可预料的错误.如果想使用这个功能,可以看看apc_fetch,apc_store等几个与apc缓存相关的函数. 从PHP5.2开始,APC引入了一个小甜饼,解决了困扰大家已久的大文件上传的进度条问题.具体请看看我这篇<a href=”http://www.162cm.com/archives/406.html” mce_href=”http://www.162cm.com/archives/406.html”>blog</a>. <b>APC的高级使用</b> 1.缓存期限: APC的缓存分两部分:系统缓存和用户数据缓存. 系统缓存是自动使用的,是指APC把PHP文件源码的编译结果缓存起来,然后在再次调用时先对比时间标记。如果未过期,则使用缓存代码运行。默认缓存3600s(一小时).但是这样仍会浪费大量CPU时间.因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0).不过如果这样设置,改运php代码后需要restart一下您的web服务器(比如apache…).目前对APC的性能测试一般指的是这一层cache; 用户数据缓存由用户在编写php代码时用apc_store和apc_fetch函数操作读取、写入的.如果量不大的话我建议可以使用一下.如果量大,我建议使用memcache会更好. 如果要享受APC带来的缓存大文件上传进度的特性,需要在php.ini中将apc.rfc1867设为1,并且在表单中加一个隐藏域APC_UPLOAD_PROGRESS,这个域的值可以随机生成一个hash,以确何唯一.具体例子请参见前面给出的链接. 2.状态控制和分析: APC的源码包自带了一个apc.php;您可以将这个文件上传到web服务器的某个目录下,用浏览器访问,这会显示当前的状态.我们可以从这里的表格分析当前的缓存状况,作出进一步优化. 这是某test站点的状态.您可以慢慢分析,这个工具会提供很多有用的工具.比如您可以看到哪些文件经常被包含(访问),您缓存的哪个变量经常被读取,或经常被更新等. 最后顺便提一句,有独立报告说,APC的代码缓存、优化效果要高出zend优化器.就算不是真的,他开源而又免费,实在是一个相当不错的选择.
这是从这里看的:
日前,在美国访问的冈比亚总统叶海亚-贾梅与布什会谈中表示,一旦台海局势发生变化,冈比亚将出兵中国攻击中国沿海经济区,以防止台海局势扩大化。叶海亚-贾梅声称,冈比亚只需派遣1000人左右的海军陆战队就可以完全遏制中国的军事行动。冈比亚总统叶海亚-贾梅不久前还宣布他在梦中学会了治疗艾滋病的方法。冈比亚是目前与中华民国24个建交国之一。
另一段资料:
冈比亚:位于非洲西部面积10380平方公里。人口150万。冈国民军创建于1984年2月,2001年总兵力约800人。其中海军成立于1996年7月,原名国民卫队,1997年7月更为现名,共70人,2艘炮艇。警察部队成立于1992年2月,包括警察和国家宪兵,现有1000余人。冈比亚国家卫队成立于1997年8月,负责反贩毒、走私等,现有110人。
我哥们儿说:Y还蛮讲哥们儿义气.果然思路不一样 ,总能发现优点。
phpfox是国外的一款社区软件,具有论坛,博客,相册,音乐,投票,问答,视频等功能,基于php,mysql.安装需要gd库的支持。
我拿到程序后修改的第一步:
1.修改用户接口部分。 phpfox是典型的单入口型程序和类MVC架构。具体怎么改我不加描述了,只提一下,因为phpfox把对几乎所有路径的访问全部rewrite到了index.php,所以要在.htaccess文件中加上这样的两行: Rewritecond %{REQUEST_FILENAME} !-f Rewritecond %{REQUEST_FILENAME} !-d 一共要加两次(针对1.5,1.6这两个版本)。如果没有启用rewrite,就没有这会事。用户分别是{PREFIX}_user表,如果自行进行数据整合,操作这个表就可以了。 2.汉字在显示时有问题,需要看以下这些模板:
design/./templates/default/_modules/Menu/TabbedMenu.html design/./templates/default/_modules/Listing/ListingCreate.html design/./templates/default/_modules/Listing/ListingCreate.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Account/ProfileSettings.html design/./templates/default/_modules/Ads/AdsList.html design/./templates/default/_modules/Event/Calendar.html design/./templates/default/_modules/Event/AddForm.html design/./templates/default/_modules/Event/AddForm.html design/./templates/default/_modules/Event/AddForm.html design/./templates/default/_modules/Event/AddForm.html design/./templates/default/_modules/Event/AddForm.html design/./templates/default/_modules/Event/FeaturedEvents.html design/./templates/default/_modules/Event/FeaturedEvents.html design/./templates/default/_modules/Event/EventView.html design/./templates/default/_modules/Event/EditForm.html design/./templates/default/_modules/Event/EditForm.html design/./templates/default/_modules/Event/EditForm.html design/./templates/default/_modules/Event/EditForm.html design/./templates/default/_modules/Event/EditForm.html design/./templates/default/_modules/Video/Main.html design/./templates/default/_modules/Video/AjaxBox.html design/./templates/default/_modules/Video/ModifyCategories.html design/./templates/default/_modules/Video/ApproveVideos.html design/./templates/default/_modules/Video/AjaxLatest.html design/./templates/default/_modules/Video/Categories.html design/./templates/default/_modules/Video/Browse.html design/./templates/default/_modules/Video/View.html design/./templates/default/_modules/Blog/NewBlogs.html design/./templates/default/_modules/Blog/MemberBlogs.html design/./templates/default/_modules/Blog/AddBlog.html design/./templates/default/_modules/Blog/MyPageBlogs.html design/./templates/default/_modules/Blog/MyPageBlogView.html design/./templates/default/_modules/Blog/BlogList.html design/./templates/default/_modules/Blog/BlogList.html design/./templates/default/_modules/Blog/BlogList.html design/./templates/default/_modules/Blog/BlogList.html design/./templates/default/_modules/Blog/EditBlog.html design/./templates/default/_modules/Blog/EditBlog.html design/./templates/default/_modules/Blog/View.html design/./templates/default/_modules/Blog/View.html design/./templates/default/_modules/Groups/GroupForumPosts.html design/./templates/default/_modules/Groups/NewGroups.html design/./templates/default/_modules/Groups/GroupDetails.html design/./templates/default/_modules/Shoutbox/Box.html design/./templates/default/admin/language/options.html design/./templates/default/admin/language/options.html design/./templates/default/admin/language/options.html design/./templates/default/admin/language/missing-options.html design/./templates/default/admin/language/add-phrase.html design/./templates/default/admin/language/add-phrase.html design/./templates/default/admin/language/phrases.html design/./templates/default/admin/language/phrases.html design/./templates/default/admin/language/phrases.html design/./templates/default/admin/language/add-option.html design/./templates/default/admin/language/missing.html
里面会有<{$title|escape}>这样的句子。将”|escape”删掉即可修正汉字bug. 3.敏感词过滤:phpfox为了扩展性,是在显示时过滤的,没有这个必要。我们把显示层的过小滤去掉,然后在index.php的第一行就加上过滤(如果有post数据,将之过滤)。这样将过滤机制更改之后,CPU又节省不少。 4.未登陆用户cache层。对于未登陆用户,没必要时时都是显示最新的。又是在index.php的第一行加上过滤:如果用户未登陆且无post数据,则显示cache层的静态文件。有1%的机率更新cache.
优化之前:
Document Path: / Document Length: 23960 bytes Concurrency Level: 1 Time taken for tests: 2.740130 seconds Complete requests: 30 Failed requests: 0 Write errors: 0 Total transferred: 733950 bytes HTML transferred: 718800 bytes Requests per second: 10.95 [#/sec] (mean) Time per request: 91.338 [ms] (mean) Time per request: 91.338 [ms] (mean, ac
优化之后:
Server Software: Apache/2.2.4 Server Hostname: ***.com Server Port: 80 Document Path: / Document Length: 23960 bytes Concurrency Level: 1 Time taken for tests: 0.32685 seconds Complete requests: 30 Failed requests: 0 Write errors: 0 Total transferred: 730560 bytes HTML transferred: 718800 bytes Requests per second: 917.85 [#/sec] (mean) Time per request: 1.090 [ms] (mean) Time per request: 1.090 [ms] (mean, across all concurrent requests) Transfer rate: 21814.29 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 0 Processing: 0 0 1.0 1 1 Waiting: 0 0 0.3 0 1 Total: 0 0 1.0 1 1
又节约了不少资源。
4。数据库结构修改:
a.phpfox_online_session,phpfox_online,phpfox_site_session的数据都不需要永久保存。直接改成内存表。
由于内存表不支持txt类型,因此将tinytxt,text类型的字段均改为varchar字段。
现在做的改动有:
phpfox_online:
user( tinytext) 改为:user(varchar(32)
page (tinytext )改为page(varchar(100)
ip(tinytext)改为(varchar(16) )
phpfox_site_session:
browser:改为varcahr(64)
host:改为varchar(32)
page:改为varchar(64)
referer:改为varchar(64).
这个改过之后我试了一下,有些字段长度还可以进一步改小,这样才能将session数据都做成内存表,速度又可以大上一层楼。 b.flashchat_templates 这个表非常搞笑,有2万条记录,好像是在”CAN I FUCK YOU”和”<srai>DO YOU WANT TO HAVE SEX</srai>”类似的句子之间做替换。基本没用(尤其是对中文).依我的看法如果这个表能导致瓶颈,就清空掉好了。
c.flashchat_patterns 这个表巨大无比,有15万条记录。主要是英文。如果可以的话,可以给他瘦身一下。
d.mysql的连接方式为mysql_connect,这个可以修改为mysql_pconnect。视具体情况。 e.许多表没有加索引,最搞的是论坛的topic表没有给group_id这个字段加索引。真是让人郁闷。注意把数据库结构整个看一遍,挨个把屁股擦干净。
5.去掉title中的标识:
修改include/modules/Site/classes/PhpFox_ComponentSiteTitle.class.php 中,将第200行的: 198 if (App::removeBrand()) 199 { 200 // $sTitle .= ‘ (Powered by phpFoX)’; 201 } 改掉就行了。(提醒大家,phpfox不允许未付费用户去这个标识。去这个标识需要另付费75$.
修改include/modules/Site/classes/PhpFox_ComponentSiteTitle.class.php 中,将第200行的:
198 if (App::removeBrand())
199 {
200 // $sTitle .= ‘ (Powered by phpFoX)’;
201 }
改掉就行了。(提醒大家,phpfox不允许未付费用户去这个标识。去这个标识需要另付费75$.
好啦,现在他可以支撑1000人在线了(其实我还加装了php-apc,这个东东把php编译结果缓存起来,另外把图片等静态文件进行了分流)。