优化 PHP 建议

src: http://www.phpchina.com/78/viewspace_25713.html

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

7.require_once()代价昂贵。

8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。

9.如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

10.函数代替正则表达式完成相同功能。

11.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

12.如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13.使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

14.用@屏蔽错误消息的做法非常低效。

15.打开apache的mod_deflate模块。

16.数据库连接当使用完毕时应关掉。

17.$row[‘id’]的效率是$row[id]的7倍。

18.错误消息代价昂贵。

19.尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。

20.在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

21.递增一个全局变量要比递增一个局部变量慢2倍。

22.递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

24.仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

25.方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。

26.派生类中的方法运行起来要快于在基类中定义的同样的方法。

27.调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。

28.用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。

29.输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。

30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。

31.除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。

32.尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。

33. 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步 骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。

(举例如下)
if (strlen($foo) < 5) { echo "Foo is too short"; }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo "Foo is too short"; }

调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。

34. 当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它 们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变 量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不 是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。

35.并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。

36.并非要用类实现所有的数据结构,数组也很有用。

37.不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?

38.当你需要时,你总能把代码分解成方法。

39.尽量采用大量的PHP内置函数。

40.如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。

41.评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。

42.mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。

Read: 927

[转] 写给不了解黑客的人

src:http://topic.csdn.net/u/20080226/14/2e2b9c0d-6638-40f3-b76e-fedf6b38a993.html

人们对黑客的误解,超出了我想象的范围,包括我自己,知道2008年的一天我看到了一个网络下载的光盘,对黑客的解释,才让我对黑客这个词做了真正的理解。

“黑客”一词是由英语Hacker英译出来的,是指专门研究、发现计算机和网络漏洞的计算机爱好者。他们伴随着计算机和网络的发展而产生成长。黑客对计算 机有着狂热的兴趣和执着的追求,他们不断地研究计算机和网络知识,发现计算机和网络中存在的漏洞,喜欢挑战高难度的网络系统并从中找到漏洞,然后向管理员 提出解决和修补漏洞的方法。

黑客不干涉政治,不受政治利用,他们的出现推动了计算机和网络的发展与完善。黑客所做的不是恶意破坏,他们是一群纵横与网络上的大侠,追求共享、免费,提 倡自由、平等。黑客的存在是由于计算机技术的不健全,从某中意义上来讲,计算机的安全需要更多黑客去维护。借用myhk的一句话“黑客存在的意义就是使网 络变的日益安全完善”。

但是到了今天,黑客一词已经被用于那些专门利用计算机进行破坏或入侵他人的代言词,对这些人正确的叫法应该是cracker,有人也翻译成“骇客”,也正 是由于这些人的出现玷污了“黑客”一词,使人们把黑客和骇客混为一体,黑客被人们认为是在网络上进行破坏的人。

一个黑客即使从意识和技术水平上已经达到黑客水平,也决不会声称自己是一名黑客,因为黑客只有大家推认的,没有自封的,他们重视技术,更重视思想和品质。 

全文地址:  http://www.web1357.cn/post/hacker_understand.html

Read: 714

聊天室:freenode IRC Channel #fedora-cn

src:http://www.linuxsir.org/bbs/thread266632.html

