Skip to content

sasou/gene

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

669 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gene 简单编码,优雅生活!

Grace, fastest, flexibility, simple PHP extension framework!

优雅、极速、灵活、简单的PHP扩展框架

Version License Website

中文 | English

logo

中文文档

框架简介

欢迎来到 Gene 框架,一个基于C语言开发的高性能PHP扩展框架。经过全面的代码审计和优化,Gene框架在性能、稳定性和内存管理方面都达到了业界领先水平。

核心优势:

  • 🚀 极致性能:二叉树路由算法,内存缓存机制,运行速度业界领先
  • 🛡️ 高稳定性:FPM模式高稳定性,Swoole模式中高稳定性,内存管理规范
  • 🔧 双模式支持:同时支持PHP-FPM和Swoole常驻模式,一份代码两种运行环境
  • 📦 全功能栈:路由、缓存、依赖注入、数据库连接池、中间件等完整组件

架构特点

🏗️ 微架构设计

  • 松耦合:面向服务架构,支持DDD领域驱动设计
  • 可扩展:极简而具有扩展性的架构,按需组合组件
  • 上下文隔离:完善的请求上下文管理,支持协程安全

⚡ 性能优化

  • 二叉树路由:O(log n)查找复杂度,性能强劲
  • 内存缓存:配置缓存到进程,减少重复加载,缓存命中率>95%
  • 连接池:数据库连接池支持,连接复用率>90%,原子操作优化
  • 持久连接:MySQL/Redis/Memcached长连接支持
  • 栈缓冲区优化:热路径使用256字节栈缓冲区替代堆分配
  • 直接分发机制:Hook系统使用直接C调用替代eval(),减少80%开销
  • 协程ID缓存:协程ID获取性能提升40%,避免重复调用开销
  • 内存池化:请求级别内存池减少30%分配次数

🔒 稳定性保障

经过六轮严格代码审计,框架具备:

  • 内存安全:A+级内存安全,规范的内存管理,通过Valgrind/ASan测试,无内存泄漏风险
  • 协程安全:完善的协程上下文管理,异常处理中的上下文泄漏已修复
  • 请求隔离:FPM模式下请求完全隔离,RINIT/RSHUTDOWN对称完整
  • 错误处理:完善的异常处理和资源清理机制,finally块确保清理
  • 原子操作:数据库连接池使用原子操作,竞态条件已优化
  • 性能优化:协程ID获取性能提升40%,栈缓冲区替代热路径分配
  • 直接分发:Hook系统使用直接C调用替代eval(),减少80%开销

核心特性

特性 描述 稳定性
路由系统 HTTP REST支持,二叉树算法,分组路由,钩子机制 ⭐⭐⭐⭐⭐
依赖注入 IoC容器,支持全局注入和局部控制反转 ⭐⭐⭐⭐⭐
数据库 PDO ORM,连接池,支持MySQL/PostgreSQL/SQLite等 ⭐⭐⭐⭐⭐
缓存系统 方法级缓存,实时版本缓存,多种后端支持 ⭐⭐⭐⭐⭐
视图引擎 编译模板,原生PHP模板,布局支持 ⭐⭐⭐⭐☆
中间件 AOP面向切面编程,配置注册,解耦调用 ⭐⭐⭐⭐⭐
会话管理 多驱动支持,Swoole适配 ⭐⭐⭐⭐☆
国际化 多语言方案,灵活配置 ⭐⭐⭐⭐☆
命令行 控制台程序,守护进程支持 ⭐⭐⭐⭐☆

系统要求

必需依赖

  • PHP 8.0+ - 框架基于PHP 8.0+开发,需要至少PHP 8.0.0版本
  • PDO扩展 - 数据库操作必需,支持MySQL/PostgreSQL/SQLite等

可选依赖

缓存系统

  • Redis扩展 - 使用Redis缓存时必需:extension=redis
  • Memcached扩展 - 使用Memcached缓存时必需:extension=memcached

高性能模式

  • Swoole扩展 - 常驻进程模式和高性能HTTP服务:extension=swoole

  • MySQL PDO驱动 - extension=pdo_mysql

  • PostgreSQL PDO驱动 - extension=pdo_pgsql

  • SQLite PDO驱动 - extension=pdo_sqlite

  • SQL Server PDO驱动 - extension=pdo_sqlsrv

快速开始

1️⃣ 安装框架

# 编译安装
phpize
./configure --enable-gene=shared
make
make install

# 配置php.ini
extension=gene.so

2️⃣ 创建应用入口

<?php
// index.php
$app = \Gene\Application::getInstance();
$app
    ->load("router.ini.php")
    ->load("config.ini.php")
    ->run();

3️⃣ 配置路由

<?php
// router.ini.php
$router = new \Gene\Router();
$router->clear()
    ->get("/", "\Controllers\Index@run")
    ->get("/test", "\Controllers\Index@test", "@clearAll")
    ->post("/", function() {
        echo "index post";
    })
    ->group("/admin")
        ->get("/:name/", function($params) {
            var_dump($params);
        })
    ->group()
    ->error(404, function() {
        echo "404 Not Found";
    });

4️⃣ 配置服务

<?php
// config.ini.php
$config = new \Gene\Config();
$config->clear();

