分类目录归档:Web开发

Google犯下天大错误,5条PHP优化建议遭痛批

首先我承认我有点标题党了,然后:

近日Google 在 Google Code 下的 “Let’s make the web faster” 网站中,发表了一篇名为“PHP performance tips”的文章,介绍了一些php性能优化建议,其中:

  1. 不要随意复制变量
  2. 用单引号表示字符串
  3. 使用echo输出字符串
  4. 不要在echo中使用点号连接符
  5. 使用switch/case代替if/else

这篇文章发表后没多久就立刻遭到了一些PHP社区和个人无情的批驳,他们声称Google错了,错的很彻底,这5条看似有效优化建议其实完全是迷信:

1. 不要随意复制变量

Zend引擎采用了“写时复制”机制,这意味着无论你对变量进行多少次复制,真正的复制动作都仅在变量值改变时才发生。

2. 用单引号表示字符串

无数的基准测试已经证明,使用双引号表示纯字符串并不比使用单引号时慢。有兴趣的朋友也可以重复一下这个测试:

php > $blah=”blah”; $s=microtime(true); for($i=0;$i<100000;$i++) “omgwtf$blah\n”; echo microtime(true)-$s;
0.044615983963013
php > $blah=”blah”; $s=microtime(true); for($i=0;$i<100000;$i++) ‘omgwtf’.$blah.”\n”; echo microtime(true)-$s;
0.042807102203369

3. 使用echo输出字符串

根据php所在服务器环境的不同,某些情况下echo会比print()慢。这里有一篇echo和print()对比的帖子,对echo和print()的速度进行了测试:http://www.learnphponline.com/php-basics/php-echo-vs-print

4. 不要在echo中使用点号连接符

基准测试证明这又是一条与事实完全相反的建议。php引擎处理以点号连接(或者使用双引号)传递给echo的变量实际上是更快的。你可以重复这个测试:

$ php -d implicit_flush=off -r ‘$s=microtime(true); for($i=0;$i<100000;$i++) echo “omgwtf”,”bbq”,”\n”; echo microtime(true)-$s;’ | tail -n 1
1.071463108062710
$ php -d implicit_flush=off -r ‘$s=microtime(true); for($i=0;$i<100000;$i++) echo “omgwtf”.”bbq”.”\n”; echo microtime(true)-$s;’ | tail -n 1
0.44555306434631

5. 使用switch/case代替if/else

这条建议毫无意义。关于是要使用switch/case还是if/else的问题,其实完全是个代码风格问题,而它们的效率相差无几。

一向以技术为长的Google,竟然在技术问题上犯了如此错误,相当不严谨。PHP小组已经督促文章作者重新仔细审查文章,希望能尽快改掉,以正视听。

用PHP在网页上显示psd文件

或许你会有直接在网页上显示psd文件的需要,那么classPhpPsdReader.php能帮助你。这是一个由Tim de Koning在2007年编写的一个基于GD库的PHP类,能够用PHP对图片进行一些操作,包括显示psd文件。这个类兼容PHP4和PHP5,可以放心使用。

使用方法也很简单,上传classPhpPsdReader.php,然后:

就这么简单。

下载classPhpPsdReader.php

Elgg网站迁移指南

Elgg官方文档上的网站迁移部分是有问题的——缺少了一些重要步骤,而且过程更麻烦。正确的方法如下:

  1. 备份网站文件,包括uploads文件夹
  2. 导出数据库
  3. 在数据库文件中,将所有旧域名、网站根路径、uploads文件夹路径替换成新的
  4. 将数据库文件导入新数据库
  5. 上传网站文件,包括uploads文件夹
  6. 删除uploads文件夹中的view_path文件
  7. 编辑/engine/settings.php文件中的数据库配置信息
  8. 如果此时网站仍然不能正常访问,禁用所有插件,再重新启用

官方文档上要求在新服务器上安装elgg,然后删除数据库、导入uploads文件夹。这里缺少了“导入网站文件”一步,而且这样做很麻烦。直接在新服务器上导入数据库和网站文件、uploads文件夹和数据库就行了。

此外官方文档里没有6和8两步。如果view_path不删除,elgg会继续在旧的网站根路径和uploads文件夹路径里寻找文件,从而导致错误。

最后,有些插件在迁移后会出现故障,禁用后再重新激活就好了。

注:以上方法只在Elgg1.5上测试成功,未在旧版本上进行测试。

知识普及:

Elgg是一个开源SNS平台软件,通过组合如博客、微薄、书签、相册、群组等多种插件来打造个性化SNS网站。

广告:

