2

我目前正在制作一个自定义 MVC 框架以供教育(并且,如果它很好的话,实际实用)使用,我喜欢研究不同的场景以实现可能的性能提升。

说到URI路由,我比较熟悉的标准URI格式

/controller/action/id

并且从中解析数据以控制路由不会太困难。现在,我更想知道的是让 nginx 将此 URI 字符串解析为某种类型的查询字符串以直接传递给控制器​​之间的性能差异,因此最终会像

/foo/bar/12 => /application/foo.php?action=bar&id=12

代替

/foo/bar/12 => /index.php?controller=foo&action=bar&id=12

甚至

/foo/bar/12 => /index.php?uri=/foo/bar/12   (note that this would be encoded)

我知道 nginx 已经在其他变量中将 url、查询字符串和其他内容传递给 php-fpm,但这只是为了说明我的想法。

这是一件愚蠢的事情吗?我知道通过在 nginx 中明确定义路由意味着我每次更改配置中的路由时都需要重新启动 nginx,这可能是一个缺点。

所以,重申一下这个问题:当涉及到 MVC 路由时,让实际的 web 服务器(在本例中为 nginx)本身处理到控制器的路由或使用标准的登陆脚本(如 index.html)是否有任何值得的性能提升。 php 在目录的根目录中)并传递要解析的 URI 以完美地路由?

提前谢谢。另外,我只是在学习这些东西,所以我全心全意地欢迎关于我应该做什么的建议。

4

1 回答 1

2

我不会将应用程序逻辑(URL 路由)混合到您的 HTTP 服务器中。许多 PHP 应用程序曾经依赖 Apache .htaccess 文件来完成这类事情。它最终变得一团糟。

正如您所提到的,它需要重新启动 Nginx 才能更改路由,并且它还会将您的应用程序绑定到 Nginx,除非您想在将来的某个日期为另一个 HTTP 服务器重写所有规则。更糟糕的是,如果您决定将您的应用程序扩展到多个服务器,您将不得不为每个上游重复这些规则。

tl; dr 将您的图层分开。

于 2012-06-27T20:47:20.367 回答