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

2022-01-04 10:54发布

Laravel 有可能被超越,也有可能成为框架界的苹果保持长盛不衰,目前根据其创始人狂热的 Github 活跃度来说后者可能性比较高,当然也得益于其庞大的社区。放眼早年的 Yii 惊艳出世,如今风光被 Laravel 夺取,当一个框架进入极盛时代也有可能进入一个衰败期。

当你作为一个框架设计者来说,尝试为了框架实现百分之覆盖的时候,为什么 Laravel框架有这样一个函数,很多的时候你可能很少用得到。对于现有代码量来说,很少有精通 Laravel的说自己完全掌握细节,除非你是作者。Laravel 核心就是Ioc和服务提供者和定义了庞大的接口 契约,laravel 专门抽出一个包管理,结合容器替换核心。

Laravel 提供了大量助手函数长得像PHP内置一样,在框架中核心中大量使用这些自定义全局辅助方法,这是尽量复用和优雅的结果。你如果要使用这些库,必须要加载那一坨辅助方法,记忆很混乱很是不爽。这使得我想到了 yii 为了复用一层套一层的继承。

组件独立性

Laravel 像是苹果,很多东西都封装好了,稍微有点封闭。相对于 Symfony 而言和其他 Composer 包来说,比如我们 tp3 的旧项目引入包都是直接 Symfony 的包和一些其他的包,由于 Laravel 包不够干净基本不考虑。

单元测试覆盖

Laravel 核心单元测试覆盖不足,Laravel 的功能非常多,每一个版本都很新功能被添加,如果你看过 Symfony ,cakephp,Yii2 重型单元测试,根据 Laravel 核心包代码量和其3700多测试用例,9000断言,其中cakephp10000单元测试28000断言,yii2 5200例测试24000断言,Symfony重得不能再重了,虽然轻了很多,Laravel 底层相当量代码都未纳入单元测试,稳定性不是非常好。

应用单元测试,很多的基于Laravel没有把单元测试好起来,整个项目就自带的两个例子。应用单元测试测试一下服务层和一些公共库就不错,至于其他的交给测试部门的同事用python搞吧。

封装有时候过了

举一个简单的例子,password_hash 就一行代码完成password生成的事情都要专门封装一个 hash 组件。里面有很多类似的,做得太猛了。封装过度就是用也不是不用感觉吃亏了,非常纠结,很多底层的代码绕来跑去相当头疼。随着框架的复杂度越来越高,新手驾驭的成本越来越高,老手造轮子,一些轻量级的轮子有可能会取代。

性能问题

当 PHP 语言都成为性能问题,重型框架性能不得不成为问题。我现在的公司开发B2b服务用的tp3,竞争对手用的java,早年的时候我们就发现我们系统速度不行,用户反馈的是我们的系统不流畅,还不如最早的面向过程的版本快,加了很多服务器进行了很多有所缓解。融资后去年用户猛增加上早期版本的升级用户,一个超大的单体应用,经常502这给整个销售团队带来了很大的影响,老板大发雷霆,年初就开始拆分微服务,选用的框架是架构师浅封装的yaf和golang,查分后服务器优化,数据库优化,redis优化,整个项目的整体大幅度提升。

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

优美的框架

Laravel缺失是用起来很爽的框架,尤其是创始人具有高度的极客精神和理想主义完美精神,是最接近完美的PHP框架,也很值得程序员去学习研究其写法,写出更加严谨的PHP代码。中国太多键盘侠了,特别缺乏这种理想主义精神的程序员,能跑就行了管它的,等欧美那些“傻子”造好了拿来就用多安逸。作为一个多年的PHP程序员对于Lavarel有着特别的崇敬,也对于引领自己入门的Tp怀有感激之情,现在也用一用,也自己尝试发明新的轮子,学习PHP扩展底层,golang等新的东西。对于laravel这里只找了一些其中一个哈姆雷特的想法,其他的都是无可挑剔的,因为我知道造轮子是多么的辛苦和心酸。

例如说我想造的轮子

第一个要解决国内框架的痛点,大部分在单元测试做得不是好,包括我们的老大哥tp5,easywechat倒是做得相当好。尽可能得为每一个框架中PHP脚本编写单元测试,功能不要那么多,测试一定要写好,稳定是bug少的代码才是好代码。每一个PHP 脚本都要上严格模式,尽可能为每一个方法参数定义类型和返回值,提高团队代码质量。关于性能,受Phalcon影响,在各种编写PHP扩展中就zephir最适合大规模的开发扩展库,所把框架的核心用zephir做一哈可以提升性能。例外就是官方可以接入swoole提升性能。最近看到PHP一个提案opcache预加载是乎不错。