扯Web是一个用Elgg搭建的SNS社区,这个社区的成员来自“扯淡的互联网从业人员”群,欢迎志同道合者加入。目前扯Web实行邮件邀请制,如果需要邀请邮件请给我发邮件或在本日志下留言(不要忘记写上你的邮箱地址)。

认识XFN链接关系

本文原载于WordPress啦!,想想还是在自己博客上也发一下吧。
——————————————————————

WordPress 2.7 的添加友情链接面板和以往版本不一样,多出了一些XFN相关的选项。那这个XFN是什么呢?

xfn-in-wp

XFN(全称XHTML Friends Network)是一种用现超链接来表现人际关系的方式。近年来,blog和blogroll在互联网上增长迅速。XFN允许互联网内容创造者通过在<a>标签里添加rel属性来表明自己与被链接者的关系。

为什么会有XFN?

越来越多的网民开始进入社交媒体网络,他们以各种形式(博客,微博客,社交个人主页等等)在互联网中创建了大量节点。TechnoratiFeedster 这种统计节点关联的服务也随之兴起,他们发掘出社交网络中节点间的连接,但却无法揭示连接背后的人际关系连接。

而XFN就是描述这个人际关系连接的。xfn-btn

怎样使用XFN?

XFN并不是某种神秘的新技术,它只是对传统技术的新应用。XFN通过<a href>标签中的rel属性来标示链接创造者与被链接者之间的关系。

一个传统的链接代码可能是:

<a href=”https://www.mrven.com”>布鲁文的蓝色奇想</a>

而一个XFN的链接会是:

<a href=”https://www.mrven.com”  rel=”friend met colleague”>布鲁文的蓝色奇想</a>

rel=”friend met colleague” 标示出了连接对象与我的关系是:朋友,见过面,同事。注意,这种关系是单向的,是从“我”到“对方”的,我给对方的XFN并不会影响对方给我的XFN。

XFN中共有6个关系分类,每个分类里又有多个具体的关系。一个连接中可以包含多个分类,但是某些分类下的关系类型只能选择一个(比如“家庭关系”),而一旦选中了“me”,那么就不能再放入任何其他的关系类型。以下是XFN中所有的关系类型:

friendship友情,只能选一个
friend 好朋友(一起混的)
acquaintance 熟人 (见面会打招会)
contact 有联系过 (至少你知道如何联系到Ta)
physical 直接接触
met 在真实世界中遇见过
professional 专业
co-worker 共事(一起合作过)
colleague 同事(与你共处同一专业领域)
geographical 地理关系,只能选一个
co-resident 同一区域(住同一个大院,同一个小区,同一个学校等等)
neighbor 邻居
family 家庭关系,只能选一个
child 孩子
parent 父母
sibling 兄弟姐妹
spouse 配偶
kin 亲属
romantic 恋爱关系
muse 我的女神
crush 我迷恋的
date 约会中
sweetheart 甜心
identity 自我识别
me 表示这个链接指向我的另一个节点(网站、网页等)

最后,你还需要给<head>标签加一个profile属性,好让浏览器或搜索引擎知道你的网页支持XFN:

<head profile=”http://gmpg.org/xfn/11″>

仅仅是添加一些代码?XFN有什么实际意义呢?

这个问题难到我了。搜索引擎“应该”是可以识别它的,但我不确定是否有搜索引擎在用XFN做一些有意义的事情。XFN是一项面向未来的标准,但目前,除了能让你的Blogroll更好玩一些,似乎也并没有太多用处。

CSS2.1支持属性选择器,你可以利用XFN给不同关系的友情链接编写不同的css样式。

XFN官方还提出了“XFN网页爬虫特性”的构想。在这一构想中,超链接背后的人际关系将被发觉,6度理论将得到终极的证明。

WordPress中的XFN

WordPress从2.7版本开始内置了XFN功能,在添加Blogroll链接时可以设置XFN属性。

如果你还在使用较早版本的WordPress,XFN Friendlier插件则可以帮你实现XFN。Auto XFN-ify插件能够自动给日志中出现的Blogroll里的链接添加对应的XFN属性。XFN Icons则允许你给不同的XFN属性设置小图标,并显示在Blogroll中。

pChat——无敌PHP图表库

无图无真相,先上图:

example1

example2

example6

example8

example10

example12

上面这些是什么?这可不是Excel做的图表,更不是Photoshop做的,这全是用pChat做的。

pChat是一个面向对象的PHP类,用于创建图表。它是开源的,免费的。数据可以来自SQL查询、CSV文件或者手工录入。然后指定图表样式,一张漂亮的图表就生成了。pChat需要GD库支持。

这里有更多用pChat做的例子可以看,下载pChat请点这里