”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Slim 和 Flight PHP 框架比较

Slim 和 Flight PHP 框架比较

发布于2024-11-07
浏览:201

为什么要使用微框架?

在社交媒体上,新的 PHP 开发人员经常会问“我的项目应该使用什么框架”,通常给出的答案是“Laravel”或“Symfony”。

虽然这些都是不错的选择,但这个问题的正确答案应该是“你需要框架做什么?”

正确的框架应该能够满足您的需要,并且不会包含大量您永远不会使用的功能。

如果您正在制作一个只有一条路线的网站,那么使用 Laravel 或 Symfony 会对网站进行过度设计,而对于复杂的网站,Laravel 或 Symfony 可能是正确的选择。

微型框架非常适合构建不需要全栈框架提供的所有功能的中小型网站。

虽然有很多,但 Slim 和 Flight PHP 都是微框架的绝佳示例。


最近我建立了一个小型网站,要求用户解决 10 个与数据库相关的问题。它具有三种路线和一些基本查询来获取问题并比较答案。

对于这样的小项目,微框架是一个不错的选择。我在 Slim 和 Flight PHP 上构建了该网站来比较它们。

骷髅

如果您之前没有使用过特定框架,那么使用提供的框架项目通常是一个很好的起点。

Flight PHP 的骨架项目几乎符合我的预期,重量轻,MVC 设置简单,易于理解文件夹结构并知道项目中的所有内容应该放在哪里。

对于刚接触该框架的人来说,启动和运行的学习曲线很小。

关于composer库,总共只有5个(包括核心库),4个用于生产。

骨架的制作大小为 1.6Mb。

Slims骨架项目让我大吃一惊,目录结构比我预想的要复杂。更适合用于大型项目而不是小型项目的结构。对于微框架来说,这是出乎意料的。

Slim 骨架比 Flight PHP 重一点。 21 个作曲家库,其中 9 个用于生产。该项目的生产大小为3.3Mb。

两者都是开箱即用,只需要最少的额外配置。

从头开始构建

我决定通过创建自己的设置来构建网站,而不是使用骨架。这样做的优点是我能够根据我的需求定制框架,并了解它们对于不同结构的灵活性。

使用微框架的一大优势是能够构建它们来准确地完成您需要的操作,而无需不必要的开销,并在需要时添加功能和库。

我对 Flight PHP 的设置与框架没有显着不同,虽然我最终得到了更少的目录和不同的作曲家库,但结构上是相似的。

使用 Slim,项目的结构最终与骨架显着不同。

Slim 很灵活,没有对结构做出假设,并且在与骨架完全不同的结构下工作得很好。

Flight PHP 在这种方式上也很灵活,如果需要的话允许更复杂的结构,向框架中添加新的库是直接的。

守则

路由

从路由的角度来看,两者都很好用。它们都很容易设置,无需阅读太多文档。

Flight PHP 中的路由设置比 Slim 稍微简单一些,并且使用的代码更少,但设置起来都不困难。

路由组、正则表达式功能和中间件选项使路由变得灵活,同时仍然易于使用。

数据库连接

使用 Slim,我们期望您应该使用 EloquentDoctrine 等 ORM 来进行数据库查询,而 Flight PHP 为 PDO 提供了一个简单的包装器,可以在以下情况下使用:您需要并且可以选择将 Active Record 添加到项目中以进行查询构建。

对于像我正在从事的项目这样的小项目,使用 ORM 似乎有点多余,所以我最终为 Slim 构建了一个小型 PDO 包装类,类似于 Flight PHP 中内置的一个.

ORM 很棒,但是内置灵活性来选择我希望如何编码数据库查询是一个很好的功能。

通用编码

Slim 和 Flight PHP 框架都擅长让您以自己的方式编写代码。

一些框架往往会强迫您以特定的方式进行编码,有时您会感觉自己正在与框架作斗争。

框架应该与你合作而不是与你作对,这两个框架都感觉像是在与我合作。

Slim 还提供了许多方便的附加组件,包括 CSRF 集成和 HTTP 缓存。

Flight PHP 提供了额外的附加组件,包括权限和 Active Record。

