【问题标题】:What is considered a long execution time?什么被认为是长执行时间?
【发布时间】:2010-03-14 19:44:23
【问题描述】:

我正在尝试弄清楚我的服务器端代码的效率。

使用microtime(true) 来测量速度,我能够计算出我的脚本运行所花费的时间。

我的平均速度为 .3 到 .5 秒。这些脚本执行许多数据库查询以向用户返回不同的值。

为网站在线运行的 PHP 脚本的有效执行时间是多少?

我知道这完全取决于正在做什么,但只需将其视为从数据库读取并将值返回给用户的标准脚本。我看着谷歌,看到他们在.15 秒内搜索互联网,我觉得我的脚本很垃圾。

【问题讨论】:

  • 请记住,在处理查询时,并非总是您的代码会受到质疑,尤其是在与其他应用和用户共享 RDBMS 时。

标签: php performance execution-time


【解决方案1】:

YouTube 的目标页面呈现时间 Video here@7:00)。

您的瓶颈可能是数据库查询 - 尝试使用

EXPLAIN select * from x...

看看你是否可以添加索引来加速你的查询。

编辑上面的链接已经失效。 High Scalability 在 YouTube 上做了一个使用该视频作为主要来源的功能,所以它可能会引起一些兴趣:http://highscalability.com/youtube-architecture

