太长不看版:把 localhost 换成 127.0.0.1

1 问题

在写一个小玩具的时候,一个逻辑十分简单的接口耗时超过2s,十分不正常。

加载时间大大超出预期
加载时间大大超出预期

2 排查

2.1 接口检查

接口逻辑十分简单,只包含了两个部分:数据查询、json_encode。json_encode 作为内置函数,加上以往经验,不太可能是问题的关键。通过比较部分执行时间,数据查询部分执行时间约为另一部分的 10E5 倍。再用 navicat 手工构造执行了一下相同语句,耗时仅有 0.017s,更加肯定了连接上的问题。

navicat
navicat

2.2 查看user表

既然是连接上的问题,那就去看看 mysql 库里有没有好康的。无意之中点到了 user 表,突然有了一些想法。

user表
user表

莫非,是 ipv6 的锅?

随手 ping 了一下 localhost

ping

试着用 telnet 连接了一下 3306 端口,localhost127.0.0.1 成功,::1 失败。

3 解决

于是乎,将 mysql:host=localhost 改为 mysql:host=127.0.0.1 ,刷新

修改后
修改后

好起来了

所以,估计是 localhost 默认解析为 ipv6 地址,导致无法连接和超时。体现在应用上就是加载时间长了。