愚见:
yii2:
优点:gii蛮不错的,简化了开发流程,可以生成绝大数的代码,开发后台等效率还是蛮高的
缺点:前后端完全的分离的趋势下,yii2前后端的耦合的还是有些重了
laravel:
优点:优雅,框架结构组织清晰(抽象了中间件,任务,服务等模块),提供的artisan开发工具开发效率高,社区活跃完善,并且提供了简化的轻量级框架lumen
缺点:貌似代码有些过于优雅丧失了一些性能
thinkphp3.2
优点:简单明了方便快捷,上手快
缺点:缺少面向对象的设计,框架社区相关的辅助工具少
thinkphp5
优点:基本面向对象,可能借鉴了laravel或者ruby on rails, 对于开发者更加友善了
缺点:框架社区相关的辅助工具仍然少
ab大概跑了下性能(无参考价值):
thinkphp5 > lumen > yii2
- 优点:基本结构同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一样完善的错误处理机制。