1

在我的网站上,对于特定的 AJAX 文件(UI 的症结),我的平均延迟(不备份时等)约为 150 毫秒。我通过做一些服务器端/数据库技巧将它从 ~250ms 减少了,我认为最后一个技巧可能会将它从当前的 ~30ms 的实际 PHP/MySQL 部分的总数中再降低 10ms 左右页。

我正在使用 keep-alive,所以我认为 ssl 握手或多或少已经完全退出(但我希望尽快迁移到 SPDY,所以我真的不知道在最初的握手之后这有什么帮助)。

当我 ping 时,它平均约为 55 毫秒。

我在文件的开头连接到 MySQL,并在最后关闭它。我很确定这大约需要 10 毫秒。

那么剩下的~55ms 是从哪里来的呢?

这可能看起来完全令人着迷,但这是为了快速动态分页,并且每毫秒延迟都会严重降低效果。

提前谢谢了!

4

2 回答 2

2

如果您建立了 HTTP 连接,您应该能够在与 ping 大约相同的时间内运行单个简单、简短的 HTTP 请求。

为了测试这一点,计算获取静态文件需要多长时间。

接下来,尝试从不使用任何库的 PHP 页面获取一小块数据。

接下来,尝试在不更改输出的情况下添加您的需求和库。这可能很重要,例如使用 Zend 和它的一些包很容易用 xcache 和通常快速的系统花费 40 毫秒。您可能想要更改 PHP 的运行方式,例如 apache prefork mod_php 必须启动一个新进程,而 php 必须为每个请求加载库。如果切换到 fastcgi,则可以预加载所需的库,提前打开数据库连接,并从感知延迟中消除相应的时间成本。

接下来,添加一些数据库查询。

下次升级到 AJAX。

现在 AJAX 通常会发出一个 POST 请求,在 HTTP 1.1 中这意味着 Expect: 100-continue 标头并增加一个往返行程。尝试禁用该标题。

最后,记录您的查询和响应,并尝试删除您不需要的所有内容。理想情况下,您希望每个请求和响应都低于 1K,但如果您的连接保持活动状态,tcp 窗口会增长,并且可能会在一段时间后推送 16K 消息。请求相对容易——它通常很小,删除不需要的 cookie 等;响应更难,因为它是您的数据,请尝试压缩或仅发送实际使用的数据,而不使用格式、样式或任何其他可以在客户端完成的操作。

于 2013-01-22T12:33:49.310 回答
1

对于与性能问题相关的所有问题,唯一的答案是 - 使用分析器。根据您的偏好、分析器功能和其他原因,您可以从工具列表中进行选择(该列表仅包含我曾经使用或听说过的工具):

于 2013-01-10T01:54:10.770 回答