【讨论】:

    【解决方案2】:

    对我来说似乎有点高。

    作为参考,我创建的框架的执行时间低至 0.0028 秒,高至 0.0340 秒。平均而言,每个页面通常有 11 到 18 个 SQL 查询。

    但是,请记住,这是一个高度优化的框架,利用缓存、非常仔细的查询编码和自动加载。尝试实施这些策略,您应该会看到很大的改进。

    【讨论】:

      【解决方案3】:

      是否需要更快?为什么?

      如果答案是“是的,因为它在需求列表中” 或“因为它占用宝贵的服务器资源”,那么请尝试优化您的 SQL 查询。也许您需要添加索引...

      否则,我认为你应该继续下一个任务。首先,它有效,其次你说的是 0.3 到 0.5 秒。应该是fast enough for humans 和机器。

      【讨论】:

        【解决方案4】:

        使用 PHP,大多数网站的生成速度都非常快,最大的延迟是页面渲染,包括要显示的图像等所有子请求。
        但访问者的互联网连接速度和质量、他的计算机和他的软件也是重要因素。

        为了大方,假设 PHP 占用了网页总加载和渲染时间的 20%。
        再说一次,我知道这个百分比是非常近似的,但更多的是一个说明性的例子。

        平均页面加载时间约为 3 秒。 (太多了) 高质量的网站应该需要大约 1 秒才能完全加载,因此 PHP 将被允许 200 毫秒(1 秒的 20%)来生成输出。 所以对于一个“平均”的网站来说,php 最多可能需要 600 毫秒。

        注意:PHP 执行时间可以通过更改主机或改进源代码来改进。

        【讨论】:

          【解决方案5】:

          嗯...我不确定这里的绝对值是否公平。这真的取决于硬件......当我在本地开发时,我的开发者机器的运行速度比实际服务器慢 5-10 倍。 因此,如果我们采用绝对值,“可接受”范围会因硬件而异。

          嗯,通常我会尽量保持在 100 毫秒以下。如果服务器加载时间较长,我将跟踪执行并尝试找出问题所在。我不得不说大多数时候,数据库(因此是查询)是瓶颈。真正的工作非常重要。

          【讨论】:

            【解决方案6】:

            这当然是非常主观的,取决于网站等等等等。

            但是,我想说当页面开始花费的时间超过 100 毫秒左右时,这对用户来说是一个明显的延迟,这可能是“太长了”。如果这是一个可以合理预期会立即加载的页面。如果页面是搜索页面,在大型数据库中进行全文搜索,情况当然不同。

            【讨论】:

              【解决方案7】:

              我会说少 10 倍就可以了。 查询的数量并不重要。可以有 20 个,全部运行 0.005 秒。质量很重要,而不是数量。 分析您的代码以确定最慢的部分,通过添加更多的 microtime 语句,找到最慢的部分,然后对其进行优化。

              如果你有自己的 mysql 查询函数,放 microtime 的东西会很方便

              【讨论】:

                【解决方案8】:

                取决于,如上所述,但另外考虑这一点:一秒钟的执行时间,您将能够(在理想条件下)在具有一个 CPU 的服务器计算机上每秒仅处理一个请求,而没有其他任何东西在那台机器上发生。如果您的请求数超过每秒一个,您将排长队,并且您的服务器将完全耗尽,导致传入请求的处理时间更长。如果您收到的请求较少,您仍然需要注意您的 CPU 利用率。如果服务器之前已经负载过重,您可能会遇到需要处理的问题。

                有一些数学方法(排队论)可用于分析容量需求,请参阅例如 PDQ (http://www.perfdynamics.com/Tools/PDQ.html) 了解更多信息。

                因此与 Google 相比可能不公平,因为他们必须有大量的传入请求,并且执行时间长 3 倍,他们需要的服务器数量将是现有服务器的数倍......

                【讨论】:

                  【解决方案9】:

                  瞄准

                  人们越来越开始对耗时超过 200 毫秒的信号失去耐心。

                  【讨论】:

                    【解决方案10】:

                    这都是相对的,真的。不要期望获得与使用 PHP 的其他站点相同的时间。请记住,PHP 需要在每次页面加载时从头开始加载所有内容。

                    您真的想看看您的网站在负载下的表现如何,例如使用 Apache ab 对其进行测试。如果您的网站可以处理您所期望的最高流量水平,那么您就不需要再优化它了。用户无法判断您的页面是在 0.75 秒还是 0.25 秒内加载。

                    请记住,调用 microtime 本身会增加页面加载时间,因为它必须调用操作系统(上下文切换)。优化页面可能更有价值,使其更小,以便更快地通过网络并在客户端上更快地呈现。

                    【讨论】:

                      【解决方案11】:

                      我注意到,作为 Wikipedia 的编辑,在页面加载启动时间超过 5 到 10 秒之前,我们不会看到投诉。当然,报告这种缓慢的机制对于大多数用户来说是模糊的。

                      对于我自己(作为旅游网站的用户)而言,中间屏幕显示“收到您的请求。现在正在处理中。可能需要 X 秒。”

                      p>

                      【讨论】:

                      • 我认为您将服务器端的渲染时间与客户端的渲染时间混淆了。
                      【解决方案12】:
                      • 我不会将您的脚本与 Google 进行比较,除非您保持类似的页面排名……等等。

                      • 如果搜索仅从数据库中检索值,则速度可能会有所提高 分析应用程序并消除瓶颈(仅举几例 - 页面脚本、大图像、大表、数据库索引)

                      【讨论】:

                        【解决方案13】:

                        我创建了一个 WP 网站,在其中一个页面上运行相当繁重的搜索和汇总统计信息收集程序。

                        相应的 PHP 模块从数据库中获取大约 500 条记录,然后解码每个请求数据库以获取更多详细信息,例如 10 个不同的自定义字段,以汇总所有必需的补充前端的数据。

                        然后它只返回一页数据(比如 20 项)和统计信息(另外 10 项)。

                        查看我的 Chrome 开发工具计时

                        • 对于启动上述后端过程的每个 XHR 请求,我的本地开发机器需要 ~0.9 - 1.1 秒的 TTFB。
                        • 在一个相当不错的共享主机上为同一页面创建真正的 Web 服务器需要 0.3-0.6 秒的 TTFB。

                        显然这不是干净的 DB 性能数据,Apache 和 PHPMySQL 妨碍了计时,但作为大致数据,它可以很好地使用。此处不提供 SSL 握手等连接开销。只是服务器准备数据和响应所花费的时间,没有页面重新加载以及它是一个 XHR 请求。

                        如果有问题的网站在高峰时段有 100 名访问者/小时在高峰时段访问同一个 DB 密集型页面,则只有 ~2 名用户/分钟 >,因此您的 0.5 秒/访问者请求可以为 60 个访问者/分钟提供服务,并将其称为瓶颈。显然,在这种假想的情况下,备用性能容量是巨大的。

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2019-02-07
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2015-11-19
                          • 1970-01-01
                          • 2020-11-28
                          • 1970-01-01
                          相关资源
                          最近更新 更多