performance - Web 应用程序的适当页面处理时间是多少?

标签 performance timing

我正在开发一个 Web 应用程序,它已经到了我拥有大部分必要功能的地步,我开始担心执行速度。所以我四处寻找信息,我发现了很多关于通过缩小 CSS/JS、设置缓存控制 header 、为静态文件使用单独的域、压缩输出等(以及基本的服务器)来减少页面加载时间的方法。诸如 memcached 之类的辅助技术)。但是假设我已经对所有这些进行了优化,我担心我的 Web 应用程序生成页面实际需要多长时间,即没有缓存命中的纯服务器端处理时间。显然,缩短时间的技巧将取决于我使用的语言和底层库,但合理的目标是多少?为了进行比较,我会对使用现有框架构建的应用程序的处理时间的真实示例感兴趣,执行典型的操作,例如访问数据库和渲染模板。
我用一点代码来测量处理时间(或者至少是我编写的代码中发生的部分),我通常看到 50-150 毫秒范围内的值,这似乎相当高。我很想知道我应该在多大程度上专注于降低它,或者我对这个应用程序的整个方法是否太慢,我应该放弃它并尝试更简单的方法。 (基于 Firebug 的 Net 选项卡,考虑到我在同一台计算机上同时使用客户端和服务器进行测试,我未测量的处理部分通常增加不到 5 毫秒。)
仅供引用,我在 Python 中工作,使用 Werkzeug 和 SQLAlchemy/Elixir。我知道那些不是最有效的技术,但我真的只关心足够快,而不是尽可能快。
编辑 : 澄清一下,我上面引用的 50-150ms 是纯服务器端处理时间,仅针对 HTML 页面本身。由于 CSS/JS/图像的访问时间(尽管我知道可以通过正确使用缓存和 Expires header 、 Sprite 等,这是我将在不久的将来做的事情)。除此之外,网络延迟还会增加更多时间,因此我们可能会讨论 500 毫秒的总客户端加载时间。
更好的是,以下是 Firebug 的网络选项卡中的一个典型示例的屏幕截图:
Loading times from Firebug
我要问的是顶部的 74 毫秒。

最佳答案

恕我直言,在大多数情况下,服务器端客户端 50-150 毫秒都可以。当我测量一些非常知名的网站的速度时,我很少看到这么快的东西。大多数情况下,它大约为 250 毫秒,通常更高。

现在,我想强调三点。

  • 一切都取决于上下文。如果加载需要几秒钟的时间,主页或经常访问的页面会很糟糕。另一方面,如果优化成本太高,网站的一些很少使用的部分可能需要长达一秒钟的时间。
  • 用户的主要关注点是快速完成他们想要的。这不是访问单个页面所花费的时间,而是访问信息或完成目标的时间。这意味着让一个页面需要 250 毫秒比要求用户一个接一个访问三个页面来做同样的事情要好,每个页面需要 150 毫秒来加载。
  • 请注意感知的加载时间。例如,Stack Overflow 网站上使用了一个有趣的技巧。当做一些基于 AJAX 的事情时,比如向上/向下投票,首先你会看到效果,然后向服务器发出请求。例如,尝试对您自己的消息进行投票。它会向您显示该消息被赞成(箭头将变为橙色),然后,200 毫秒后,箭头将变为灰色并显示一个错误框。因此,在赞成票的情况下,感知的加载时间(箭头变为橙色)为 1 毫秒,而执行请求所花费的实际加载时间为 100 毫秒。

  • 编辑:200 毫秒也可以。如果页面被频繁访问或者如果用户期望页面很快(例如,AJAX 请求期望很快),500 毫秒可能会受到一点伤害。顺便说一下,我在屏幕截图上看到您使用了几个 CSS 文件和十个 PNG 图像。来自 combining CSS合并成一个文件并使用 CSS sprites ,您可能可以减少感知加载时间,尤其是在处理网络延迟时。

    关于performance - Web 应用程序的适当页面处理时间是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3108495/

    相关文章:

    java - 使用接口(interface)通过两个 Activity 传递数据

    .net - 文本数据最快的哈希算法

    java - 是什么让 android 4.1.X 的加载速度变慢而不是 4.2?

    algorithm - 定时同步

    javascript - 如何更好地检查 JavaScript 中的参数对象?

    iphone - 在 ios 中调用方法时的超精度

    java - 向 JavaEE 应用程序添加类的成本是多少

    java - 与迭代次数无关的性能测试

    javascript - requestAnimationFrame [now] 与 performance.now() 时间差异

    c# - 无法将类型为 'OpenQA.Selenium.Remote.RemoteWebElement' 的对象转换为类型 'System.Collections.Generic.Di ctionary` 2[System.String,System.Object]