算法|开发laravel的团队水平如何?能一直火下去吗?有没有更优秀的框架在赶超它?

算法|开发laravel的团队水平如何?能一直火下去吗?有没有更优秀的框架在赶超它?

文章图片

算法|开发laravel的团队水平如何?能一直火下去吗?有没有更优秀的框架在赶超它?

文章图片

算法|开发laravel的团队水平如何?能一直火下去吗?有没有更优秀的框架在赶超它?

Laravel 有可能被超越 , 也有可能成为框架界的苹果保持长盛不衰 , 目前根据其创始人狂热的 Github 活跃度来说后者可能性比较高 , 当然也得益于其庞大的社区 。 放眼早年的 Yii 惊艳出世 , 如今风光被 Laravel 夺取 , 当一个框架进入极盛时代也有可能进入一个衰败期 。
当你作为一个框架设计者来说 , 尝试为了框架实现百分之覆盖的时候 , 为什么 Laravel框架有这样一个函数 , 很多的时候你可能很少用得到 。 对于现有代码量来说 , 很少有精通 Laravel的说自己完全掌握细节 , 除非你是作者 。 Laravel 核心就是Ioc和服务提供者和定义了庞大的接口 契约 , laravel 专门抽出一个包管理 , 结合容器替换核心 。

Laravel 提供了大量助手函数长得像PHP内置一样 , 在框架中核心中大量使用这些自定义全局辅助方法 , 这是尽量复用和优雅的结果 。 你如果要使用这些库 , 必须要加载那一坨辅助方法 , 记忆很混乱很是不爽 。 这使得我想到了 yii 为了复用一层套一层的继承 。
组件独立性
Laravel 像是苹果 , 很多东西都封装好了 , 稍微有点封闭 。 相对于 Symfony 而言和其他 Composer 包来说 , 比如我们 tp3 的旧项目引入包都是直接 Symfony 的包和一些其他的包 , 由于 Laravel 包不够干净基本不考虑 。


单元测试覆盖

Laravel 核心单元测试覆盖不足 , Laravel 的功能非常多 , 每一个版本都很新功能被添加 , 如果你看过 Symfony cakephpYii2 重型单元测试 , 根据 Laravel 核心包代码量和其3700多测试用例 , 9000断言 , 其中cakephp10000单元测试28000断言 , yii2 5200例测试24000断言 , Symfony重得不能再重了 , 虽然轻了很多 , Laravel 底层相当量代码都未纳入单元测试 , 稳定性不是非常好 。
应用单元测试 , 很多的基于Laravel没有把单元测试好起来 , 整个项目就自带的两个例子 。 应用单元测试测试一下服务层和一些公共库就不错 , 至于其他的交给测试部门的同事用python搞吧 。

封装有时候过了
举一个简单的例子 , password_hash就一行代码完成密码生成的事情都要专门封装一个 hash 组件 。 里面有很多类似的 , 做得太猛了 。 封装过度就是用也不是不用感觉吃亏了 , 非常纠结 , 很多底层的代码绕来跑去相当头疼 。 随着框架的复杂度越来越高 , 新手驾驭的成本越来越高 , 老手造轮子 , 一些轻量级的轮子有可能会取代 。
性能问题
当 PHP 语言都成为性能问题 , 重型框架性能不得不成为问题 。 我现在的公司开发B2b服务用的tp3竞争对手用的java , 早年的时候我们就发现我们系统速度不行 , 用户反馈的是我们的系统不流畅 , 还不如最早的面向过程的版本快 , 加了很多服务器进行了很多有所缓解 。 融资后去年用户猛增加上早期版本的升级用户 , 一个超大的单体应用 , 经常502这给整个销售团队带来了很大的影响 , 老板大发雷霆 , 年初就开始拆分微服务 , 选用的框架是架构师浅封装的yaf和golang , 查分后服务器优化 , 数据库优化 , redis优化 , 整个项目的整体大幅度提升 。

如果你公司的项目2.3年就能遇到性能问题 , 对外的服务请放弃使用laravel , 内部系统可以上 。 Laravel 布道师 summer 说公司融资后找一批高级程序员来重构 , 这太理想了 。 当你项目迭代了一两年功能刚刚丰满起来 , 性能扛不住了 , 由于中国的企业你懂的 , 快速开发加班加点的开发 , 文档单元测试往往完全跟不上 , 多批程序员糊了又糊 。 你们知道重构的难度系数有多高 , 早年开发的程序员早离职了 , 我们现在就是面临着重构无比痛苦 , 然而又不得不做 , 同时新业务必须跟着走 。 而此时竞争对手却大步前进 , 很多创业公司倒闭在了重构上 , 重构对于客户来说并没有特别大的感知 , 而且很容易引入bug导致客户体验下降 , 公司血亏 。 核心业务千万不要上 Laravel , 选简单的就好 , 重构太可怕 。 虽然是 tp 性能还好些 , 其他的方面lavavel就好 , 毕竟大部分项目流量有限 , 没有所谓的性能天花板 , 而Laravel优势很明显 。