分享一个轻量级的 PHP 路由实现

2016-07-02 20:38:49 +08:00
 takashiki

Github:https://github.com/takashiki/cdo

Git@OSC:http://git.oschina.net/takashiki/cdo

使用很简单,不过只支持 pathinfo 模式,贴一段示例代码:

$do = new \Mis\Cdo();

$do->get('/', function () {
    echo 'hello world';
});

$do->post('/', function () {
    $name = isset($_POST['name']) ? $_POST['name'] : 'world';
    echo "hello {$name}";
});

$do->any('/(\d+)', function ($id) {
    echo $id;
});

/**
 * When using named subpattern, order of parameters is not matter.
 * eg. /book/2
 */
$do->any('/(?P<type>\w+)/(?P<page>\d+)', function ($page, $type) {
    echo $type.'<br>'.$page;
});

$do->run();

或者:

use Mis\Cdo;

Cdo::get('/', function () {
    echo 'hello world';
});

Cdo::run();

写这个项目的初衷是前断时间在写一个小项目时发现现在绝大多数 PHP 的路由都不足够轻量,在只有各位数的路由时 QPS 也只能达到不使用路由时的一半左右,于是便自己写了一个,欢迎大家批评指教。

这是在 index 文件里直接打印 hello world 的 qps:

这是使用了路由后的qps:

4442 次点击
所在节点    分享创造
15 条回复
BMW
2016-07-02 22:56:48 +08:00
manhere
2016-07-02 23:02:43 +08:00
在用 FastRoute
likezun
2016-07-02 23:09:48 +08:00
造轮子...
kumakiti
2016-07-02 23:23:56 +08:00
很棒,特别好的学习资料~
fhefh
2016-07-03 10:51:01 +08:00
nice mark~~~
void1900
2016-07-03 10:55:21 +08:00
102400
2016-07-03 17:19:47 +08:00
几乎所有这种形式的路由都是学习 Sinatra 的吧?
sensui7
2016-07-03 17:32:19 +08:00
一楼的 symfony router,醉了,
takashiki
2016-07-03 17:54:55 +08:00
@BMW
@manhere
@likezun
@void1900

之所以造这个轮子是因为在做十分迷你的项目的时候发现加个路由性能损耗就十分严重了,同样的机器跑 ab , fastroute 只有五六百的 qps ,有些更轻量的路由像 Macaw 也只有八百左右。
muyege
2016-07-04 09:31:32 +08:00
https://github.com/noahbuscher/Macaw
一个文件就搞定了,目前能找到的最简单的了
jinzhe
2016-07-04 14:13:05 +08:00
真心不够优雅
ichou
2016-07-05 09:15:42 +08:00
没有实现通配符而使用正则来写路由规则的话,代码可读性不忍直视
JiaFeiX
2016-07-05 09:56:05 +08:00
要性能的话,不是写在 nginx 层面来实现吗?
pangliang
2016-07-07 15:48:15 +08:00
真正简单的就是:"约定大于配置"
pangliang
2016-07-07 16:16:00 +08:00
盲写一个:

list($_,$cls,$func)=explode("/",$_SERVER['REQUEST_URI'],3);
include_once($cls.".php");

$obj=new $cls();
$obj->$func($_REQUEST);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/289851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX