提高性能

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