小皮图书馆

2008-04-09

优化PHP代码的42条建议

Filed under: 代码 — 小皮 @ 17:18 pm

英文原文:http://reinholdweber.com/?p=3

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%。

王通:入境游网站的网络营销策略

Filed under: SEO — 小皮 @ 11:18 am

今天参加了中国首届入境游电子商务论坛,并且做了一个题为《入境游网站的SEO和网络营销策略》演讲,而过去几年,我共做过三家入境游企业网站海外推广的顾问,且针对入境游网站的营销策略,写此文分享一些技巧给大家。

做好入境游网站的海外推广,要做好以下三大步工作。 (more…)

2008-04-04

RGB色彩与CMYK色彩

Filed under: 网站设计 — 小皮 @ 23:20 pm

色光三原色 (R.G.B)

RGB是色光的彩色模式,R代表红色,G代表绿色,B代表蓝色。因为三种颜色每一种都有256个亮度水平级,所以三种色彩叠加就能形成1670万种色彩了(俗称”真彩”)。这已经足以再现这个绚丽的世界了。

RGB模式因为是由红、绿、蓝相叠加形成其他颜色,因此该模式也叫加色模式(CMYK是一种减色模式)。在该色彩模式下,每一种原色将单独形成一个色彩通道(Channel),在各通道上颜色的亮度分别为256阶,由0-255。再由三个单色通道组合成一个复合通道–RGB通道。图象各部分的色彩均由RGB三个色彩通道上的数值决定。当RGB数值均为0时,该部分为黑色;当RGB色彩数值均为255时,该部分为白色。就编辑图象而言,RGB色彩模式是首选的色彩模式,PHOTOSHOP中所有图象编辑的命令都可在RGB模式下执行。因为他可提供1670万种颜色,既所谓的”真彩”,足以将图象显示得淋漓尽致。因此在PHOTOSHOP中将 RGB模式作为预设的模式。

虽然编辑图象RGB色彩模式是首选的色彩模式,但是在印刷中RGB模式就不是最佳的

了。因为RGB模式所提供的有些色彩已经超出了打印色彩范围之外,因此在打印一副真彩的图象时,就必然会损失一部分亮度,并且比较鲜明的色彩肯定会失真的。这主要因为打印所用的是CMYK模式,而 CMYK模式所定义的色彩要比RGB模式定义的色彩要少得多。在打印时,系统会自动将RGB模式转化为 CMYK模式,这样就不可避免地损失一部分色彩和减轻一定的亮度了,因此打印后的失真现象将十分地严重。

萤幕显示的色彩是由 RGB(红,绿,蓝)三种色光所合成的,我们必须利用减色法来计算混合後的色彩,色光越多越接近白色

印刷四原色 (C.M.Y.K)

CMYK模式是一种减色模式,它适合于印刷。当阳光照射到一个物体上时,这个物体

将吸收一部分光线,并将剩下的光线进行反射。反射的光就是你所看到的物体的颜色。这是一种减色模式,是与RGB色彩模式的根本不同之处。不但我们看物体的颜色时用到了这种减色模式,而且在纸上印刷时应用的也是这种减色模式。

CMYK即代表印刷上用的四种油墨色,C代表青色,M代表洋红色,Y代表黄色。因为在

实际应用中,以上三色很难形成真正的黑色,最多不过是褐色,因此又引入了K–黑色。黑色用于强化暗部的色彩。在PHOTOSHOP中这种色彩模式就形成了四个色彩通道,最后又由这四个通道组合形成了一个综合通道。因此如果是放在网页上的图片,直接用RGB模式就已经可以了;如果是教程、广告上的需要打印出来的图片,我们可以:先用RGB模式编辑,再用 CMYK模式打印,或是直接到印刷前再转换,然后加以必要的校色、锐化和修饰。这样虽然PHOTOSHOP在CMYK模式下慢了许多,但还是可以节省大部分编辑时间的。

在转换的过程中,PHOTOSHOP实际是先将图象由原先的RGB色彩模式转换成Lab色彩模式,再产生一个最终的CMYK色彩的模式,在其中难免会增减光点和损失一些品质,因此最好在转换之前先将原稿备份。而在RGB与CMYK色彩模式之间来回多次转换也是不提倡的,它们之间的转换并不是完全可逆的。

印刷色彩由CMYK四色油墨产生不同於电子影像,我们利用加色法,混合三色最後会得到黑色(K)

2008-04-03

SEO成功之金字塔模型

Filed under: SEO — 小皮 @ 14:06 pm