所有这些附加组件都是有用的附加组件,无需使用第 3 方解决方案或构建您自己的解决方案。

在 Flight PHP 中返回 JSON 作为响应比在 Slim 中更干净,Slim 3 有一个方便的 withJson 响应。虽然 Slim 4 更多地遵循 PSR-7,但这确实意味着构建 JSON 响应需要更多代码。

如果我要经常使用 JSON 响应,我可能会创建一个包装器以使其更加方便,同时仍然遵守 PSR-7 标准。

这是两个框架之间的显着差异,Slim 感觉它需要通过创建类来进行更多定制,以清理和简化代码库,而 Flight PHP 已经为您做到了这一点。

Slim 提供了许多辅助中间件。为了使某些功能正常工作,需要中间件。

一个例子是使用 FETCH 从 Javascript 获取数据。 Slim 有一个 getParsedBody 方法来根据 POST 请求创建数据数组。

但是,为了使用它,需要将 addBodyParsingMiddleware 添加到容器中。

这对新开发人员来说有点陷阱,但也提供了对可选功能的访问,这可以通过仅启用您需要的功能来降低框架的整体占用空间。

Flight PHP 通过配置文件实现这一点,一些功能可以通过配置而不是通过中间件启用来打开和关闭。

速度测试

根据基准测试,比较两者有有趣的结果,Slim 在某些方面胜过 Flight PHP,而 Flight PHP 在其他方面胜过 Slim。

在我自己的代码上对这两个框架进行测试表明,Flight PHP 比 Slim 具有更快、更一致的响应时间。

前端

Slim and Flight PHP Framework Comparison

GET 请求返回 JSON

Slim and Flight PHP Framework Comparison

返回 JSON 的 POST 请求

Slim and Flight PHP Framework Comparison

我发现值得注意的是使用 Slim 时的异常峰值。

多次运行这些测试每次都会产生与我上面显示的结果相似的结果,两者的响应时间通常都很好,但 Slim 中的异常峰值在测试 Flight PHP 时不会出现,并且 Flight PHP 通常具有更好的响应时间响应时间。

最后的想法

如果您还没有尝试过微框架,请尝试一下,那里有一些框架,尝试它们并看看每个框架中您喜欢什么和不喜欢什么,这可能是一次很好的学习经历一。

Slim 和 Flight PHP 都是很棒的微型框架。

Slim 是一个坚实的框架,具有一些不错的功能,可以安静地为您工作。

Flight PHP 重量更轻,其简单性使得学习该框架变得非常容易。

良好的响应时间和更简化的代码来实现相同的目标,使其成为微框架使用的一个非常好的选择。

将这两个并排放置后,我确实更喜欢 Flight PHP 而不是 Slim,但与任何框架一样,请尝试一下,看看它是否适合您。

毕竟,正确的框架是一个能够完成您需要它做的事情的框架。

航班 PHP
超薄框架

版本声明 本文转载于:https://dev.to/mrpercival/slim-and-flight-php-framework-comparison-17am?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-04-11
  • 如何将来自三个MySQL表的数据组合到新表中?
    如何将来自三个MySQL表的数据组合到新表中?
    mysql:从三个表和列的新表创建新表 答案:为了实现这一目标,您可以利用一个3-way Join。 选择p。*,d.content作为年龄 来自人为p的人 加入d.person_id = p.id上的d的详细信息 加入T.Id = d.detail_id的分类法 其中t.taxonomy =...
    编程 发布于2025-04-11
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-04-11
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-11
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-04-11
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-04-11
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-04-11
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-04-11
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-11
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-04-11
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-11
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-11
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-11
  • 如何在Java中执行命令提示命令,包括目录更改,包括目录更改?
    如何在Java中执行命令提示命令,包括目录更改,包括目录更改?
    在java 通过Java通过Java运行命令命令可能很具有挑战性。尽管您可能会找到打开命令提示符的代码段,但他们通常缺乏更改目录并执行其他命令的能力。 solution:使用Java使用Java,使用processBuilder。这种方法允许您:启动一个过程,然后将其标准错误重定向到其标准输出。...
    编程 发布于2025-04-11
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-04-11

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3