ThinkPHP 框架的 PATHINFO 模式对站点性能的影响
最近在做的是一个基于 ThinkPHP 框架的webgame项目。在做性能优化的时候,发现 ThinkPHP 框架中 URL 的 PATHINFO 模式对性能有些不好的影响。
首先看看 ThinkPHP 的默认配置注1:
URL_MODEL=1
URL模式: 0 普通模式 1 PATHINFO 2 REWRITE
默认为PATHINFO 模式,提供最好的用户体验和SEO支持
PATH_MODEL=2
// PATHINFO 模式
// 普通模式1 参数没有顺序/m/module/a/action/id/1
// 智能模式2 自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...
默认采用智能模式
把URL参数以斜杠分隔,这样 URL 看起来就比较友好,不管是对人(用户)还是对蜘蛛(机器人)都是。但在处理这种模式下的 URL 参数时,ThinkPHP 却做了影响性能的行为。在这种模式下,如果浏览器的 GET 参数是以常规的方式来传递(即参数以&分隔),ThinkPHP 在处理 URL 是时候,会把这样的参数重新拼成以斜杠分隔的“规范”的形式,然后向浏览器发一个重定向的响应头,让浏览器重新用“规范”的URL形式来请求。而重定向在高性能网站设计中是比较忌讳的,因为增加了浏览器向服务器提交请求的次数,也就增加了前端加载的时间,同时还会增加服务器的负载。这对于设计高性能的站点来说,是个不利的因素。注2
解决方案有几种:
- 在 ThinkPHP 默认配置下,前端发送请求的时候,尽量参数用斜杠分隔的形式传递。
- 更改 ThinkPHP 的 URL 模式为普通模式,即参数以&分隔。
- 在 ThinkPHP 中加载没有此问题的第三方 URL 调度器,或者自己写一个。
- 修改 ThinkPHP 的代码。
- 其它。。。
- 注1:参见 ThinkPHP 手册 http://thinkphp.cn/Manual
- 注2:这是《高性能网站建设指南》里的第十一条规则/建议。
- 参见文章:Best Practices for Speeding Up Your Web Site
我不认为
December 30, 2008 10:06 AM把URL参数以斜杠分隔,这样 URL 看起来就比较友好
可以设置是否重定向URL,因为不重定向也能解析到GET参数 之前主要是为了url的美化考虑
January 25, 2009 12:29 PM没找到在哪里可以设置,直接发动框架代码了,哈
May 25, 2009 9:36 PMpathinfo 的确对搜索引擎室比较友好
August 16, 2010 5:09 PM