最近在老外SEO圈子里流行一篇文章,就是Small Business SEM的一篇名为SEO成功之金字塔模型()的文章。这篇文章主要归纳整套SEO项目最终获取成功所需要的一些支撑条件,并且总结成一张金字塔模型图。感觉这个模型图对SEO的人来说都有很好的指导作用,于是就把图篡改过来并对文字说明稍加改动。

SEO的入门其实很简单,也至于很多人在看了网络上的一些知识就觉得自己会SEO了。事实上,一个成功的SEO项目并不是做垃圾站那样简单,本质是一套系统的过程,在操作过程中又渗透着各种细节处理。(垃圾站的处理过程其实不系统,没有真正SEO项目要考虑和注意的繁杂,所以能做垃圾站成功的人不一定能做好一个真正的SEO项目。)如何在这个系统过程中做好每一个步骤需要的不仅仅的SEO能力,还需要眼光和决策能力以及细节处理能力。下面这张 SEO金字塔图简单介绍了这样一个系统的处理过程。 (more…)

2008-04-01

愚人节由来

Filed under: 其他 — 小皮 @ 14:19 pm

据说,愚人节起源于一个很有名的希腊神话传说。

农业女神得墨忒尔,在希腊是个妇孺皆知的神祗。她具有无边的法力,可以使土地肥沃,五谷丰登,也可以令田园荒芜,万物凋零。在希腊众神中,她也是最受尊崇的女神之一。万神之王宙斯是她的弟弟,也是她的丈夫。仅仅这个身份,就足以使众神在她的脚下俯首帖耳了。但是,这位权势无比的女神的生活并非十全十美。宙斯凭借着神王的地位,到处拈花惹草,闹出了许多风流韵事,给得墨忒尔带来了无穷无尽的烦恼。唯一能够让她享受生活乐趣的,还是她和宙斯生的女儿佩尔塞福涅,一个聪慧、美丽、天真、活泼的姑娘,和她在一起,任何人都不会悲伤和忧愁。

这一天,冥王哈得斯驾车巡视西西里岛,恰好被在云端中走过的爱与美女神阿芙罗狄忒看到了,同时让她看到的,还有正在田野里散步的佩尔塞福涅,以及她的伙伴女战神雅典娜,狩猎女神阿尔忒弥斯。一看到这几个人,阿芙罗狄忒就气不打一处来。这几个男女,从来不议论爱情,也不谈婚论嫁,眼睛里可还有她爱神的地位吗?雅典娜和阿尔忒弥斯是出名的贞洁女神,又都以武艺高强,神通广大,闻名神界天国,还是不惹为好。但对佩尔塞福涅这小丫头,可就不必客气了。于是,头上晃动着神圣光环的阿芙洛蒂德唤过自己的儿子小爱神厄罗斯,对他说:”看看吧,这几个人是怎洋对待爱情的?如果人和神都学他们的样,我们还怎样统治这个世界?来,给哈得斯射上一支金箭,让他疯狂地爱上佩尔塞福涅!”

厄罗斯是个百发百中的神射手。他弯弓劲射,一技无形的情欲之箭,正扎进哈得斯的心窝。然后,他便跟随着阿芙洛蒂德,扬长而去,静等着看好戏了。果然,哈得斯中箭后,对佩尔塞福涅产生了刻骨铭心的爱。但他明白得很,这个远近闻名的美人儿,绝不会情愿放弃阳光明媚的大地和天空,跟他到阴暗的冥府中去。因此,他找到自己的兄弟众神之王宙斯,请求他作主将女儿嫁到冥府。”这个么……我作不了主”,众神的主宰沉思着说,”你也知道,得墨忒尔难缠得很。不过,你要是有本事把佩尔塞福涅抢走,我倒不反对。”得到了神王的默许和暗示,哈得斯满心欢喜,他立刻返回冥土,做好抢亲的准备。

一天,佩尔塞福涅在田野里正欲弯腰采摘一朵野花时,大地突然裂开了一条宽宽的地缝。随后,一辆闪闪发光的金车,冲上了地面,驾车的就是威风凛凛的冥王。他不由分说,一把抱起佩尔塞福涅,放到他身边的座位上,一声吆喝,马车便以迅不可及的速度沉入地下。裂开的大地倏然合上了,依然是阳光灿烂,绿草如茵,除了天空中还回荡着佩尔塞福涅的呼救声外,好像什么也没发生过。得墨忒尔在很遥远的地方,听到了女儿撕心裂肺般的呼救声。但当她以最快的速度飞回来时,女儿已经不见了。她只知道女儿被”强盗”劫走了,但是,这个强盗是谁,却一点蛛丝马迹也寻不出来。那些知道佩尔塞福涅下落的神灵们,全都缄口不言。他们知道这件事的背景,宙斯和哈得斯都不是好惹的,谁也不想引火烧身。有几个神祗被逼问急了,也是东西南北瞎扯一通。女神按照他们的指点,没头苍蝇般乱闯乱撞,不用说,这些都成了徒劳无功的跋涉。

