shuimugan
2018-02-06 00:50:50 +08:00
刚接触 PHP 时喜欢框架之争,到处看框架和学习,接触过的框架可以说是非常多了
时至今日,接触过的 Web 框架有
CodeIgniter
Yii
CakePHP
Laravel
ThinkPHP
FuelPHP
Kohana
Zend
Symfony
Swoole
Workerman
Rails
Tornado
Django
Struts
Koa
Egg.js
ThinkJS
有一些是深度使用的,有一些是技术选型时通读文档,有一些是阅读了部分源码来看下一些设计和实现以及理念的
看到的东西多了,眼界也开阔了一些
Laravel 在我看来有几点无法接受
1. 都说 Laravel 模仿 Rails,但是 Rails 的哲学里"约定优于配置"却没抄过来,起码路由没有.
没有自动路由,每加一个 action 就要去配置文件里写一次,简直恶心死了.
最恶心的是你接手别人项目时候,路由还有几种风格的,分析时在 html 或者 js 里找到个接口,接着想找 php 的具体实现,必须先去看路由的配置文件
2. 全局函数以及 Facade
众多语言 /框架都是先引入,再使用,到 Laravel 这里就不是了
从文档上下文来看,并没有显式引入某个函数 /类,为什么从天而降给了个函数 /类给我用,你到底还偷偷引入了多少东西?
3.文档
文档太简陋了,一堆细节没说,具体实现太绕,经常要看源码
4.view 层
PHP 本身就是个强大的模板语言,非要再往上加个模板引擎,这就算了
不能忍的是 view 文件的路径分隔居然是用"."而不是"/"
当出现了像 view('activities.index')这样的代码,我要去找具体的 view 文件时,就要手工把"."转换成"/",然后在编辑器 /IDE 里跳过去
如果是 view('activities/index')的话,我只需要复制 activities/index 出来,然后使用编辑器 /IDE 的任意文件跳转功能,瞬间就转过去了
如果你非要说装个插件就能解决的话,当我没说过这一条
5.性能
大部分 Laravel 的性能优化文章都是千篇一律,无非就是升 php7,开 opcache,关闭 debug,开路由 /配置缓存,生成 composer 安装的所有依赖的 class map
废话,这些基础谁不会
在没做上述优化之前,我压测 hello world 的结果,qps 只有 5~7
在做完上述这些之后,qps 到了 13~15,哇,性能是原来的 2 倍,开心吗
这个 qps,我按住 F5 都能把网站给刷爆
同样的环境下,也做了上述的优化后,CodeIgniter,Yii,ThinkPHP 这几个框架的 qps 都在 200~400 之间
别说加了 db 操作之后大家都差不多,不少页面能命中缓存的情况下,io 的耗时比 Laravel 的耗时都要低
6.其他
Laravel 自带的队列
去年帮别人改代码时碰到的,消息是经过 PHP 的序列化放进队列的,可改造性差
队列为空就退出进程,官方还教你用 supervisor 去守护,喵喵喵?
神经病一样的存在
Laravel 的诞生并没有解决太多的痛点,或者说他解决的问题在我这里根本就不痛,还带我来了更多的坑,换我在 PHP 框架上选型我也选 Yii
Yii 文档丰富,细节到位,安全指南也够用,没那么多花哨的概念,代码规范又符合直觉,层次清晰,性能虽然没有常驻内存的框架好,但也够用,只需要专心处理业务就是
而且 PHP 不适合玩常驻内存,毕竟没有多少对 GC 的讨论,官方也没有什么指南给你去调优,因为本身设计就是请求完就销毁的
玩异步的话,除了 Swoole 框架有异步文件 IO 函数,其它框架都没有,除非自己用多线程模拟,否则一处阻塞处处阻塞,可选型方案太少,还不如换语言