我们采用了哪些策略来提高Web应用程序的性能?

时间:2020-03-05 18:42:05  来源:igfitidea点击:
  • 是否有克服Web应用程序性能障碍的个人经验?
  • 有什么建议的策略可以改善数据驱动的Web应用程序的性能?

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

随着支持详细记录的数量已增长到数百万,系统的性能已大大降低。根据我们当前对指标的分析,瓶颈似乎在影响数据库和数据库性能的逻辑上。当前正在研究更改数据库模型并重新做一些服务器端逻辑。

分区,索引,说明计划和运行统计信息是数据库方面已完成的尝试,以帮助提高性能。尽管他们提供了帮助,但是他们并没有令人满意地解决该问题。分析性能数据最困难的部分是数据库和Web服务器由IT组织的不同部分远程管理,因此开发人员没有常规的完全访问权限来查看正在发生的事情(尤其是在生产环境中,在其他任何开发/测试环境中均未完全镜像)。

解决方案

回答

尽管我的回答可能没有任何具体步骤来,但这始终是我的出发点。

我要做的第一件事是尝试放弃所有关于问题根源的假设,并采取步骤在所有可能的地方安装指标。让指标指导我们,而不是直觉。我追逐了很多很多的白兔子,预感...让我沮丧的次数超过了正确的时间。

回答

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

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

回答

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

另外,请查看堆栈,查看在哪里有缓存的机会,然后在可能的情况下毫不留情地雇用它!

回答

正如我在另一个问题中所说:

Use a profiler. Yes they cost money, and using them can occasionally be a bit awkward, but they do provide you with a great deal more real evidence rather than guesswork.
  
  Human beings are universally bad at guessing where performance bottlenecks are. It just seems to be something our brains aren't build to do very well. It may seem obvious, you may have great ideas about what the problem is, but the real world often turns out to be doing something different. And optimising the wrong part of code means, at best, lots of work for minimal benefit. More often it makes things slower, and sometimes it breaks things entirely. So before you make any changes for the sake of optimisation, you should always have real evidence from a profiler or other accurate tool.

回答

并非所有探查器都花费(额外)钱。对于.Net,我成功地使用了旧版本的NProf(目前已废弃,但仍对我有用)来对ASP.Net应用程序进行性能分析。对于SQL Server,查询分析器是程序包的一部分。还有MS的CLF Profiler,但我一直无法使其成功运行。

话虽如此,探查器绝对是必经之路。这样一来,我们可以看到程序大部分时间都花在了哪里,而不必专注于我们认为很慢的事情。另外,这意味着我们无需在代码中编写任何内容即可实际记录指标。

正如我在一开始所暗示的那样,有不同类型的探查器。我发现最有用的三个是应用程序探查器,它使我们可以看到大部分时间实际花在了哪些功能上。第二个是SQL探查器,它使我们可以查看查询运行所花的时间。第三个是内存分析器,它可以显示内存所用的对象类型。所有这三个都是非常有用的,尽管我们不会每天使用它们,但是每次使用它们的时间都会为我们省去很多麻烦。

回答

你检查了吗?

Yahoo!卓越性能团队提供的快速制作网页的最佳做法

如果我们确实在后端遇到麻烦,这将无济于事。但是,我们使用他们的建议取得了很大的效果,使我们的网站变得更快,还有很多工作要做。

还可以将YSlow加载项用于Firebug。当我们看到实际时间在哪里时,我们可能会感到惊讶。