首页 / 技术 / 正文

解决ThinkPHP执行exec时间过长问题(开始用TP之后遇见的最狗血的问题)

2016年04月10日 1 条评论 ... 技术

这确实是我自从去年5月份开始接触 ThinkPHP 之后遇见的最让我无语的一个问题,对一个优秀的框架的误解和怀疑都让一个配置给完全左右。

在接触这款 PHP 框架的时候,它就号称自己是一个轻量级的框架,于是我信了,其实还有另外的原因,中国的大部分中小企业开发 PHP 项目的时候,大部分都在使用 ThinkPHP 这款框架,好评众多,因此我也想当然也是这么想的,也是这么学的。

可是我写出来的应用,只要涉及到有数据增删改查的页面,显示时间都是在1秒钟以上,我记得最过分的是有的页面会达到6秒钟左右。在学 ThinkPHP 之前我并没有深入学习 PHP,除了用 curl 写了个抓取新闻的网页和留言性质的告白墙之外,对 PHP 的运行机制和运行效率并不知晓,姑且以为 ThinkPHP 的1-6秒左右的运行时间是正常的吧,只是感觉到这个框架并不是特别高效。

最近在做毕业设计,我的打算是这个设计产品除了用来让我毕业我还打算运营起来,但是写了半天,发现越来越卡,每个页面基本上要等待2秒左右才可以打开,这还是我本机搭建的服务器,网络延迟约等于0,如果真的让这种产品去生产,简直会毁掉一切用户体验,而且看起来这个框架还很浪费资源。确实怀疑起这个框架和自己的代码了。

在此前,我开启了 trace 可以看到页面打开时间,和各种行为的占用时间:

trace运行时间

很明显,这里占用时间最长的是 exec ,占用了1.019,而页面累积使用了1.063秒。

这个 exec 虽然不知道是个啥,但是根据字面意思大约应该是执行查询的时间,后来因为太郁闷,然后去群里问了一下,终于找到了解决方法。只需要修改一个配置。

在 config.php 文件中,把 localhost 修改为 127.0.0.1 。

然后,运行时间变成这个样子了:

trace修改后

简直是太狗血了。

出现这种情况的原因大概就是因为如果计算机配置了 IPV6 的 IP 地址的话,localhost 会首先去解析 ::1 的 IPV6 的解析,但是这个解析显然不是正确的,然后才会去解析 IPV4 的 127.0.0.1 ,这1秒钟的时间就出来了。

不过,在实际部署的服务器环境中应该不会出现这种情况,多出在本地的生产环境,然而生产环境显然也很重要,代码写的不爽,怎么高效生产。

因此,让我感觉自己的智商被涮的感觉,就是在写了接近1年的 TP 应用,我居然一直在跟 localhost 玩浪费1秒钟的 IPV6 解析,甚至有几次在服务器环境上部署也出现过这种问题。

QQ图片20160401160419

1 条评论

Loading...
  1. themebetter

    是呀,生产环境很重要,要不代码也写得不爽。

    2016-04-13 [回复]

发布评论