PHP 已經取得了長足的進步,並在新功能、語法和速度方面不斷改進。生態系統也在不斷擴大,許多開發人員建立了框架來簡化其他開發人員的生活。既有像 Laravel 和 Symfony 這樣流行的全功能框架,也有像 Framework X 這樣輕量級的微框架。
它是 PHP 的輕量級微框架,採用事件驅動、無阻塞架構,類似於 Node.js,非常適合聊天應用或實時通知等高併發和實時應用。
在本文中,我們將探討什麼是 Framework X 以及它與傳統 PHP 框架的區別。
準備工作
首先,確保在電腦上安裝了 PHP 和Composer。安裝完成後,您可以使用此命令將 Framework X 新增到您的專案中:
composer require clue/framework-x
Framework X 不需要複雜的設定。您只需要一個 public/index.php 檔案。下面是一個在主頁上顯示 “Hello World!”
<?php require dirname(__DIR__) . '/vendor/autoload.php'; $app = new FrameworkX\App(); $app->get('/', fn () => \React\Http\Message\Response::plaintext("Hello world!\n")); $app->run();
要執行應用程式,請鍵入:
php public/index.php
該命令使用 ReactPHP Socket 元件支援的 PHP 內建伺服器啟動本地伺服器。無需 Nginx 或 Apache。伺服器將在http://127.0.0.1:8080
上執行,並顯示 “Hello World!”。
除了純文字,您還可以返回 JSON 資料。例如:
<?php require dirname(__DIR__) . '/vendor/autoload.php'; $users = [['name' => 'Jon Doe'], ['name' => 'Jane Doe']]; $app = new FrameworkX\App(); $app->get('/', fn () => \React\Http\Message\Response::json($users)); $app->run();
非同步操作
PHP 操作通常是阻塞和同步的,這意味著每個任務必須在下一個任務開始之前完成。Framework X 基於 ReactPHP 庫構建。
ReactPHP 是一個提供 EventLoop、Stream、Promise、Async 和 HTTP 等元件的庫,這些元件可實現非同步操作。因此,任務可以併發執行,無需等待其他任務完成。這非常適合同時處理多個連線、HTTP 請求或 I/O 操作。
在本例中,我們更新了 index.php,以獲取 API。我們不使用 curl_*
函式,而是使用 HTTP 元件 來進行非同步請求。
$app = new FrameworkX\App(); $app->get('/', function () { echo "Start\n"; (new \React\Http\Browser()) ->get('https://www.hongkiat.com/blog/wp-json/wp/v2/posts') ->then(function () { echo "End (API)\n"; }); echo "End\n"; return \React\Http\Message\Response::plaintext("Hello world!\n"); }); $app->run();
通常,外部 API 請求會阻止頁面渲染,直到請求完成。但是,由於 ReactPHP HTTP 元件處理的是非同步操作,頁面會立即載入,日誌就是證明。
與傳統 PHP 設定相比,Framework X 能夠處理更多併發請求,大大加快了頁面載入時間。但它到底有多快?
速度
我在一個基本的、廉價的 DigitalOcean droplet 上測試了 Framework X,它有 1 個 vCPU 和 1GB 記憶體。它可以毫不費力地處理每秒約 4000 個請求。
Concurrency Level: 50 Time taken for tests: 22.636 seconds Complete requests: 100000 Failed requests: 0 Keep-Alive requests: 100000 Total transferred: 17400000 bytes HTML transferred: 1300000 bytes Requests per second: 4417.69 [#/sec] (mean) Time per request: 11.318 [ms] (mean) Time per request: 0.226 [ms] (mean, across all concurrent requests) Transfer rate: 750.66 [Kbytes/sec] received
即使有額外的工作量,如磁碟讀取操作和從 JSON 檔案渲染 100 個列表,它每秒仍能處理約 2700 個請求。
Concurrency Level: 50 Time taken for tests: 36.381 seconds Complete requests: 100000 Failed requests: 0 Keep-Alive requests: 100000 Total transferred: 296700000 bytes HTML transferred: 280500000 bytes Requests per second: 2748.72 [#/sec] (mean) Time per request: 18.190 [ms] (mean) Time per request: 0.364 [ms] (mean, across all concurrent requests) Transfer rate: 7964.31 [Kbytes/sec] received
我敢肯定,如果伺服器規格更高,速度會更快。
小結
Framework X 是一款功能強大、輕量級的 PHP 微型框架。它以非同步方式執行,能夠高效處理多個任務,類似於 Node.js。無論是構建簡單的應用程式,還是複雜的高併發或實時應用程式,它都是一個完美的框架。
評論留言