天天看點

開源PHP應用伺服器:采用Go編寫、支援Early Hints

你是否曾夢想過

一個現代化的 PHP 應用伺服器

能夠突破傳統的束縛

賦予你的項目前所未有的性能和靈活性?

那麼,

FrankenPHP 正是你夢寐以求的解決方案!

開源PHP應用伺服器:采用Go編寫、支援Early Hints

FrankenPHP 是一個基于 Caddy Web 伺服器建構的現代 PHP 應用伺服器,采用 Go 和 C 編寫。它依賴 Go 的标志性功能:goroutines。

開源PHP應用伺服器:采用Go編寫、支援Early Hints

FrankenPHP 特性包括:

  • Early Hints(提前提示):這是 Web 平台的一個全新特性,可以通過提前 30% 的時間加載網站。FrankenPHP 是唯一支援提前提示的 PHP SAPI
  • Worker 模式:一次啟動應用程式并保持其在記憶體中
  • 實時功能:内置的 Mercure 中心。從 PHP 應用程式發送事件到所有連接配接的浏覽器,它們立即作為 JavaScript 事件接收負載
  • 可伸縮:與 PHP 8.2+、大多數 PHP 擴充和所有 Caddy 子產品相容
  • 易于部署:作為 Docker 鏡像的雲原生應用傳遞,相容 Kubernetes 和所有現代雲平台。也可以将您的 PHP 應用程式打包為獨立的、自執行的靜态二進制檔案。
  • 自動 HTTPS、HTTP/2 和 HTTP/3 支援等。

FrankenPHP 使用示範

一條指令運作所有

隻需使用一條指令即可啟動并運作一個生産級别的 PHP 伺服器。

# Dockerdocker run -v $PWD:/app/public -p 443:443 \  dunglas/frankenphp
# 靜态二進制檔案./frankenphp php-server
# 指令行腳本./frankenphp php-cli /path/to/your/script.php           

配置非常簡單

隻需五行配置,由 Caddy 提供支援。

{
    # 啟用 FrankenPHP
    frankenphp
    order php_server before file_server
}


localhost {
    # 啟用壓縮(可選)
    encode zstd br gzip
    # 執行目前目錄中的PHP檔案并提供資産
    php_server
}           

FrankenPHP 亮點介紹

Early Hints:FrankenPHP 原生支援 103 Early Hints 狀态碼,可以将網頁的加載時間縮短 30%。在普通模式和 worker 模式下都支援。

<?php
header('Link: </style.css>; rel=preload; as=style');headers_send(103);
// your slow algorithms and SQL queries 
echo <<<'HTML'
<!DOCTYPE html>
 <title>Hello FrankenPHP</title>
<link rel="stylesheet" href="style.css">HTML;           

Early Hints 是一種 HTTP 狀态代碼 (103 Early Hints),用于在最終響應之前發送初步 HTTP 響應。

這樣,伺服器可在伺服器忙于生成主要資源時,向浏覽器發送關于網頁可能使用的關鍵子資源(例如網頁的樣式表、關鍵 JavaScript)或源的提示。

在等待主要資源期間,浏覽器可以使用這些提示來預熱連接配接并請求子資源。也就是說,Early Hints 通過提前執行一些工作來幫助浏覽器充分利用此類 “伺服器思考時間”,進而加快網頁加載速度。

Worker 模式:啟動應用程式并将其駐留在記憶體中,FrankenPHP 将在幾毫秒内處理傳入的請求。

實時功能:FrankenPHP 配有内置 Mercure Hub,Mercure 允許将事件實時推送到所有連接配接的裝置,它們将立即收到 JavaScript 事件。無需 JS 庫或 SDK。

開源PHP應用伺服器:采用Go編寫、支援Early Hints

FrankenPHP 可與任何 PHP 應用配合使用,并且由于其與 Worker 模式的官方內建,使得 Laravel 和 Symfony 項目比以往任何時候都快。

FrankenPHP 還可以作為獨立的 Go 庫使用,通過 net/http 在任何應用程式中嵌入 PHP。

詳情檢視:

https://github.com/dunglas/frankenphp

繼續閱讀