代码之家  ›  专栏  ›  技术社区  ›  user290

您采用了哪些策略来提高Web应用程序的性能?[关闭]

  •  2
  • user290  · 技术社区  · 18 年前
    • 有没有克服Web应用程序性能障碍的个人经验?
    • 有没有建议的提高数据驱动Web应用程序性能的策略?

    我的开发团队工作于使用Oracle数据库(pl/sql)的Web应用程序(JSP报告、HTML、javascript)。该应用程序提供的关键功能是报告,在报告中,用户可以获得高级别的报告PDF,并向下钻取到较低级别的支持详细信息。

    随着支持细节记录的数量增加到数百万条,系统的性能显著降低。根据我们对度量的当前分析,瓶颈似乎在于影响数据库和数据库性能的逻辑。目前正在研究更改数据库模型和重新执行一些服务器端逻辑。

    分区、索引、解释计划和运行统计数据是在数据库端为帮助提高性能所做的工作。虽然他们帮了忙,但还没有令人满意地解决这个问题。在分析性能数据时,最困难的部分是数据库和Web服务器由IT组织的不同部分远程管理,因此开发人员没有常规的、完全的访问权限来查看正在发生的事情(特别是在生产环境中,生产环境在任何其他开发/测试环境中都没有完全镜像)。

    6 回复  |  直到 9 年前
        1
  •  6
  •   Webjedi    18 年前

    虽然我的答案可能不包含任何具体的步骤来帮助这始终是我开始的地方。

    我要做的第一件事是尝试放弃所有关于问题是什么的假设,并采取措施在任何地方安装度量标准。让指标指导你而不是你的直觉。我追逐过很多,很多,很多的白兔,它们都有预感……让我失望的次数比它们的正确次数还多。

        2
  •  2
  •   Polsonby    18 年前

    你检查过这个吗?

    Best practices for making web pages fast 雅虎!S卓越绩效团队

    如果你在后端确实有问题,这不会有帮助。但是我们使用了他们的建议,效果非常好,使我们的网站更快,还有更多的事情要做。

    也可以使用yslow插件来安装firebug。当你看到实际时间被占用时,你可能会感到惊讶。

        3
  •  2
  •   akash    9 年前

    您是否考虑提前构建数据?换句话说,是否有一组数据被一次又一次地请求?如果是这样的话,在用户询问之前准备好它们。我不是在说缓存,但我认为这是等式的一部分。

    从代码中退一步检查系统的使用模式可能是值得的。例如,如果您向人们显示每月的库存或销售信息,他们是否只在月末查看?如果是这样,就在最后一天构建数据并存储它。如果他们每天查看它,也许可以尝试构建前几天的结果并存储结果,避免计算。我想最终我会把你推到 Dynamic Programming 解决办法;如果你知道答案,就不要再解决了。

        4
  •  1
  •   James Marshall    18 年前

    正如WebJedi所说,度量是你的朋友。

    还可以查看您的堆栈,看看哪里有缓存的机会——然后尽可能地无情地使用它!

        5
  •  1
  •   Community Mohan Dere    9 年前

    正如我所说的 another question :

    使用分析器。 是的,它们很贵,使用它们有时会有点尴尬,但它们确实为您提供了大量更真实的证据,而不是猜测。

    人类普遍不善于猜测性能瓶颈在哪里。这似乎是因为我们的大脑不能很好地发挥作用。这似乎很明显,你可能对问题有很好的想法,但现实世界往往会有所不同。优化错误的代码部分最多意味着要为最少的收益做大量的工作。通常情况下,它会使事情变慢,有时会使事情完全崩溃。因此,在为了优化而进行任何更改之前,您应该始终拥有来自探查器或其他准确工具的真实证据。

        6
  •  1
  •   Kibbee    18 年前

    并非所有的资料员都要花钱。对于.NET,我成功地使用了一个旧的proff版本(目前已废弃,但它仍然适用于我)来分析我的ASP.NET应用程序。对于SQL Server,查询探查器是包的一部分。还有微软的CLF剖析器,但我从来没能让它成功运行。

    这就是说,资料员绝对是一条必经之路。这样你就可以看到你的计划大部分时间都花在哪里,而不是集中在你认为缓慢的事情上。另外,这意味着您不必在代码中编写任何内容来实际记录度量。

    正如我在开始时所暗示的,有不同类型的分析人员。我发现最有用的三个是应用程序配置文件,它让您看到您实际上花了大部分时间在哪些函数上。第二个是SQL分析器,它让您了解运行查询需要多长时间。第三个是内存分析器,它可以帮助您显示内存被占用的对象类型。所有这三个都是非常有用的,虽然你不会每天使用它们,但是你使用它们的时间会让你省去很多头痛。