使用Plato生成Back4App云代码函数复杂性报告指南
本节将教您如何使用 Plato 生成您的云代码的代码复杂性报告。
云代码必须从设计上高效。由于它被调用的次数非常多,稍微差一点的性能可能会成为一个巨大的问题,并严重影响您的生产环境。
如果您花时间高效地设计您的云代码,您将能够使用更小的服务器处理更多的请求,这可以随着时间的推移带来巨大的节省。 另一方面,设计不良的云代码只能在更大、更昂贵的机器上扩展,这也有其局限性。这种情况可能会导致重写代码的必要性,并随着时间的推移增加开支。
请花时间进行测试、负载测试并不断检查代码复杂度的报告。
- 要完成本教程,您需要:
- 在 Back4App 创建的应用。
- 与项目配置的 Back4App 命令行工具。
我们通常通过创建一组较小的函数来开始开发,这些函数将一个大问题分解为更小、更易处理的问题。 这种方法通常是可行的,这些初始较小的函数随着时间的推移而增长,进行更复杂的操作并处理更多的数据。 随着您应用中的数据增长,计算密集型任务(如循环和递归调用)被越来越多地调用,这往往会减慢应用程序的速度。在严重的情况下,它甚至可能完全冻结应用程序。 这就是 Plato 的用武之地。
Plato 是一个JavaScript源代码可视化、静态分析和复杂性工具,它生成报告显示您的应用程序变得多复杂,以及在哪里进行修复以潜在地加快流程。
如果您没有,请在继续之前安装这些。
在安装后运行 Plato 的过程是从您的Cloud Code所在目录输入以下命令:
这些选项的意思是:
- -r: 递归,意味着它会进入目录和子目录查找文件
- -d MyReportFolder: (输出)目录。Plato 将创建一个名为 MyReportFolder 的目录,在其中存储其结果
- -t “My Report for this App”: 标题。Plato 将把此报告命名为 My Report for this App。这对于随着时间的推移创建多个报告并进行跟踪非常有用
- -x .json: 排除 .json 文件。您可以告诉 Plato 忽略文件类型,以便它运行得更快
- *.js: 查找任何扩展名为 .js 的文件进行评估
在由上述命令创建的 MyReportFolder 中,您会找到一个 index.html 文件,其中包含报告。在浏览器中打开该文件,您会发现类似这样的内容:

在我的情况下,我只有一个名为 main.js, 但根据您的代码,您可以有更多文件。 向下滚动到 文件 部分,点击您想要打开的文件名(在我的情况下是 main.js)。这将打开该文件的报告:

- 可维护性是一个介于0到100之间的值,表示维护代码的相对容易程度。较高的值意味着更好的可维护性。
- 难度度量与编写或理解程序的难度相关。
- 估计错误是Halstead交付的错误,是对实现中错误数量的估计。
功能权重有两个指标:
- 按复杂性:该指标计算代码块中不同路径的数量。较低的值更好。
- 按SLOC:源代码行/逻辑行
现在您可以向下滚动,查看建议的警报和可能的修复:

在我的情况下,它告诉我 箭头函数语法 (=>) 仅在 ES6 中可用 (使用 'esversion: 6'), 这不是问题。 但让我们在那个函数中添加一些非常低效的代码并重新评估:
并评估结果:

正如我们所看到的,这个函数的复杂度是 4,这很好。你得到的数字越高,函数就越复杂,你就越应该确保它是高效的。
Plato 还会警告你缺少分号和其他潜在的 Javascript 错误。
拥有一个像 Plato 这样的工具来检查你的代码复杂度,并不断重构云代码以尽可能快和高效,可以在长时间内节省大量成本。 你和所有开发者都应该在开发过程中包含这一步或类似的步骤,以确保你在处理请求时获得最大的价值。