两个热门的 PHP 框架 Symfony vs Laravel 详细分析对比(2018 版本)

翻译 Summer ⋅ 于 3个月前 ⋅ 最后回复由 梦康 1周前 ⋅ 2990 阅读 ⋅ 原文地址

站点的翻译文章创建时,您将第一时间收到通知。

这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍

PHP 是专注于 Web 开发的伟大且现代化的编程语言。大约 80% 的 Web 应用程序都是用 PHP 驱动的,从零开始对每个项目进行编码是不现实的,很多时候,Web 开发人员会利用各种框架和工具来加快开发速度。例如: Yii、Phalcon、Slim、或 CodeIgniter… ,但我们今天对两个 PHP 框架进行比较,即 Symfony VS Laravel。

总而言之,使用 PHP 框架的一些优点:

  • 更快的开发
  • 有组织和可复用的代码
  • Web 应用程序的可扩展性
  • 视图层和逻辑层的分离(MVC 模式下)
  • 相关的实践和工具
wujunze 翻译于 3个月前

根据调查和最近五年(2012-2017)的 Google 趋势,Laravel 毫无疑问已经成为最流行的框架。 Symfony , 使用量第二的框架, 支持更大的项目像 Drupal CMS , 并且奇迹般地支持 Laravel。

file

庞浩然Paul 翻译于 3个月前

接下来我们来看一下 Symfony 与 Laravel 的各项信息与我们开发项目需要在意与了解的信息。我们比较一下这两框架的的基本信息。

对比项 Symfony Laravel
出版发行时间(年) 2011 2011
当前版本 3.3 5.4
LTS + +
License (Free for commercial use) MIT License MIT License
供该框架使用的包量 7,500 16,900
基于该项目做的开源项目量 25,300 76,200
该项目在 StackOverflow 上的提问数量 51,500 67,900
Github stars ratings 14,900 7,800
贡献人数 1,400 1,400

这段译文的数据似乎已过时,译者只针对了版本,Star, Contributions 做了查阅,随着时间的推移,数值可能会有变化,请点击以下链接自行查看。
( LaravelSymfony )

仰望 翻译于 3个月前

总体介绍

Symfony

法国 Sensio Labs 公司的 Symfony 框架提供了大量可复用的组件,库和包。Web 开发者可以使用 Symfony 来完成如对象配置,认证,模板等任务。由于自带了很多特性,所以它熟悉起来也不是那么容易。从结构上看,它是一个灵活的全栈框架,使用 Twig 作为模板引擎。

Laravel

使得 Laravel 框架尤其伟大的是它广泛和活跃的社区,以及大量文档和教程对它各方面提供的支持。除了大量特性和『快速』构建Web的能力外,它拥有自己的模板引擎 —— Blade,和一个 PHP 的微框架 —— Lumen,用于开发 API 和其他微服务。可以查看 Laravel 社区的视频介绍。

小结

当然,两个框架都有共同之处。它们都使用 PHP 语言,在操作系统方面都跨平台,都是多用户和多语言内容。Symfony 和 Laravel 的接口都采用 MVC (model-view-controller)模式,支持文本搜索以及 scaffolding.

接下来,让我进入 Laravel 和 Symfony 的特性比较。

JiaZombie 翻译于 3个月前
rayle 审阅

代码结构

Symfony 由可复用的组件组成,并提供更好的模块化。尽管这两个框架都使用 MVC 架构来开发 Web 应用程序,但 Symfony 对于复杂项目来说是更好的选择。人们可以以模块化的方式为一个项目制作大量的组件,使开发更加快速。

Symfony 与 Laravel 不同的是模板引擎。Symfony 是 Twig 而 Laravel 是 Blade 。从代码复用性方面来看, Blade 更具有优势。因为不用像 Twig 中一样两次定义相同的函数。

参数 Symfony Laravel
设计 工厂模式,组合模式,查询生成器,享元模式,观察者,依赖注入,数据映射 建造者模式,工厂,资源库模式,策略模式,提供者,Facade ,动态记录,依赖注入
兼容 REST API + (需要 FOSRestBundle) +
脚手架 + +
多语言 + +
MVC + +
HTML 模板引擎 Twig Blade
通过 composer 安装 + +
PHP 规范建议 + +
ORM + +
PhpStorm 插件及支持 + +
数据库和存储驱动程序支持 + +
全文检索 + ( ElasticSearch ) + ( ElasticSearch)
持续集成和测试 -- PHPUnit

