• 在克服 Web 应用程序性能障碍方面有什么个人经验吗?
  • 有哪些推荐的策略来提高数据驱动的 Web 应用程序的性能?

我的开发团队正在开发一个使用 Oracle 数据库 (PL/SQL) 的 Web 应用程序(JSP 报告、HTML、JavaScript)。该应用程序提供的关键功能是报告,用户可以获取高级报告的 PDF 并深入到较低级别的支持详细信息。

随着支持详细记录的数量增长到数百万,系统的性能显着下降。根据我们当前对指标的分析,瓶颈似乎在于影响数据库的逻辑和数据库性能。目前正在探索更改数据库模型并重新执行一些服务器端逻辑。

分区、索引、解释计划和运行统计都是在数据库端完成的,旨在帮助提高性能。尽管他们提供了帮助,但还没有令人满意地解决问题。分析性能数据中最困难的部分是数据库和 Web 服务器由 IT 组织的不同部分远程管理,因此开发人员无法定期、完全访问以查看正在发生的情况(尤其是在生产环境中,在任何其他开发/测试环境中都没有准确反映)。

有帮助吗?

解决方案

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

我要做的第一件事就是尝试抛弃所有关于问题所在的假设,并采取措施在任何可能的地方安装指标。让指标而不是直觉来指导您。我凭着直觉追赶过很多很多的小白兔……它们让我失望的次数比它们正确的次数还要多。

其他提示

你检查过这个吗?

提高网页速度的最佳实践 来自雅虎卓越绩效团队

如果您确实在后端遇到问题,这将无济于事。但我们利用了他们的建议,使我们的网站变得更快,效果非常好,而且还有更多工作要做。

还可以使用 Firebug 的 YSlow 插件。当您看到实际时间被占用的情况时,您可能会感到惊讶。

您是否考虑过提前构建数据?换句话说,是否存在反复请求的数据组?如果是这样,请在用户提出要求之前准备好。我并不是在谈论缓存,但我认为这是等式的一部分。

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

正如 Webjedi 所说,指标是你的朋友。

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

正如我在 另一个问题:

使用分析器。 是的,它们需要花钱,而且使用它们有时会有点尴尬,但它们确实为您提供了更多真实的证据,而不是猜测。

人类普遍不擅长猜测性能瓶颈在哪里。我们的大脑似乎并不能很好地完成这件事。这似乎是显而易见的,你可能对问题是什么有很好的想法,但现实世界往往会做一些不同的事情。优化代码的错误部分充其量意味着大量工作却收效甚微。更多时候它会让事情变得更慢,有时甚至会完全破坏事情。因此,在为了优化而进行任何更改之前,您应该始终从分析器或其他准确的工具中获得真实的证据。

并非所有分析器都需要(额外)金钱。对于 .Net,我成功地使用旧版本的 NProf(目前已废弃,但它仍然适用于我)来分析我的 ASP.Net 应用程序。对于 SQL Server,查询分析器是程序包的一部分。还有 MS 的 CLF Profiler,但我一直无法让它成功工作。

话虽这么说,分析器绝对是最佳选择。这样您就可以看到您的程序大部分时间都花在哪里,而不是专注于您认为速度慢的事情。另外,这意味着您无需在代码中编写任何内容即可实际记录指标。

正如我一开始就暗示的那样,分析器有不同类型。我发现最有用的三个是应用程序分析器,它可以让您查看您实际上花费最多时间的功能。第二个是 SQL 分析器,可让您查看查询运行所需的时间。第三个是内存分析器,它有助于向您显示内存被哪种类型的对象占用。这三个工具都非常有用,虽然您不会每天都使用它们,但使用它们的时候会为您省去很多麻烦。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top