【问题标题】:Profiling vs debugging what is the practice分析 vs 调试是什么做法
【发布时间】:2014-10-07 18:31:29
【问题描述】:

大多数情况下,我想知道如何最好地使我的应用程序具有最佳性能。如何优化和识别比其他资源更密集的功能/方法并进行必要的调整。在软件开发中,无论我相信哪种语言,都应该有一些方法来找出我的代码的不同部分如何使用处理器/网络资源。我将用我能想到的最简单的例子来说明我的意思:我有 Java、Python 和 PHP 的背景,并且在 linux 环境下工作感觉更舒服。请随时使用您喜欢的任何语言向我提供建议:

在 Javascript 中,人们可以通过以下方式轻松地测试并为变量赋值:

//METHOD 1:
if(true){
    console.log("It will always be true");
}else{
   console.log("You can never see me");
}

//METHOD 2:
var print;
if(true){
    print="It will always be true";
}else{
    print="You can never see me";
}
console.log(print);

//METHOD 3:
console.log((true)? "It will always be true" : "You can never see me");

如果要询问不同的人,这些方法中的哪一个会比另一个执行得更快。我相信不同的人会有不同的想法。但我需要一种更可靠的方法来了解桌面和移动应用程序的资源使用情况。谢谢。

【问题讨论】:

  • 拜托,如果您不发表评论而投反对票,这是不公平的。当您投反对票时,请告诉我我的错误,以便我从中吸取教训。感谢 Paul R 的标签更正

标签: performance debugging optimization profiling


【解决方案1】:

首先,当您知道确切的错误或错误功能时,就会进行调试。 它用于功能测试,即检查应用程序中的缺陷。

为了提高性能,分析器用于找出资源密集型方法。他们将提供繁重的模块/功能/数据库查询等,以便在分析后您可以调整和提高系统性能。如果在修改后出现一些缺陷,那么您可以使用调试器来查明并纠正问题。

有很多开源和付费的 java 分析器(我说 java 是因为你粘贴了 javascript 代码)。

请查看它们并使用它们来调整您的系统。

恕我直言,拒绝投票有两个原因,英语不好和非常基本的问题。

【讨论】:

  • 感谢@Nachiket 的回复,请原谅我糟糕的英语。它可能是基本的,但我没有任何经验,因此当我进行一些谷歌搜索时,我发现了很多让我失去平衡的工具。我想要一个关于这些工具的指南,当它在移动设备上运行时,我可以使用它来配置网络应用程序。
  • 如果它是一个网络应用程序,那么首先尝试浏览器插件(pagespeed、gtmetrix 等),这将纠正你的一半工作(重型 js、css、cdn、重型 req 等)。然后进行负载测试,neoload是我知道的工具,非常适合移动测试。虽然它不是免费的,但在试用期内对你来说应该足够了。 Dynatrace 是另一种选择。对于移动设备,我不太熟悉,但我认为还存在各种框架,尤其是针对性能和响应式 Web 应用程序。
【解决方案2】:

在您提供的示例中,这根本不重要。这就像问哪个更快,蜗牛或蠕虫但是,如果通过

  1. “分析”是指“函数所用时间的测量”,如果是

  2. “调试性能问题”您的意思是“错误是浪费了不必要的时间,我需要找出原因”,

那么我非常同意你的问题的前提。

Debugging works much better. 性能问题包括由于不必要的原因花费了过多的时间。 找到它的方法是在随机时间闯入执行,这自然会倾向于花费最多时间的任何事情。 问题花费的时间越多,休息越有可能解决问题。 只做几次,每次都仔细查看程序的状态,以了解它为什么在做它正在做的事情。 如果你看到它做了一些可以避免的事情,并且你看到它不止一次休息,你就发现了一个性能问题。 修复它并观察加速。

然后重复这个过程,因为下一个最大的问题现在是最大的问题。 加速相乘。 Here's an example 时间从 2700us 到 1800,然后到 1500、1300、440、170,最后是 3.7us。没有一个加速比原来的几分之一大,但总的来说,它们是惊人的。

这与测量有很大不同。 在测量中,发生的第一件事是您假设数值准确性很重要,因此您假设您需要大量样本,或者您必须检测代码以精确测量时间。

好像数值准确性有助于发现问题。 这个错误的假设在 1982 年左右进入了程序员的意识,当时 GPROF 出现了。

在测量时,您假设问题可以定位到一个函数,而实际上您需要查看某个时间点发生的所有事情,以了解是否可以避免。

恕我直言,最好的分析器在挂钟时间对堆栈进行采样,并报告出现在样本上的每一行代码,它出现在样本上的百分比。 然而,即使是这些分析器也不会告诉您通过仔细查看单个堆栈样本和数据可以获得的上下文。 (其他形式的眼睛糖果也有同样的问题:调用图、热路径、火焰图等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2011-02-02
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多