前端控制器与静态路由器内存使用

时间:2015-12-18 15:33:28

标签: php design-patterns memory-management routing

请原谅我的无知,但是如何使用前端控制器将内存使用情况与使用静态路由器进行比较?我特别好奇这在PHP中如何应用。

前端控制器(伪代码)

的示例
data['queryset']

静态路由器的例子(我可能称之为错误的东西)

// index.php

$path = getRequestedPath();
$class = 'Controller_'.$path;

if (classExists($class)) {
    $ctr = new $class($req, $resp);
    $ctr->execute();
} else {
    $resp->setError(404);
}

// ...

似乎昨天的框架都是基于第一种模式。现在我的印象是新趋势是使用类似于第二个示例的内容,其中列出了app / api的每个可能路径。

仅仅是我,或者第二个示例是否真的分配内存以将整个应用程序放在内存中,尽管每个请求只提供一个路径?

1 个答案:

答案 0 :(得分:1)

所以,举个例子:

$router->post('/product/:productId', function($req, $resp){
    // function body goes here
});

当你在这样的代码时,你必须明白它并不意味着,函数体正在被执行。它只是匿名函数的定义。

基本上这意味着内存中的function(){ ... }将具有与任何普通函数相同的内存占用。而且,虽然我个人认为,混合路由与调度,这是一个坏主意,这对PHP的总内存使用量没有任何实质性影响(完整应用程序的差异可能最终会像1KB)。

  

PS:我真的很喜欢使用匿名函数初始化PDO和SOAP的东西(如here所示),因为它让我推迟(或者,在某些请求中 - 避免)初始化"昂贵"对象