Laravel 和 Symfony 都暗含了用于数据转换的对象关系映射( ORM )技术。两个框架多可以多种方法来安装,令开发者欣喜的是,这两个框架皆可通过 Composer 进行安装。

学冰 翻译于 3个月前

查看其他 1 个版本

持续集成(CI)

每当代码发生变化时,都要进行代码审核、更新配置以及各项测试。CI(持续集成)是一种针对早期代码错误的自动化实践。PHP 环境中有各式各样的持续集成服务和工具,让我们来看看这两个框架是如何支持CI服务的。这是我们的小 Symfony 和小 Laravel 的第二回合比试。

CI 服务 Symfony Laravel 备注
Travis Ci + + 通过 Git 使用,没有依赖任何框架。
Style CI + + 通过 Git 使用且在 Symfony 和 Laravel 中都有预设。
Drone + + 通过 Git 使用,没有依赖任何框架。
Codeship + + 支持所有的主流 PHP 框架,通过 Git 使用,需要有效的参数。
Circle CI + + 与所有的框架兼容,有文档和 Laravel 示例 PHP Laravel demo
Jenkins + + 通过 Git 使用,独立于任何框架,有 Laravel 模板 Laravel template

Jenkins 似乎是目前最受欢迎的 CI 服务,在 Laravel 和 Symfony 的 CI 包托管服务中都能找到它。关于对数据库的支持,通常认为 Symfony 略胜一筹(NoSQL, Dynamodb 等等),这方面 Laravel 则没有什么筹码。

Larry_Rui 翻译于 3个月前

查看其他 1 个版本

性能和可扩展性

Symfony 和 Laravel 都缓存视图,而 Symfony 默认也缓存了源码。还记得 Laravel 是用 Symfony 构建的有趣事实吗?更有意思的是, 当 Symfony 在缓存源码的时候,Laravel 运行得更快。性能提升了不少! 顺便一提, 一个使用 Laravel 的网站的平均加载时间大约是 60 毫秒,而一个 Symfony 的网站大约是 250 毫秒。

测试用例

为了证明我们以上的分析,同时为了对比下 Symfony 和 Laravel 的性能,我们决定创建一个测试的 Web 应用。一个简单的单页应用,每个框架打开它都只需要一个动作。

这次任务的目标是:

  • 从数据库取 1,000 条记录(每条都有唯一的名称,价格和库存)
  • 为他们创建1,000 条订单
  • 更新数据库里的库存量
  • 计算订单的总价

我们做了加载测试的模拟(使用 Apache 基准)。用为物联网提供支持的最大的两个 web 服务器 —— Apache 和 Nginx。测试结果如下表格:

测试项 Symfony (秒) Laravel (秒)
Apache(10 个请求,1 个用户) 15.35 6.50
Apache(1 000 个请求,10 个用户) 638.56 202.66
NginX(10个请求,1 个用户) 7.53 6.44
NginX(1 000 个请求,10 个用户) 658.73 211.85
JiaZombie 翻译于 3个月前

文档与学习曲线

在学习资料和文档方面,Laravel 远超 Symfony。Laravel 的引导和进阶视频(例如:Laracasts)覆盖了由浅入深的各个部分,且在 Laravel Github docs 上但资料范围广泛。 Symfony documentation 也描述了其在组件, 包, 服务容器等方面但内容。

方面 Symfony Laravel
学习曲线
安装复杂度
事件/通信 + +
文档 简陋 文本与视频
鉴权 + 即将到来

大量Web开发者争论说,Symfony 的学习曲线比 Laravel 要高一点(高很多)。Laravel 感觉更直观切更适合构建后端 Web 项目,且更契合类似 Angular 之类的前端 JavaScript 框架。

ninerec 翻译于 3个月前

Symfony vs Laravel: 总结

坦率的讲,laravel 最近几个月发展势头强劲。它更适合用于那种投入资源更少但发布更快的大型 web 项目。与此同时,Symfony 更适合构建企业级的 web 项目,但是也要求开发者拥有更高级的技能。

Laravel 是 PHP 生态系统中最强有力的竞争者,因为它具备构建现代化 web 应用的必备特性。

