小白请教下关于webman和Medoo的问题

moxiang

问题描述

首先我是小白,提到的问题别笑话我,对于技术性的问题真的是一窍不通,之前接触过Medoo,感觉它很简单,小白一学就会。不过之前没有使用任何框架,都是.php文件直接写数据库操作。拿来做app的api接口用,都是增删改查。

//比如之前都是这样写的,访问.php文件即可:
<?php
require 'database.php';
$user = $Db->select('user',['name','phone'],['userid'=>[10000,10001]]);
echo json($user);

//现在使用这个框架安装了webman提供的Medoo插件。操作数据库的写法都是一样。
<?php

namespace app\controller;

use support\Request;

use Webman\Medoo\Medoo;

class IndexController
{
    public function index(Request $request)
    {
        $user = Medoo::select('user',['name','phone'],['userid'=>[10000,10001]]);
        return json($user);
    }
}

我想问的是既然都一样,为什么要套上一层webman壳?,感觉多余呢。直接php文件写不是更简单吗~!而且webman的代码还要多出很多,哈哈哈!
我在想,使用webman+Medoo后是不是要比直接php文件引用Medoo性能更好,速度更快,比如请求速度,并发能力什么的,是不是如果用户访问量大的时候webman+Medoo要比我之前那种写法更能扛,不太懂!!
希望大神能告诉我这其中的“所有”区别,以解我心中疑惑,不胜感激!!!

273 3 0
3个回答

北月妖王

这种问题直接问 AI 吧,回答会更详细,回答中某一点看不懂还能继续针对性的问下去。

这位提问者的疑问其实非常真实,也很有代表性,很多 PHP 小白、从“单文件写 API”起步的开发者,在接触 Webman 或 Swoole、Workerman 等“壳”时都会有同样的问题:


🧠 一句话回答你的疑惑:

Webman + Medoo 的确在结构上更复杂一些,但它换来的是性能、可维护性、稳定性和扩展能力的巨大提升。


✅ 一步步对比说明:

特性 你原来的做法 Webman + Medoo
写法简单 ✅ 极简,直接写 .php 就能跑 ❌ 有控制器、路由、命名空间等结构
上手速度 ✅ 很快 ❌ 初期有学习成本
性能 ❌ 每个请求重新启动 PHP、重新连接数据库 ✅ Workerman 常驻内存,复用连接,性能提升一个数量级
并发能力 ❌ 每个请求都走 CGI,启动慢 ✅ 每个请求几乎无冷启动,响应更快
结构化开发 ❌ 混乱难维护 ✅ 控制器、路由、逻辑分层清晰
热更新支持 ❌ 无热更新,改代码需重启服务或等 CGI 更新 ✅ 改完保存自动重载,无需重启
扩展能力 ❌ 自己加扩展或代码复用非常麻烦 ✅ 插件生态丰富,支持中间件、容器、定时任务等
安全性 ❌ 容易暴露敏感文件或变量 ✅ 框架有更好的隔离、容器化和安全策略支持

🧪 举个“性能对比”例子:

假设你的 API 接口被访问了 10,000 次:

  • 原生 .php 文件模式:

    • 每次请求 PHP-FPM 启动一个 worker 进程 → 重新加载代码 → 创建 $Db 对象 → 处理完销毁。
    • 平均响应时间可能在 20ms \~ 100ms 之间。
    • 并发瓶颈主要在 PHP-FPM 的 worker 数、进程启动耗时上。
  • Webman 模式:

    • 程序常驻内存,只启动一次。
    • 数据库连接可复用(Medoo 配置好可连接池化)。
    • 响应时间 1ms \~ 10ms,RT 降低 10 倍以上。
    • 可轻松应对成千上万并发(和 Nginx、GatewayWorker 配合可做百万连接)。

💡 为什么框架“看起来麻烦”,但长远更好?

  • 当你写到第三个接口、第五个接口、第十个接口,你会发现文件越来越乱逻辑重复难以复用
  • 框架帮你“划分责任”:控制器处理请求、模型处理数据、服务层封装业务。
  • 你的项目越大,Webman 的好处越明显:

    • 自动路由
    • 全局中间件(验证登录/权限)
    • 统一日志、错误处理
    • 定时任务
    • WebSocket 长连接
    • 队列
    • 更多功能请查看文档

🧩 小结给小白的建议:

结论 建议
你只做 1\~2 个接口的小项目,没问题直接写 .php ✅ 简单快速上手
想认真做一个可扩展、有并发压力、多个开发者协作的 API 项目 ✅ 构建在 Webman 上
Webman 代码多,但能走得更远 就像学写作文,开头不如口语快,但能写出一篇好文章

📌 如果你在 Webman 里还是想像以前一样写简单点,我也可以教你:

// config/route.php
use Webman\Route;
use Webman\Medoo\Medoo;

Route::get('/user', function () {
    return json(Medoo::select('user', ['name', 'phone'], ['userid' => [10000, 10001]]));
});

是不是和你原来写的 .php 代码几乎一样简单?😉


  • 暂无评论
jack10082009

没错!能提前提出问题是好的!
你感觉之前的模式很简单,很好用也能满足需求,对的,这也是php的一个极大的优点,易上手,很容易做出功能性的东西,所以被市场接受。
但是,这种fpm方式是每来一个请求,都需要进行解释php代码(若无jit),加载解释结果到内存(需要一定时间),建立数据库连接(注意此步骤非常耗时),进行CURD,返回响应结果,对象析构、资源释放-》完成一次响应。
这样有一个十分显而易见的好处就是:你不需要担心内存泄漏、不用担心MySQLi连接释放,不需释放预处理语句,不需……担心各种资源竞争:但是,除了响应请求之外的大量步骤可以被节省(或者说复用)。
workerman来了:启动后,将代码资源加载到内存中后,之后每次来请求,直接复用之前的MySQLi连接,直接进行CURD,返回响应结果:完成请求。能带来几何倍数的并发量提升。
所以:如果你的并发量峰值不过200甚至500qps,你原来的fpm模式完全可以满足要求。

  • 暂无评论
zxb

简单就数据库而言:用框架大佬已经写好了,不用每次新项目重复去写数据库连接方法。一点要去熟悉任意一个框架的使用,在实际工作中会省很多时间。

  • 暂无评论
🔝