2014年 PHPCON 上海站举办前夕,老胡问我去不去,当时对这些会议不是很感冒(其实主要原因是没钱),就没去,不过当时我们约定第二年一起去。到今年北京站举办前一个月,老胡发来链接,问我来否,我自然不想做一个放鸽子的人,领导 Allen 知悉后表示他也要去,于是买门票买车票不提。
6月6日早上到达北京,直奔会场,时间刚刚好。此行主要是为了见一见国内的 PHP 大牛的风采(其实我只熟悉两位嘉宾:惠新宸和韩天峰),顺便看看这些会议到底是一个什么样的情况(因为此前曾参加过南京的一个互联网沙龙,看到最后发现全是广告,所以印象极差——也许是因为免费的)。
先来张会议的日程:
![会议日程](/images/phpcon-2015-beijing/01.jpg)
首先开讲的是来自新浪微博的胡波,主要讲 Yaf/Yar 在微博里的使用情况——手机微博服务端这一块从 v4 升级到 v5 的坎坷过程。
由于我们正在使用 Yaf/Yar (后来用 Phalcon 替换了 Yaf),所以胡波的内容让我们极是受用,忍不住多拍了几张现场 PPT (强调一下我一般很少拍照片的):
![Yaf/Yar 在微博里的使用情况](/images/phpcon-2015-beijing/02.jpg)
![Yaf/Yar 在微博里的使用情况](/images/phpcon-2015-beijing/03.jpg)
这两张图说明了 v4 到 v5 升级过程中要解决的问题,跟我们产品 v2 到 v3 的升级非常类似。
我们产品 v2 版本为了求速度,用了我们比较熟悉的 Symfony2,后来使用 ab
压测发现 QPS 极低,才 8 个左右,分析了一下代码执行时间,发现 Symfony2 框架启动时间太高,所以 v2.1 时 App 的接口部分换成了 Yaf,由于 Yaf 过于简洁,没有 ORM 之类的模块,从 v2.3 开始新的业务模块用 Phalcon写,所以我们的 v2.x 版本用了3个框架。采用了 Yaf/Phalcon 的新的业务模块速度相对老的速度提升明显。
胡波的内容对我们从 v2.x 升级到 v3 有很大启发,不过后来由于我们的业务改变巨大,v3 核心基本上是一个新系统,所以只能部分实践。
![Yaf/Yar 在微博里的使用情况](/images/phpcon-2015-beijing/04.jpg)
使用扩展,这是性能提升的一部分。因为使用 C 系框架后,性能提升明显,所以这部分也没有实践,为了以后极致的性能提升备用吧。
![Yaf/Yar 在微博里的使用情况](/images/phpcon-2015-beijing/05.jpg)
使用 RPC 框架 Yar 也是我们 v2.x 后来性能提升的一大原因。实际上,后来我们的主要业务全部在 RPC 里实现,大部分 Controller 只是充当一个过滤器/组装器的作用。当然由于 Windows 不支持 Concurrent 调用,导致我帮同事们一个个配环境(在我的推荐下使用了 Vagrant + VirtualBox)——当然这也是好事,全体开发人员的开发环境转向 *nix
系操作系统。
![Yaf/Yar 在微博里的使用情况](/images/phpcon-2015-beijing/06.jpg)
最后当然要说的就是坑啦!
说说 Phalcon 吧,其实我们最初使用的是 Phalcon v1.3.x,后来 v2.x 发布了(说是采用 Zephir 这种堪称 PHP外挂 的语言写的),虽然明知有很多坑,但我们产品的 v3 到发布还有一段时间,并且 Phalcon 的 v2.x 与 v1.x 仅仅只有两处不兼容,代码稍微改一下就可以用 v1.3.x 了,所以我们果断上新版。
新版果然坑,被坑得印象最深刻的两次果断被我记录下来了,如下:
1. find 绑定数组问题
$array = ["a","b","c"];
$robots = Robots::find(
array(
'letter IN ({letter:array})',
'bind' => array(
'letter' => $array
)
)
);
这段代码有些人在运行时报错: Scanning error before 'letter:array})' when parsing...
,问题就在于这个特性是 Phalcon 2.0.5 才有的,如果版本低于 2.0.5 的话,就会报错,因为还没有这个特性。
解决办法就是更新你的 Phalcon,下载地址: Download Phalcon。
当时我被文档上这段代码弄郁闷了好久,我写得明明很正确,但却报错,找了半天中文字符/特殊字符,最后无意一撇文档版本是 2.0.5,貌似记得前两天更新的时候是 2.0.4,一查果然!话说新增这大的一个特性应该放在 2.1 里吧,0.0.1 个版本更新至于嘛。。。
2. Model save 方法更新失败不报错不抛异常
如果你的表里面有个字段是 not null,而在更新这个 entity 的时候你不小心设置了该字段为 null,那么你的数据将 save 不进去,这不算坑,但不抛异常不报错这也太坑了吧!
好吧,扯太远了,继续我们的 PHPCON,这时候有个人上来讲了关于 PHP 安全编程的内容,前面一部分耳熟能详,后面一部分没认真听,因为看到漂亮妹子了!
![美女](/images/phpcon-2015-beijing/07.jpg)
哎,要是公司的女同事们都这样多好······
下午的时候见到了韩天峰,由于上午拍了太多照片,下午没电了,就没拍照片。
韩天峰是个喜欢开挂的人,他的 Swoole 就是 PHP 的一个外挂,赋予了 PHP 开发异步、并行、高性能网络通信框架
的能力。还是用 Swoole 官网的介绍吧:
PHP语言的异步、并行、高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。
Swoole可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网、车联网、智能家居等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。
我之前听说这个人是因为老胡,当时他向 Swoole 提交了一些代码,加入了开发组,这才了解到韩天峰。不过老胡这个人天性寡言,不善言辞,不过很有天赋,技术扎实,沉得下心,我从他身上看到了爱因斯坦的影子。
PS:这里本来放了一张老胡的照片,在老胡的强烈抗议下移除掉了。。。
整个会议的两天,在我一再地怂恿下,他都没去跟韩天峰打个招呼。老胡也曾跟我坦白,说自己说话的时候总慢半拍,所以面试很吃亏。其实看老胡的 Github 就知道老胡的水平,进 BAT 绝对不是问题。
又扯远了,算了,我跟韩天峰也不熟,但他的 Swoole 其实我很感兴趣,我们公司也有人在用,做了一个主动推送更新的考勤机,我这部分业务没用到。等以后有机会用的时候再来一篇感概吧。
第一天结束后去了天安门,时值大雨,广场上的行人到卫兵的伞下躲雨,被卫兵驱赶,有个小卫兵叫我大叔,同行的老胡和 Allen 都快笑尿了。。。我只想说,你 TMD 怎么不叫大爷?
![彩虹](/images/phpcon-2015-beijing/08.jpg)
回程的路上看到彩虹,我大叫一声,行人纷纷抬头,举机拍照。
第二天,终于看到了传说中的鸟哥,真名惠新宸,ID是 Laruence,好吧,我承认之前一直以为是 Laurence…
鸟哥说他昨天喝多了,头疼,中场休息的时候我在酒店门抽烟,突然发现鸟哥就在旁边,原来鸟哥。。。,以后戒烟的理由又少了一个。。。哎!
上照片:
![鸟哥](/images/phpcon-2015-beijing/09.jpg)
鸟哥开场照。
![鸟哥](/images/phpcon-2015-beijing/10.jpg)
这一张是现场表演写代码,演示 PHP7 的一些新特性。
Laurence 的演讲分为两部分,先是 PHP7 的一些新特性以及弃用的一些东西,简单说了一下如何将代码迁移到新版本;然后就是性能。这也是他在 PHP 项目组中的主要工作。根据他自己测试的数据,7的性能提升确实明显,已经达到跟 HHVM 不相上下的程度,瞬间甩开 Python、Ruby 好大一截。目测 PHP 程序员工资要涨的节奏啊!
结束的时候鸟哥回顾了一下成长经历,对我等深有启发。
下午场主要是关于 SAE(Sina App Engine) 和程序员职业生涯的一段介绍,没怎么仔细听。
![圆桌会议](/images/phpcon-2015-beijing/11.jpg)
最后是圆桌会议,听听前辈们的对于 PHP 看法。嘉宾都被问到为什么选择了 PHP,韩天峰回答,因为只有 PHP 的环境被我配起来了。果然是世界上最好的语言!(PS: 其实我的真爱是 Ruby。。。也许正是这个原因,两天的抽奖都没抽到我。)
![](/images/phpcon-2015-beijing/12.jpg)
晚上离开北京,在广场上,八点整,响起了一段伴随着钟声的音乐,Allen 问我,这是什么钟声?我不知道,答:丧钟为谁而鸣?
Allen 道:仔细听,这叫《东方红》。
![](/images/phpcon-2015-beijing/13.jpg)
我环顾广场一圈,看着背包上的 PHP 吉祥物道:感觉回到了七十年代。
![](/images/phpcon-2015-beijing/14.jpg)
附一个现场视频 Think 2015 PHP 技术峰会(北京站)