【问题标题】:Site speedy on localhost, slow on server [closed]本地主机上的站点速度快,服务器上的速度慢[关闭]
【发布时间】:2013-04-25 15:34:37
【问题描述】:

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

我在 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 查询甚至 db 结构不是我自己的 - 使用帖子/帖子元表),从结果中生成 HTML,并将其返回给 JavaScript 以进行附加。该站点的主要搜索结果会根据位置提取结果,但随后还会提取其他一些数据(图像、结果元数据等)。我不可能看到这些类型的过程会立即发生,尽管它们通常发生在当地密西西比州 1 附近。服务器上的问题是,在本地即时发生的相同调用需要 6-10 秒才能在服务器上开始停止。

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

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

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

【问题讨论】:

  • 提示:现在大多数浏览器都有开发工具,包括“网络”窗格或类似的工具,您可以在其中看到资产加载时间的可视化表示。 (本地 2-3 秒非常慢。)

标签: mysql ajax performance jquery


【解决方案1】:

我没有见过一个 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

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

编辑2:

还可以考虑直接在数据库而不是 WP_Query 上运行您自己的查询。我相信你能想出更好的东西。查看wpdb object 以获取更多参考。

【讨论】:

    【解决方案2】:

    这里可能有多种可能性:

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

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

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

    【讨论】:

      【解决方案3】:

      在本地运行东西意味着:

      • 只有你。
      • 不会“走钢丝”
      • 专用服务器 - 您的电脑。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 2017-12-04
        • 1970-01-01
        • 1970-01-01
        • 2020-01-06
        • 1970-01-01
        相关资源
        最近更新 更多