Laravel 的创始人是 Taylor Otwell。

总结一下,Symfony 的主要优点是:

  • 多种扩展选项
  • 比大多数 PHP 框架快
  • 适应性和最佳性能(以 HTTP 为中心的请求 / 响应)
  • 可复用组件节约时间和节省成本
JiaZombie 翻译于 3个月前

而 Laravel 框架的主要优点则是:

  • 高级的查询构造器机制
  • 数据的无痛迁移与整体管理
  • 自动加载能力(无需手动维护)
  • 更简单的认证机制
  • 使用事件对象原则来代替事件字符串处理程序的新事件。

选哪一个决定权在你手中。

JiaZombie 翻译于 3个月前

原文地址:https://thinkmobiles.com/blog/symfony-vs...

译文地址:https://laravel-china.org/topics/9236/tw...


本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本帖已被设为精华帖!
回复数量: 3
  • slince To do better 5
    3个月前

    原作者写这篇文章的时候很明显是带着偏向性的情绪,写了很多不实的东西;

    Symfony 缺少持续集成和测试

    不知道作者表达的意思,如果是说 Symfony 没有单元测试的话,那么看这里 https://travis-ci.org/symfony;Symfony的组件中单元测试的代码量和源代码量基本是持平的。

    Symfony 的文档简陋:

    Rst文档仓库 https://github.com/symfony/symfony-docs;如果感受不够直观可以看官网文档 http://symfony.com/doc/current/index.html ;我认为这样的文档不能称之为“简陋”,如果这样的文档也叫简陋的话那 laravel 的文档还能看吗。

    从代码复用性方面来看, Blade 更具有优势。因为不用像 Twig 中一样两次定义相同的函数。

    “因为不用像 Twig 中一样两次定义相同的函数” 这句话不知从何而来;Twig 是个易扩展的架构,不管是 tag, function, filter 除了内置还可以自定义自己的,也许是这一点让作者有了两次定义相同函数的机会;支持自定义的功能做法没有错,但你用错了是你自己的问题。

    Twig 是一个现代化的模板引擎,如果你用过python的 jinja, javascript nunjunks 你会发现它们的语法都是一样的;以后模板引擎的趋势大家心里该有一杆秤。

    关于 ORM

    Symfony 的ORM是基于 Doctrine 的,Doctrine遵循的是标准的 entity/repository 模式与 Eloquent 的 Active Record 不同;有人喜欢 AR 的简单易用有人喜欢 entity/repository 设计感;

    高级的查询构造器机制
    数据的无痛迁移与整体管理
    自动加载能力(无需手动维护)

    这是表示 Symfony 没有吗?https://github.com/doctrine 看这里;

    更简单的认证机制
    在 Symfony 中认证与授权是被抽象成防火墙,是架构在应用之外的高度抽象的东西,如果你理解不了这种抽象你依然可以选择 Guard 这种简单的授权方式,它是官方提供的 Firewall 用法的语法糖,这个可能符合作者的 “更简单”。

    @Summer 翻译文章确实是蛮好的行为,但翻译的质量还是希望能够保证一下;我不觉得这种无脑喷的文章有什么意义;也希望写这种对比文章的同学能够更客观一点。

  • Summer MOD A Life-long learner.
    3个月前

    @Tao 这篇文章踩的点不错,告诉我们在选择框架时,需要审视哪些点,这是我选择翻译这篇文章的初衷。

    每一个人的认知都是有限的,这注定了一个人的观点无法得到所有人的认同,有时候同一段话,不同认知的人理解也是不一样的。所以文章里有一些你认为的错误,是在所难免的,你指出来即可,一起讨论一起成长即可。

    例如说 Symfony 文档简陋 这个事,其实是和 Laravel 的拥有 视频(laracasts.com) + 文档 相对比的。你应该知道 laracasts.com ,如果视频与文字文档加在一起统称 文档,Symfony 的文档确实要弱些。

    不过还是感谢你的辩论,我就认为蛮精彩的 :+1: ,又多了一个有经验的视角来分享知识嘛。

    至于你说的无脑喷,言重了。

  • 梦康
    3个月前

    Symfony的文档比laravel的解释说明型语句要多一些

暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

Elasticsearch-PHP 中文文档

Lumen 中文文档

GraphQL PHP 中文文档

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档