然而,对女儿的爱,促使得墨忒尔永无休止地找下去。无论哪个神说了什么,她都确信不疑。虽然后来的事实证明,那些都是彻头彻尾的谎言。无奈之下,她在深不可测的埃特纳火山口点燃了两支松木火把,把整个世界照得一片通明。从那时起,无论黎明女神还是黑夜女神,都未见她坐下来休息片刻。就这样,得墨忒尔走遍了世界上的每一个角落。但是,她的女儿就像被风卷走了,被太阳晒化了,或者变成了水汽和浮云似的,仍然踪影全无。众神对她也逐渐由同情转为厌恶。因为这个” 女疯子”为寻找女儿,搅得世界上没有片刻安宁。他们越加拿她开起心来,忽而指向东南,忽而指向西北,无非是想把她支走,过几天太平日子。

最后,得墨忒尔只得拖着疲倦的身子,返回了西西里岛,佩尔塞福涅失踪的地方。奔波了这许多天,连罪魁祸首是谁都不知道,女神的气恼可想而知。于是,她便把一肚子的怨气,都撒到了西西里农人身上。她杀死了岛上所有的耕牛,命令土地坚如钢铁,封住地里的种子,让所有的植物都枯黄凋零。把这个地域辽阔的大岛弄得赤地千里,饿殍遍地。宙斯见她闹得太不像话,就”好心”地劝她再到别处看看,别拿无辜的农民出气。得墨忒尔不知其中有诈,再一次踏上了东西逛的征途。这一下了可不得了,不知多少地方,由于女神的愤怒,变得颗粒无收,到处都弥漫着饥馑和灾荒的绝望气氛。

当她明白自己又上了丈夫一个大当时,才静下心来,想一想到底该怎洋办,无意中她抬起头来,看到了驾着金车,在茫茫太空巡行的太阳神阿波罗。猛然想到,只有他高高在上,普照一切,明察秋毫,天底下发生的任何事情,都不可能逃过他的双眼。这才手执火把,飞到赫利俄斯面前,请他指点迷津。

伟大的太阳神怜悯女神的遭遇,又无需畏惧冥王的权势。而且,他也不愿意得墨忒尔再这样大闹下去,让众神看笑话,让老百姓受难,便把哈得斯抢亲的情况,仔细描述了一番。得墨忒尔恍然大悟,但为时已晚。此时此刻,佩尔塞福涅在哈得斯的威逼利诱下,已然成了尊贵的冥后,无法再到地上和母亲团聚了。何况,得墨忒尔再神通广大,也没本事把女儿从哈得斯手中硬夺过来。

得墨忒尔知道自己受了众神的欺骗、愚弄,愤懑和气恼又加深了一层。她干脆下了一道命令,让全世界的植物一起凋零,所有的庄稼全部枯死,大地上不允许出现一丝绿色。自己则躲到一个偏僻的地方,不再露面。这一来,天上地下全部乱了套。老百姓没有粮食吃,每天都有成千上万人饿死。成群结队的亡魂拥入冥府,吵吵闹闹,把哈得斯弄得心烦意乱,狼狈不堪。众神也因为得不到人间的祭祀和礼物,一个个饿得面黄肌瘦。宙斯没办法,只好让佩尔塞福涅每年有1/3时间住在冥府,2/3时间则返回人世,侍奉她的母亲。以后,每当佩尔塞福涅留居冥土时,得墨忒尔便愁眉不展,大地也是一片萧条,便成了冬季。而女儿一旦和她团聚,女神便喜笑颜开,世界也重现草木复苏,群芳争艳的勃勃生机,就是春、夏、秋三季。

2008-03-31

英科学家列人类25大环境威胁

Filed under: 其他 — 小皮 @ 15:48 pm

纳米技术居榜首
人造生命被点名

新快报讯 据美国《新科学家》杂志报道,以英国剑桥大学动物学家威廉·萨瑟兰为主的30名科学家列举了未来45年25大环境威胁,纳米技术赫然位居榜首。

