Cloud Code Functions

使用Plato生成Back4App云代码函数复杂性报告指南

9min

如何创建一个显示您的云代码复杂性的报告

介绍

本节将教您如何使用 Plato 生成您的云代码的代码复杂性报告。

云代码必须从设计上高效。由于它被调用的次数非常多,稍微差一点的性能可能会成为一个巨大的问题,并严重影响您的生产环境。

如果您花时间高效地设计您的云代码,您将能够使用更小的服务器处理更多的请求,这可以随着时间的推移带来巨大的节省。 另一方面,设计不良的云代码只能在更大、更昂贵的机器上扩展,这也有其局限性。这种情况可能会导致重写代码的必要性,并随着时间的推移增加开支。

请花时间进行测试、负载测试并不断检查代码复杂度的报告。

前提条件

  • 要完成本教程,您需要:
  • 一个安装了 Node.js 的本地环境,以便应用单元测试。您可以按照 官方 NodeJS 教程 在终端成功安装 Node.js。
  • 在 Back4App 创建的应用。
  • 按照 创建新应用教程 学习如何在 Back4App 创建应用。
  • 与项目配置的 Back4App 命令行工具。
  • 按照 设置云代码教程 学习如何为项目设置云代码。

首先,我们需要谈谈 Plato

我们通常通过创建一组较小的函数来开始开发,这些函数将一个大问题分解为更小、更易处理的问题。 这种方法通常是可行的,这些初始较小的函数随着时间的推移而增长,进行更复杂的操作并处理更多的数据。 随着您应用中的数据增长,计算密集型任务(如循环和递归调用)被越来越多地调用,这往往会减慢应用程序的速度。在严重的情况下,它甚至可能完全冻结应用程序。 这就是 Plato 的用武之地。

Plato 是一个JavaScript源代码可视化、静态分析和复杂性工具,它生成报告显示您的应用程序变得多复杂,以及在哪里进行修复以潜在地加快流程。

1 - 安装Plato

如果您在系统中安装了 NodeJSNPM,安装 Plato 就像输入

1 npm install -g plato

如果您没有,请在继续之前安装这些。

2 - 运行Plato

在安装后运行 Plato 的过程是从您的Cloud Code所在目录输入以下命令:

1 plato -r -d MyReportFolder -t "My Report for this App" -x .json *.js

这些选项的意思是:

  • -r: 递归,意味着它会进入目录和子目录查找文件
  • -d MyReportFolder: (输出)目录。Plato 将创建一个名为 MyReportFolder 的目录,在其中存储其结果
  • -t “My Report for this App”: 标题。Plato 将把此报告命名为 My Report for this App。这对于随着时间的推移创建多个报告并进行跟踪非常有用
  • -x .json: 排除 .json 文件。您可以告诉 Plato 忽略文件类型,以便它运行得更快
  • *.js: 查找任何扩展名为 .js 的文件进行评估

3 - 获取结果

在由上述命令创建的 MyReportFolder 中,您会找到一个 index.html 文件,其中包含报告。在浏览器中打开该文件,您会发现类似这样的内容:

Document image


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

Document image

  • 可维护性是一个介于0到100之间的值,表示维护代码的相对容易程度。较高的值意味着更好的可维护性。
  • 难度度量与编写或理解程序的难度相关。
  • 估计错误是Halstead交付的错误,是对实现中错误数量的估计。

功能权重有两个指标:

  • 按复杂性:该指标计算代码块中不同路径的数量。较低的值更好。
  • 按SLOC:源代码行/逻辑行

现在您可以向下滚动,查看建议的警报和可能的修复:

Document image


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

JS


并评估结果:

Document image


正如我们所看到的,这个函数的复杂度是 4,这很好。你得到的数字越高,函数就越复杂,你就越应该确保它是高效的。

Plato 还会警告你缺少分号和其他潜在的 Javascript 错误。

结论

拥有一个像 Plato 这样的工具来检查你的代码复杂度,并不断重构云代码以尽可能快和高效,可以在长时间内节省大量成本。 你和所有开发者都应该在开发过程中包含这一步或类似的步骤,以确保你在处理请求时获得最大的价值。