我们也有 freenode IRC 聊天室了(#fedora-cn)!

加入聊天室的方法如下:

代码:
* 到 https://addons.mozilla.org/firefox/16/ 安装 firefox 插件 chatzilla

* (安装插件需要关闭 firefox 再打开)

* 在 firefox 地址栏输入 irc://freenode/fedora-cn

* 输入地址后,会自动运行 chatzilla 并连接到聊天室 #fedora-cn

* 请向大家介绍自己,并在退出之前稍候一段时间,使大家可以回应你

想了解更多 IRC 相关的内容,请继续往下阅读。

IRC 是最传统的聊天室。 freenode IRC 是专为开源和自由软件社区开设的。大家遇到问题时,可以请教高手,或是互相帮助,即时得到解答。 IRC 与邮件列表、新闻组、论坛、文档库等等都是学习 linux,迅速提高自身能力的好办法。

IRC 需要所有参与者的共同努力,才能热闹兴旺。请不要吝啬您的时间和精力!(有本事的露两手,没功力的捧个场儿!

chatzilla 的界面由几个部分组成:用户列表,消息窗口,文本输入框。

在文本输入框可以输入消息,按下回车就会发送出去。如果消息以斜线 `/’ 开头,就会被识别为一个命令。斜线后面不要加空格。

常用的命令有很多,可以用 /command 列出所有命令,用 /help 命令名 查询每个命令的作用。

为了在频道中聊天时更引人注目,或者想更令人难忘,可以改变昵称。比如,要使用 nnnnn 作为昵称,可以输入 nick 命令

代码:
/nick nnnnn

这个昵称不是永久有效的,如果希望每次登录都能使用相同的昵称,必须注册它。比如,要注册 nnnnn 昵称,使用 zzzzz 作为每次登录时的密码,就输入这样的命令

代码:
/nick nnnnn
/ns reg zzzzz

然后,在每次登录时,验证自己的身份,输入这样的命令

代码:
/nick nnnnn
/ns id zzzzz

验证身份之后就可以在各个聊天室中畅通无阻了。比如要加入 #fedora 聊天室,可以输入 join 命令

代码:
/join #fedora

如果没有验证身份,就无法加入 #fedora,也无法在一些聊天室中发言,还有可能被踢出来。

离开一个聊天室的命令是 leave,暂时离开聊天室的命令是 away

代码:
/leave
/away

可以同时加入多个聊天室,因此不必离开一个再进入另一个。

其他常用命令可以看

Chatzilla 可以在 win32 和 Linux 中使用,只依赖于 firefox。其他 IRC 客户端包括 xchat, gaim 等,请 Google 相关文档。

目前 #fedora-cn 的信息如下,欢迎大家挂站,多多交流:

代码:
/msg chanserv info #fedora-cn

Channel: #fedora-cn
Contact: bbbush, last seen: 1 week 4 days (0h 57m 12s) ago
Alternate: hellwolf, last seen: 44 weeks 2 days (2h 5m 48s) ago
Registered: 49 weeks 4 days (11h 18m 18s) ago
Topic: /charset utf-8
| 邮件列表 http://groups.google.com/group/fedora-cn
| 论坛 http://www.linuxsir.org/bbs/forumdisplay.php?f=40
| 中文文档 http://fedora.linuxsir.org
| 软件仓库 ftp://ftp.fedora.cn
| 20070315 RHEL5 发布 http://www.redhat.com/videos/real_tech/
| 20070531 fedora 7 发布 http://torrent.fedoraproject.org
Email: fedora-cn@googlegroups.com
Contact URI: ftp://ftp.fedora.cn
Options: TopicLock, Secure, SecureOps, ChanGuard
Mode Lock: -s+ntc

ChanServ* [#fedora-cn] /charset utf-8
| mIRC 请设置 Font...->UTF-8: "Display and Encode"
| Opera 请设置帐户属性->发送->默认编码: utf-8
| 请向大家介绍自己,并在退出之前稍候一段时间,使大家可以回应你
| 多行信息请贴到 http://rafb.net/paste/ 或 http://paste.ubuntu.org.cn

如果进入频道时看到乱码,请输入命令

代码:
/charset utf-8

又及,
* 请警告 mIRC 用户在 Font… 字体对话框里,选择 UTF-8="Display and Encode",以免制造麻烦,发生冲突
* 请警告 Opera 用户在 IRC 账户属性对话框的“发送”页面里,设置默认编码: utf-8
* HydraIRC 不支持 UTF-8

* TIP: 为 Chatzilla 建立桌面快捷方式:firefox -chrome chrome://chatzilla/content/chatzilla.xul

*NOTE* 通过 Tor 访问 freenode #fedora-cn 聊天室 (如果正常方式无法访问的话)
http://www.linuxsir.org/bbs/showthread.php?t=308837

Read: 905

[转] 给变心找个说法

src:http://yushunshun.blog.sohu.com/78984850.html

某顺小时候很娇气,痛感神经特别丰富的某顺,至今没戴过耳环,原因是无法忍受耳垂扎眼的痛苦;青春期时某顺因月经疼、常常以头撞墙;再早一点,少年某顺拔个牙也鬼哭狼嚎、甚至打了麻药还能夺路而逃。就这么娇气的一个人,你相信我能连止痛棒也不用就熬过剖宫产后的头48小时?还坚决贯彻医嘱、术后第二天就自己下床去卫生间嘘嘘?肚皮上的刀口当时长过20CM,要说不疼,鬼都不信,要问怎么扛过来的,呵呵,我也不知道。

而且,我打小就事多,没养孩子前我每晚躺下,两手都要在身下的床单上一寸寸地游走半天,仔细摸索很长时间后才能睡着——我在找手心能感觉到而肉眼难以发现的每一个微小的线头,或大颗的灰尘,不拣干净,我难以入睡。就这么难缠的一个人,你相信我这几年常睡到天亮才发现、我娃的小玩具在我脊背下压了一晚?再也没了让手心一遍遍捋床单的精气神了。有孩子后,一般我脑袋挨上枕头不足5分钟,就能呼呼了,累的。

其实,这一切都不是被迫的,环境一变,人就变了。和习惯一起变化的,还有思想认识。

过去我认为一生只能爱一个人,现在我以为是爱就不错、甭管它爱几回了。过去我认为是亲爹亲妈都疼爱孩子,现在我常见 某些爹娘为了相好、不管不顾自己的骨肉。过去我认为性和爱是高度和谐的统一体,有爱才有性、有性就有爱;现在,我也不这么想了,因为我发觉把性和爱搅和在 一起,是传统世界观在造孽,等于叫你相信:如果你吃饱了,那你一定是吃了你爱吃的东西——可事实弗然啊,我们一生中吃的大多东西,都为果腹,而非我们想吃 的。

一旦意识到性爱能分离,连道德世界都要重新修整了。我开始原谅所有的背叛和所有的龌龊。理解很重要。有人辜负了你, 可他满足了他自己的想要,这叫自私,但也叫对自己负责。你能指责一个对自己负责的人吗?再换位思考,如果他对他自己都不负责,又能对你负责多久?所以,我 总是毫不客气地“揭”男人的皮,也总在数落女人的纠缠。男人这么做就对了,你不满意是因为你有不切实际的幻想。真实的人性,不仅是男人无法逃避的,女人也一样难脱干系。我们有幸目睹“集中问答”里无数的怨妇,她们一边惦记着别的男人,一边对眼前的男人咬牙。呵呵,没人无辜,真的。

以前我写过一篇《没人故意要变心》,现在我依然这么想:变心是正常的,不变心才奇怪呢。连植物都知道迎着太阳抻长脖 子,人为了自己舒坦、去追寻心中想,有错吗?怎么看也合乎客观规律啊。至于他舍本求末不分孬好地折腾,你不必为他计算得失,因为在爱人心里,有爱就有一 切。——尽管我们相信性爱能分离,但我们依然追求性爱的完美结合,所以,你该明白了吧,那个不顾一切要跟人跑的家伙,是去圆他自己的梦了;那个对你大抛媚 眼的人,也是拿你当他实现性爱合一的理想对手了。

将来如何,将来再说。惟有现在,除了接纳,除了享受,你看不到更好的办法。各种各样的习惯、嗜好、信仰、坚持,都会 在生活里一点点换了模样。彼此没变时,都该痴迷,都该沉醉,一旦有人变了,咱只有及时醒转。写到这里,你或许知道我在说什么了?是的,看淡别人的变心,关 注自己的幸福,随缘随份、不要执拗,才是快乐的关键。

Read: 724