2012-06-24 29 views
0

我目前正在为教育(和,如果它是好的,实际的实际)使用自定义MVC框架搞乱,我喜欢调查可能的性能提升的不同场景。MVC路由 - 使用NGINX路由而不是PHP(或Ruby等)

当涉及到URI路径,我熟悉的

/controller/action/id 

和解析出这个数据来控制路由就不会太困难标准的URI格式。现在,我moreso想了解一下是具有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路由时,通过让实际的网络服务器(在这种情况下,nginx)本身处理到控制器的路由或者使用标准的登陆脚本,是否有任何有价值的性能增益(如目录根目录中的index.php)并传递URI进行解析,以便路由很好?

提前致谢。另外,我只是在了解这些事情,所以我衷心欢迎有关我应该做什么的建议。

+0

这里是一个思想实验:你将如何使用你的框架来实现一个双语新闻网站,其中的网址也是半翻译的? –

+0

你提出了一个很好的问题,因为我还没有考虑到。如果我正在考虑其他语言,我可能会在最后添加一个额外的指令(例如/ en,/ es等),并有一个地图可以正确地将uri本地化为我的框架理解并用于正确查询数据库。尽管如此,这仍然是我的头等大事。 –

回答

1

我不会将应用程序逻辑(URL路由)混合到您的HTTP服务器中。很多PHP应用程序曾经依赖Apache .htaccess文件来处理这类事情。它最终变得一团糟。如你所说,它需要重新启动Nginx来更改路由,它也会将你的应用程序绑定到Nginx,除非你想在未来某个日期重写所有你的规则。更糟的是,如果您决定将应用扩展到多台服务器上,则必须为每个上游重复这些规则。

tl; dr保持您的图层分离。

+0

我在想那个,但还是很好奇。非常感谢! –