提升性能

Manim 作为动画库的主要缺点之一是其性能缓慢。截至撰写本文时(2022 年 1 月),该库仍未得到充分优化。因此,我们非常鼓励贡献者协助优化代码。

性能分析

在优化库之前,我们首先需要通过性能分析来识别性能瓶颈。有许多 Python 性能分析工具可用于此目的;例如 cProfile 和 Scalene。

将动画作为脚本运行

大多数性能分析工具的说明都假定您可以直接从命令行将 Python 文件作为脚本运行。虽然 Manim 动画通常从命令行运行,但我们可以通过在文件底部添加类似以下内容将其作为脚本运行:

with tempconfig({"quality": "medium_quality", "disable_caching": True}):
    scene = SceneName()
    scene.render()

其中 SceneName 是您要运行的场景的名称。然后您可以直接运行该文件,从而可以遵循大多数性能分析工具的说明。

示例:使用 cProfile 和 SnakeViz 进行性能分析

安装 SnakeViz

pip install snakeviz

cProfile 已包含在 Python 的标准库中,无需安装。

假设我们要分析 SquareToCircle 的性能。然后我们将以下代码添加到 square_to_circle.py 并保存:

from manim import *


class SquareToCircle(Scene):
    def construct(self):
        s = Square()
        c = Circle()
        self.add(s)
        self.play(Transform(s, c))


with tempconfig({"quality": "medium_quality", "disable_caching": True}):
    scene = SquareToCircle()
    scene.render()

现在在终端中运行以下命令:

python -m cProfile -o square_to_circle.txt square_to_circle.py

这将创建一个名为 square_to_circle.txt 的文件。

现在,我们可以在性能分析文件上运行 SnakeViz:

snakeviz square_to_circle.txt

将打开一个浏览器窗口或标签页,显示性能分析的可视化结果,大致如下所示:

../_images/snakeviz.png