」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Slim 和 Flight PHP 框架比較

Slim 和 Flight PHP 框架比較

發佈於2024-11-07
瀏覽:394

为什么要使用微框架?

在社交媒体上,新的 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]刪除
最新教學 更多>
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-04-15
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-04-15
  • 切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    切換到MySQLi後CodeIgniter連接MySQL數據庫失敗原因
    無法連接到mySQL數據庫:故障排除錯誤消息要調試問題,建議將以下代碼添加到文件的末尾.//config/database.php並查看輸出: ... ... 迴聲'... echo '<pre>'; print_r($db['default']); echo '</pr...
    程式設計 發佈於2025-04-15
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符提取最後一行,在Postgresql中,您可能需要遇到與在數據庫中的每個不同標識相關的信息中提取信息的情況。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: ...
    程式設計 發佈於2025-04-15
  • WordPress REST API無頭表單提交指南
    WordPress REST API無頭表單提交指南
    If you’re building a WordPress site, you need a good reason not to choose a WordPress form plugin. They are convenient and offe...
    程式設計 發佈於2025-04-15
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-04-15
  • 在標準C中如何聲明可變大小的數組?
    在標準C中如何聲明可變大小的數組?
    在C中具有變量數組大小的動態數組分配 varible sized數組,也稱為動態數組,在標準的C中提出了挑戰。請考慮以下程序。 0; file*圖片; while(!feof(picture)){ n = fread(sbuf,sizeof(char),siz,picture); / * ....
    程式設計 發佈於2025-04-15
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-04-15
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在銀光應用程序中,嘗試使用LINQ建立錯誤的數據庫連接的嘗試,無法找到以查詢模式的實現。 ”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例中,tblpersoon可能...
    程式設計 發佈於2025-04-15
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    在node-mysql node-mysql文檔最初出於安全原因最初禁用多個語句支持,因為它可能導致SQL注入攻擊。要啟用此功能,您需要在創建連接時將倍增設置設置為true: var connection = mysql.createconnection({{multipleStatement:...
    程式設計 發佈於2025-04-15
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-04-15
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-04-15
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-04-15
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-04-15
  • 如何使用Regex在PHP中有效地提取括號內的文本
    如何使用Regex在PHP中有效地提取括號內的文本
    php:在括號內提取文本在處理括號內的文本時,找到最有效的解決方案是必不可少的。一種方法是利用PHP的字符串操作函數,如下所示: 作為替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式來搜索特...
    程式設計 發佈於2025-04-15

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3