其中最危险的隐患包括:人造生命和生物模拟仿生机器人,它们可能成为未来新的入侵物种,影响生态系统;对生物燃料和食物需求的增加,可能造成动物栖息地减少;气候变迁、海平面上升、火灾和极端天气事件频繁爆发等因素,将导致野生动植物灭绝;海洋“施肥(加入铁屑)”、部署阳光防护镜的实验等因素,以及有毒的纳米材料也存在环境隐患。 (more…)

2008-03-27

商标旁边的R和TM有什么区别?

Filed under: 其他 — 小皮 @ 15:13 pm

“TM”常见于国外商标,它是英文“trade mark”的缩写,“trade mark”的中文意思是“商业标记”,所以“TM”的意思就是“商标”,它的作用就是告诉人们,这个它所标注的图形或文字是这个商品或服务的商标,不是名称也不是广告宣传。而“R”是英文“register”的缩写,“register”的中文意思是“注册”,商品或服务打上这个标记,就是告诉人们,它所标注的图形或文字不但是商标,而且还是注册商标,受到国家法律的保护,未经授权,其他任何个人和组织都不能擅自使用。现在知道TM和R的区别了吧, “TM”是商标标识,“R”是注册商标标识,二者受法律保护的力度是不同的。

在商标还未成为注册商标的时候,标注“TM”标记,这样做就是告诉公众,这个图形或文字是作为商品或服务的“商标”使用的,不是名称也不是广告宣传,这样就可以避免它所标注的图形或文字流入公用领域,而不能申请成为注册商标,享有专用权;同时打上“TM”标记,也可以作为使用该图形或文字作为商标的证明,申请注册商标时,享有使用在先的权利。

当商标成为注册商标后,就可以在其右上角或右下角标注“R”或“注”注册标记,或者直接标明是“注册商标”。记住注册标记一定要打在商标的右上角或右下角,这是《中华人民共和国商标法实施条例》规定的。另外还要说明的一点是,申请商标注册,取得国家商标局发出的《受理通知书》之后,《商标注册证》之前这段时间,仍然不可以在商标上标注注册标记,因为国家商标局发出《受理通知书》只是商标注册程序的开始。这个《受理通知书》只是表明商标局受理了商标注册申请,而未表明该申请是否被核准。事实上有相当数量的商标注册申请虽已被商标局受理,但经审查后又被驳回了,最终未能注册成功。所以在这段时间建议标注 “TM”,而不能标注“R”,否则就构成了冒充注册商标的违法行为,将处以非法经营额20%以下或者非法获利2倍以下的罚款。

2008-03-24

49个影响网站排名的因素(完整版)

Filed under: SEO — 小皮 @ 9:44 am

在前人的基础上作了补充和修改,增加到49个因素,应该算是完整版了。 (more…)

2008-03-17

制图液晶显示器的选购

Filed under: 其他 — 小皮 @ 11:20 am

首先要声明对颜色有极高要求的用户(印刷业)还是要去选择CRT的显示器,毕竟现在最好的液晶显示器还是和最好的CRT显示器的颜色有一定的差距的。

下面要说的是做效果图或者是一般的动画或者是眼睛受不了CRT显示器辐射的用户应该选择什么样的LCD显示器!

目前,市场上常见的LCD面板可以分为几类 TN ,VA (MVA PVA ),IPS (more…)

2008-03-14

贸易顺差

Filed under: 其他 — 小皮 @ 11:26 am

研究一国对外贸易发展情况,主要借助于政府定期公布的对外贸易平衡表。一般而言,平衡表比较系统地载有表明出口和进口的数字统计,大体可反映一国在特定时期内对外贸易乃至国民经济发展状况。一国对外贸易按出口大于、小于或等于进口等情况,分别构成贸易顺差、贸易逆差或贸易平衡。

贸易顺差( Favorable Balance 0f Trade )。所谓贸易顺差是指在特定年度一国出口贸易总额大于进口贸易总额,又称 “ 出超 ”.表示该国当年对外贸易处于有利地位。贸易顺差的大小在很大程度上反映一国在特定年份对外贸易活动状况。通常情况下,一国不宜长期大量出现对外贸易顺差,因为此举很容易引起与有关贸易伙伴国的摩擦。例如,美、日两国双边关系市场发生波动,主要原因之一就是日方长期处于巨额顺差状况。与此同时,大量外汇盈余通常会致使一国市场上本币投放量随之增长,因而很可能引起通货膨胀压力,不利于国民经济持续、健康发展。  (more…)

« Previous PageNext Page »

Powered by WordPress