希望这个问题不会过于宽泛/模糊/过分。
我在WordPress中开发了一个网站,该网站使用大量自定义Ajax来加载搜索结果。这不是(我相信)特定于WordPress或Ajax的问题(甚至可能不是PHP,idk!)。
在运行WAMP的基本HP(8gb ram,i7处理器)上进行开发时,该网站运行得非常棒。我没有看到单个Ajax调用需要超过2-3秒。
然而,当站点在我的VPS(Hostgator级别9)上运行时,它的速度要慢得多 - ajax调用平均需要6秒才能完成,通常会在10-12秒达到峰值。
我的问题是:是我的php函数的错误(包括一些小到相对较大的mysql查询)或者服务器的错误的缓慢因素?我问的唯一原因是因为本地站点和服务器之间的加载时间差异非常明显。
我意识到这可能含糊不清;如果需要更多信息,我很乐意提供任何我能做的事情(除了案例场景,不幸的是我有一个禁止我共享网站ATM的NDA)。
更多信息:
某些ajax调用是瞬时的(就像那些只从数据库中提取适量信息的那些)是是瞬时的。
需要几秒钟的调用是那些从几个不同的表中提取大量信息的调用(请记住,我在WordPress中工作,使用WP_Query类,因此SQL查询甚至db结构不是我自己的 - 使用posts / post元表),从结果生成HTML,并将其返回到JavaScript以进行追加。此站点的主要搜索结果根据位置提取结果,但随后还会引入其他几位数据(图像,结果元数据等)。虽然它们通常发生在当地约1密西西比河附近,但我无法看到这些类型的过程瞬间发生。服务器上的问题是在本地即时发生的同一个调用,需要6-10秒才能在服务器上停止。
我到目前为止所阅读的评论和答案似乎都涉及SQL查询是在索引数据库上进行的错误查询的假设/场景。完成的查询由WP_Query类执行,并且(恕我直言)不是简单的查询。
当我说“ajax电话”时,我并不仅仅意味着过程的一部分。我的意思是从点击按钮到添加HTML时。
该网站没有用户,只有我在服务器上;它还不是一个公共网站。
答案 0 :(得分:4)
我没有看到单个Ajax调用超过2-3秒。
在具有单个用户的开发机器上,这些东西应该是即时的。 秒范围内的查询响应很可能是设计缺陷的症状(非索引数据库?)。
修改强>
从数据库开始是有意义的。您可以使用profiling之类的:
runQuery ("SET profiling=1");
// do your WordPress stuff here
runQuery ("SHOW PROFILES");
runQuery ("SHOW PROFILE FOR QUERY n"); // where n loops on the results of SHOW PROFILES
比较live和dev服务器上的结果。 (注意runQuery
是一个想象函数。)
<强> EDIT2:强>
还考虑直接在DB上运行您自己的查询而不是WP_Query。我相信你能想出更好的东西。查看wpdb object以获取进一步的参考。
答案 1 :(得分:2)
这里有多种可能性:
正如'vbence'所述,访问您网站的并发用户(如果您的网站启用了Google Analytics,并且在“实时”下检查,或者只是在原始Apache的帮助下,您可以轻松找出它们)日志)。
资源限制(特别是内存):可能存在应用程序占用几乎所有可用内存的情况。运行top command
&amp;检查二手&amp;那里有可用的记忆如果它将开始占用交换空间,那么事情将开始放缓。
Mysql tunning(可能就是这种情况):只需在服务器上配置php脚本&amp;检查代码的哪一部分需要时间来确认是因为mysql。如果是这种情况,那么您需要优化mysql设置。检查以下与mysql生产缓慢相关的帖子: MySQL 10x slower on one server compared to another
答案 2 :(得分:1)
在本地运行东西意味着:
在托管服务器上运行东西通常意味着:
避免使用当地时间作为比较的标准。而是将您的VPS时间作为标准,并专注于它们。正如其他人所指出的,甚至一秒钟的当地时间也可能是怀疑。