执行上下文

概述

Shiny 交互式文档既包含在渲染时执行的代码,也包含在服务器上响应用户操作和输入值变化时执行的代码。对这些执行上下文的深刻理解对于在开发过程中建立正确的思维模型以及优化文档性能都非常重要。

默认执行

默认情况下,文档中的所有 Python 代码会在以下两种不同的时间执行:

  1. 当你使用 quarto renderquarto preview 渲染文档时;以及

  2. 每当有新用户连接到从文档生成的 Shiny 应用程序时。

如果你的文档渲染时间较短,这种默认执行模式可能已经足够好,你不需要进一步考虑优化执行上下文。

设置上下文

许多文档包含加载所需包和数据的设置代码。如果这些设置代码的执行时间超过几秒钟,可能需要使用 context: setup 单元选项将其明确标记为设置代码。例如:

```{python}
#| context: setup
import seaborn as sns
penguins = sns.load_dataset("penguins")
```

当你为一个单元添加 context: setup 时,该代码单元将在以下情况下执行:

  1. 当你使用 quarto renderquarto preview 渲染文档时;以及

  2. 在 Shiny 应用程序启动时(这与默认行为不同,默认行为是在每次有新用户连接到应用程序时运行代码)。

明确使用 context: setup 标记设置代码可能是你在明确指定执行上下文方面唯一需要做的事情。不仅 context: setup 解决了最常见的性能问题,它还保留了简单且易于理解的源代码(文档中的所有数据和函数在渲染和提供服务时都可用)。

UI 上下文

你的文档中可能有一些单元仅用于用户界面,不需要在服务器上执行。例如,这可能是一个静态可视化,永远不会根据输入变化动态重绘。

要指定一个调用仅用于用户界面,可以使用 context: ui 单元选项。例如:

```{python}
#| context: ui

# 初始渲染后不会更新的图表
sns.lmplot(
    data=penguins,
    x="bill_length_mm", y="bill_depth_mm", hue="species",
    height=5
)
```

带有 context: ui 的单元仅在 quarto render 期间运行。该单元创建的代码和数据在应用程序提供服务时不可用。

了解更多

要了解更多关于 Shiny for Python 交互式文档的信息,请参阅以下文章:

  • 入门指南 解释了 Shiny 交互式文档的基础知识。

  • 组件浏览器 列举了可用的 Shiny 输入和输出,并提供了你可以复制粘贴到仪表板中的代码片段。

  • 输入布局 描述了各种布局输入的方式(侧边栏、输入面板、直接将输入附加到卡片等)。

  • 运行仪表板 涵盖了如何在 VS Code 和命令行中运行交互式仪表板,以及如何将其部署给最终用户。

  • Shiny for Python 提供了所有可用 UI 和输出小部件的深入文档,以及关于事物如何工作的概念性讨论。