【问题标题】:How to improve PHP CodeSniffer execution time?如何提高 PHP CodeSniffer 的执行时间?
【发布时间】:2012-12-19 09:43:12
【问题描述】:

虽然能够优化单个“嗅探”实现很重要,但我的问题并不是真的。

我真正想做的是在几秒钟内对我的整个代码库(其中包含几百万行 PHP 代码)运行我最喜欢的十几个嗅探。

我最喜欢的每个嗅探都需要不到 2 秒的时间来针对我的代码库中的每个文件运行,所以原则上我没有理由(假设我暂时没有使用任何“多文件嗅探”)不要将问题分解为几十万个“工作”,将它们分布在(大量)“工作人员”海洋中并行运行,然后汇总结果。

我希望有人已经使用用于构建大规模可扩展应用程序的几个流行框架之一完成了这个(或类似的事情),并且有一些实用的建议可以分享。

编辑:

速度对我来说实际上很重要,因为我想在“构建”软件版本时使用 CodeSniffer 对源代码进行一些静态分析,并且我希望整个构建过程在几分钟而不是几小时(甚至几天)内运行)。我很欣赏这不是 CodeSniffer 最初设计的使用方式(例如,作为一个 IDE 插件,它可以在您提交代码更改之前向您显示潜在的问题),但我发现“嗅探”的灵活性使 CodeSniffer 成为开发静态分析应用程序的理想工具。

【问题讨论】:

  • 您的问题是什么?如果您嗅探整个代码库,为什么速度很重要?我的意思是你什么时候真正需要嗅探整个代码库?也许出于完整性原因在夜间构建中?否则,我建议您在某些文件中时让您的 IDE 在后台执行此操作。然后你通常不需要关心速度,因为它只是并行执行 - 所以你没有明确地等待结果 - IDE 只是突出显示错误。您也可以仅在提交时嗅探更改的文件。是不是有些类似的工作分配原则。
  • 您可能还想尝试我一直致力于提高大型代码库性能的开发分支,尽管它更多的是关于内存改进。不过,它们也可能对您有用:github.com/squizlabs/PHP_CodeSniffer/tree/…
  • @hakre - 我更新了我原来的问题,并附上了关于我为什么关心速度的说明。如果我以更“标准”的方式使用 CodeSniffer,那么速度确实不是问题 - 感谢您指出这一点。
  • @Greg Sherwood - 感谢您的链接。现在我最关心的是速度,但如果我的嗅探的复杂性增加,那么我预计内存将变得至关重要。

标签: php scalability codesniffer


【解决方案1】:

我也对 CodeSniffer 的吞吐量感到沮丧。我能找到的最好的办法是删除我不关心检查的嗅探。我还怀疑某些嗅探器比其他嗅探器更昂贵,具体取决于每个嗅探器必须执行的解析量。

【讨论】:

  • 不同的嗅探器在CPU和内存方面都有不同的性能,这是绝对正确的。我预计运行嗅探所需的时间大致与处理语料库时生成的“回调”数量以及单个回调处理的复杂性成正比。但到目前为止,我的测试还没有显示出预期的线性关系。因此,当在不同的嗅探实现候选者之间进行选择时,没有办法绕过运行测试。但问题不在于调整嗅探,而在于扩展运行它们的框架。
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2015-10-18
相关资源
最近更新 更多