30% 的 Laravel 代码是由 Symfony 构成的
Laravel 很适合用来开发业务逻辑复杂的大型 Web 应用。我们知道Laravel 使用了大量的第三方扩展包,其中很大一部分就是 Symfony Components 。我为第三方包在 Laravel 中的使用比例非常好奇,所以就有了这篇文章。
创建项目
首先我们使用以下命令来安装 Laravel:
composer create-project --prefer-dist laravel/laravel my-project
安装成功后,可以看到 vendor/
文件夹里的内容:
新安装的 Laravel 项目默认情况下 vendor/ 文件夹
解析 vendor/ 目录
我用知名的命令行工具 cloc 来统计 每个供应商目录下文件的行数。以下是用 cloc
统计 vendor/laravel/
文件夹的输出样例:
$ cloc vendor/laravel/
907 text files.
901 unique files.
67 files ignored.
T=6.57 s (127.8 files/s, 17502.6 lines/s)
......................................................................
Language files blank comment code
......................................................................
PHP 801 14423 49490 49404
JSON 30 0 0 1286
CSS 1 47 11 229
Javascript 6 19 45 38
SASS 2 11 11 25
......................................................................
SUM: 840 14500 49557 50982
......................................................................
在这个解析结果中,我们只关注 PHP 代码,所以我们忽略非 PHP 文件、空行和注释行。总而言之,Laravel 应用包含 49,404 行由 Laravel 自身提供的 PHP 代码。其他主要供应商的统计结果如图:
感谢这些统计数据,我们可以总结如下:
- Laravel 应用默认有 373,345 行 PHP 代码。
- 在 Laravel 应用中,有 13% 的代码来自 Laravel (49,404 行),还有 87% 来自第三方供应商 (323,941 行)。
- 在 Laravel 应用中最大的供应商是 fzaninotto/,它提供了用以在测试中生成仿真数据的 Faker 类库。
- 在 Laravel 应用中,有超过 29% 的代码来自 Symfony (108,407 行代码,其中 81,688 行来自 symfony/,还有 26,719 行来自 Symfony 官方邮件库 swiftmailer/)。
结论
这些统计数据显示了为什么PHP在这些年来一直保持胜利。而其他社区与美国国立卫生研究院(没有发明这里)综合征斗争,献出自己的资源推倒重来,PHP越来越多地遵循PFE(自由的在任何地方找到)理念。 composer和高质量的开源项目是这一现象的主要驱动因素,所以不要忘记感谢他们的工作!
竞争项目(如Laravel和Symfony)之间的这种合作为开发人员带来了许多好处,包括更温和的学习曲线和更丰富,更连接的生态系统。另外,对许多不同项目的同一个图书馆进行战斗测试对于为各种商业应用做好准备。这就是为什么Symfony组件[被大多数PHP项目使用](https://symfony.com/projects),并有[more than 1 billion downloads](https://symfony.com/blog/the-symfony-unico...)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
对的,一开始感到很奇怪,觉得"诶嘿,这框架里面怎么还有别的框架的东西"
站在巨人的肩膀上 才会看的更远
同一个图书馆进行战斗测试 ...............
https://github.com/AlDanial/cloc 好工具
Symfony才是大厂!
@carlclone 我可没机译
@carlclone 翻译是门技术活,要给大家点信心,会慢慢提高的
cloc 好工具。。。。
@Summer 机器翻译:"此外,在许多不同的项目中对相同的库进行战场测试,可以使它们为各种业务应用程序做好准备。" 还是机器翻译更准些................