0

希望这个问题不会太宽泛/模糊/笼统。

我在 WordPress 中开发了一个网站,它使用大量的自定义 Ajax 来加载搜索结果。这不是(我相信)特定于 WordPress 或 Ajax(甚至可能不是 PHP,idk!)的问题。

在我运行 WAMP 的基本 HP(8gb 内存,i7 处理器)上开发时,该站点运行得非常棒。我还没有看到一个 Ajax 调用花费超过 2-3 秒。
但是,当该站点在我的 VPS(Hostgator 级别 9)上运行时,它会慢得多 - ajax 调用平均需要 6 秒才能完成,通常在 10-12 秒达到峰值。

我的问题是:缓慢因素是我的 php 函数(包括一些小到相对较大的 mysql 查询)的故障,还是服务器的故障?我问的唯一原因是因为本地站点和服务器上的站点之间的加载时间存在令人难以置信的显着差异。

我意识到这可能很模糊;如果需要更多信息,我很乐意提供任何我能提供的东西(除了案例场景,不幸的是,我有一个保密协议,禁止我共享站点 ATM)。

更多信息:

某些 ajax 调用是瞬时的(例如那些只从数据库中提取适量信息的调用)瞬时的。

需要几秒钟的调用是从几个不同的表中提取大量信息的调用(请记住,我在 WordPress 中工作,并使用 WP_Query 类,所以 SQL 查询甚至数据库结构都不是我的自己的 - 使用帖子/帖子元表),从结果中生成 HTML,并将其返回给 JavaScript 以进行附加。该站点的主要搜索结果会根据位置提取结果,但随后还会提取其他一些数据(图像、结果元数据等)。我不可能看到这些类型的过程瞬间发生,尽管它们通常发生在当地密西西比州 1 附近。服务器上的问题是,在本地即时发生的相同调用需要 6-10 秒才能在服务器上开始停止。

到目前为止,我阅读的评论和答案似乎处理了 SQL 查询是在索引数据库上完成的单一查询的假设/场景。完成的查询由 WP_Query 类执行,并且(恕我直言)不是简单的查询。

当我说“ajax 调用”时,我不仅仅指过程的一部分。我的意思是从单击按钮到附加 HTML 的时间。

该站点的服务器上除了我之外没有其他用户;它还不是一个公共站点。

4

3 回答 3

4

我还没有看到一个 Ajax 调用花费超过 2-3 秒。

在只有一个用户的开发机器上,这样的事情应该是即时的。范围内的查询响应很可能是设计缺陷(非索引数据库?)的症状。

编辑:

从数据库开始是有意义的。您可以使用如下分析

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

并比较实时和开发服务器上的结果。(注意这runQuery是一个虚函数)。

编辑2:

还可以考虑直接在数据库上而不是 WP_Query 上运行您自己的查询。我相信你能想出更好的东西。查看wpdb 对象以供进一步参考。

于 2013-04-24T16:04:36.973 回答
2

这里可能有多种可能性:

  1. 正如'vbence'所提到的,并发用户访问您的网站(如果您的网站上启用了谷歌分析并在“实时”下检查或仅借助原始 apache 日志,您可以轻松确定)。

  2. 资源限制(特别是内存):您的应用程序可能会占用几乎所有可用内存。在那里运行top command& 检查已用和可用内存。如果它开始占用交换空间,那么事情就会开始变慢。 在此处输入图像描述

  3. Mysql tunning(这可能是你的情况):只需在服务器上配置 php 脚本并检查代码的哪一部分需要时间来确认是因为 mysql。如果是这种情况,那么您需要优化 mysql 设置。查看以下与生产中的 mysql 速度慢相关的帖子: MySQL 在一台服务器上比另一台服务器慢 10 倍

于 2013-04-24T16:30:37.427 回答
1

在本地运行东西意味着:

  • 只有你。
  • 没有“走线”
  • 专用服务器 - 你的电脑。

在托管服务器上运行东西通常意味着:

  • 许多用户(即使您的实际应用只有 1 个)
  • 多次往返线路以将页面和资产从服务器获取给您(以及您对它的请求)
  • 与其他用户共享的服务器。

避免使用当地时间作为比较的标准。而是将您的 VPS 时间作为标准并专注于它们。正如其他人指出的那样,即使是一秒钟的当地时间也可能是可疑的。

于 2013-04-25T02:17:39.600 回答