谢邀。有幸在实际项目中分别用过Yii, ThinkPHP和Laravel,都有差不多一年多。不过后来我们开发微信之类的服务都是用的是深度定制和优化后的Lumen.
这几个框架的优缺点LS(TIGERB )已经说得很清楚了。我这里来补充下:
Lumen:
- 优点:基本结构同Laravel,但是已经为API开发做了一些优化,非常适合RESTful的API服务器
- 缺点:如果要用Lumen做传统web,需要自行加载一些Service,比如session;此外,有些为Laravel写的包会不太兼容Lumen,需要自行修改和调整。
TP3.x显然是一个陈旧的框架不适合现在PHP的开发,我们当时也是果断抛弃了。
为什么不选TP5.x
TP5.x明显借鉴了很多Laravel的设计,但是感觉学得不伦不类的,就行中国特色的xxx一样。而且TP5.x的查询构建器很弱,用起来很不爽。还是Eloquent用起来舒服。(Doctrine的那种类似JavaBean的ORM也用过,但是还是没有Eloquent这种ActiveModel式的好用。)
关于优化
路由:
Laravel默认的路由机制比较适合SEO,但是对于只用作API的服务器来说开销就有点高了。
相对而言TP/Yii默认的module/controller/action的匹配方式效率比较高。
建议API的路由使用传统的 module/controller/action 的方式来匹配。可以参考: laravel-default-routes 或 lumen-default-routes.
环境配置(.env文件):
Laravel的这种机制很不错,可以很方便的区分开发/测试/生产环境。
但是.env文件毕竟还是一个纯文本文件,无法享受到 opcache 的加速,所以在实际项目中,我们使用了 .env.php 来代替。
渲染HTML(视图模版):
Laravel 默认用的 blade 很赞,这也是我们选用 Lumen 的原因之一。
TP 用的基于 taglib 的视图模版实在不敢恭维,而且奇葩的是模版的花括号之间居然不能放空格,所有东西都挤在一起...
当然有兴趣的话用smarty模版就大善了
如果要效率最高,铁定使用原生PHP做模版最佳,但是转义输出都带自己写,一不留神容易有xss漏洞
关于其他语言
高并发场景下go语言显然是一个很好的选择,但是一定要结合实际看看项目组人员能力。
PHPer一般对js会比较熟悉,建议可以用node.js做一些高并发的服务。
当然workerman和swoole也是备选方案,但是workerman和swoole中,我觉得,最大的问题在于缺少node.js一样完善的错误处理机制。