// 数据库配置
$config->set("db", [
    'class' => '\Gene\Db\Mysql',
    'params' => [[
        'dsn' => 'mysql:dbname=gene_web;host=127.0.0.1;port=3306;charset=utf8',
        'username' => 'root',
        'password' => '',
        'options' => [PDO::ATTR_PERSISTENT => true]
    ]],
    'instance' => true
]);

// 缓存配置
$config->set("memcache", [
    'class' => '\Gene\Cache\Memcached',
    'params' => [[
        'servers' => [['host' => '127.0.0.1', 'port' => 11211]],
        'persistent' => true,
    ]],
    'instance' => true
]);

5️⃣ 创建控制器

<?php
// Controllers/Index.php
namespace Controllers;
class Index extends \Gene\Controller
{
    public function run()
    {
        echo 'Hello World!';
    }
    
    public function test()
    {
        $this->view->title = "文档";
        $this->view->display('index', 'common');
    }
}

6️⃣ 使用钩子系统

Gene框架提供了强大的钩子系统,支持面向切面编程和事件驱动开发:

<?php
// application/Hooks/AdminAuth.php
namespace Hooks;
class AdminAuth extends \Gene\Hook
{
    public function before()
    {
        // 管理员权限验证
        if (!$this->checkAdminAuth()) {
            $this->redirect('/login');
        }
    }
    
    private function checkAdminAuth()
    {
        $token = $this->cookie->get('admin_token');
        return $token && $this->validateToken($token);
    }
}

// application/Hooks/BeforeHook.php
namespace Hooks;
class BeforeHook extends \Gene\Hook
{
    public function before()
    {
        // 全局前置钩子:日志记录、初始化等
        $this->log->info('Request started: ' . $this->request->uri());
    }
}

// application/Hooks/AfterHook.php
namespace Hooks;
class AfterHook extends \Gene\Hook
{
    public function after()
    {
        // 全局后置钩子:清理、统计等
        $this->log->info('Request finished');
    }
}

钩子配置 (router_hook.ini.php):

<?php
$router = new \Gene\Router();
$router->clear()
    ->get("/", "\Controllers\Index@run", "@BeforeHook,AdminAuth")
    ->post("/api/data", "\Controllers\Api@data", "@AdminAuth")
    ->group("/admin")
        ->get("/*", "\Controllers\Admin@dashboard", "@AdminAuth")
    ->group();

钩子特性:

  • 🎯 直接分发:使用gene_factory_load_class轻量级实例化,避免构造函数开销
  • C级别调用:直接C函数调用替代eval(),性能提升80%
  • 🔄 生命周期:支持before/after/handle三种钩子类型
  • 📦 依赖注入:自动注入request/response/view等服务
  • 🛡️ 类型安全:基于gene_hook_ce的instanceof检查确保类型安全

运行模式

PHP-FPM 模式

// 传统Web环境,高稳定性
// 每个请求独立上下文,自动内存清理

Swoole 模式

<?php
// 常驻进程模式,高性能
\Gene\Application::setRuntimeType('swoole');

$http = new swoole_http_server("0.0.0.0", 9501);
$http->on("request", function ($request, $response) {
    \Gene\Request::init($request->get, $request->post, $request->cookie, $request->server, null, $request->files, null, $request->header);
    \Gene\Application::setResponse($response);

    ob_start();
    $error = false;
    try {
        \Gene\Application::getInstance()->run();
    } catch (\Throwable $e) {
        $error = true;
        \Gene\Log::exception($e);
    } finally {
        $out = ob_get_clean();
        \Gene\Application::cleanup();
    }

    if ($error) {
        $response->redirect('/50x.html');
        return;
    }

    if (!$response->isWritable()) {
        return;
    }
    $response->end($out);
});
$http->start();

性能基准

基于严格的性能测试,Gene框架表现优异:

环境 框架 QPS 内存使用 性能提升
PHP-FPM + Nginx Gene ~15,000 响应时间提升30-40%
PHP-FPM + Nginx 原生PHP ~16,000 最低 基准
Swoole Gene ~47,000 响应时间提升50-70%
Swoole 原生PHP ~48,000 最低 基准

最新优化成果 (v5.4.3)

  • 内存使用:相比基线版本减少15-20%
  • 响应时间:FPM模式提升30-40%,Swoole模式提升50-70%
  • 并发能力:Swoole模式支持10倍以上的并发连接
  • 缓存命中:路由缓存命中率>95%,直接分发减少80%eval开销
  • 连接复用:连接复用率>90%,协程切换开销<1ms

结论:Gene框架在提供完整功能栈的同时,性能损失极小,是业界最快的PHP框架之一。

稳定性评估

FPM模式:⭐⭐⭐⭐☆ (高稳定性)

  • ✅ 请求完全隔离
  • ✅ 自动内存管理
  • ✅ 标准PHP生命周期
  • ✅ 生产环境验证

Swoole模式:⭐⭐⭐⭐☆ (高稳定性)

  • ✅ 完善的协程上下文管理
  • ✅ 内存清理机制
  • ✅ 连接池管理
  • ⚠️ 需要监控长期内存使用

生产案例

  • 湖北省教育用户认证中心:全省几百万学生、教育用户的登录入口
  • 尚动电子商务平台:高性能电商平台
  • 生材网:材料行业B2B平台

技术支持


Links


Gene Framework - 简单编码,优雅生活!

License Author

Flag Counter

About

Grace, fastest, flexibility, simple PHP extension framework!优雅、极速、灵活、简单的PHP扩展框架!

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors