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

解决方案有几种:

  1. 在 ThinkPHP 默认配置下,前端发送请求的时候,尽量参数用斜杠分隔的形式传递。
  2. 更改 ThinkPHP 的 URL 模式为普通模式,即参数以&分隔。
  3. 在 ThinkPHP 中加载没有此问题的第三方 URL 调度器,或者自己写一个。
  4. 修改 ThinkPHP 的代码。
  5. 其它。。。


相关文章

Tags: , , | Category: LAMP, Web

By belltoy On December 30, 2008 12:24 AM | delicious 收藏 | Twitter 分享

4 条评论

  1. kirin 说:

    我不认为
    把URL参数以斜杠分隔,这样 URL 看起来就比较友好

  2. 流年 说:

    可以设置是否重定向URL,因为不重定向也能解析到GET参数 之前主要是为了url的美化考虑

  3. belltoy 说:

    没找到在哪里可以设置,直接发动框架代码了,哈

  4. afity(com){开源社区++;} 说:

    pathinfo 的确对搜索引擎室比较友好

添加评论

(若看不到验证码,请点击此处。)