> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-zh/chang-jing-sdk7/you-hua/performance-optimization.md).

# 性能优化

优化你的场景，使其快速加载并流畅运行，服务所有玩家。

您可以优化场景的多个方面，以确保访问场景的玩家获得尽可能最佳的体验。本文档介绍了一些最佳实践，它们能够显著影响场景的加载速度，以及玩家在场景中或相邻场景中时的运行流畅度。

请记住，许多玩家可能通过浏览器，使用并非为游戏打造的硬件访问 Decentraland，或通过 [移动应用](/creator/content-creator-zh/wei-yi-dong-duan-gou-jian/yi-dong-ke-hu-duan/overview.md) 在手机上访问——这些都会限制可供场景使用的处理能力。每个人访问您的场景时都应拥有流畅的体验。

{% embed url="<https://www.youtube.com/watch?v=tc1PwYKW1Kc>" %}

查看 [实用资源](/creator/content-creator-zh/chang-jing-sdk7/ru-men/useful-resources.md) 了解可提供帮助的工具，例如 Decentraland 场景优化器，它可从场景的 3D 模型中提取、去重并压缩纹理。

{% hint style="info" %}
**📱 移动端**：移动设备通常是资源最受限的客户端。如果您的场景面向移动端玩家，还请参阅 [为移动端构建](/creator/content-creator-zh/wei-yi-dong-duan-gou-jian/yi-dong-ke-hu-duan/overview.md) 获取移动端专属指导。
{% endhint %}

Decentraland 浏览器在引擎层面实施了许多优化。这些优化效果显著，但在浏览器中同时渲染多个用户生成的体验是一项重大挑战。我们需要您的帮助来让一切流畅运行。

## 时机

### 视频播放

播放视频是引擎处理成本最高的事项之一。如果场景包含视频，请确保同一时间只有 *一个* VideoTexture 正在使用。您可以让数十个平面共享同一个 VideoTexture，而不会明显影响性能；但一旦添加第二个 VideoTexture，其对帧率的影响就会非常明显。

还应避免在无法看见视频的区域播放视频。例如，如果您在室内设有屏幕，请使用触发区域，根据玩家进出时切换视频。

{% hint style="info" %}
**💡 提示**：一些场景采用的技巧是串流单个视频，并将多个区域以不同方式映射到不同平面。每个视频屏幕使用 [UV 映射](/creator/content-creator-zh/chang-jing-sdk7/3d-nei-rong-ji-chu/materials.md#using-textures) 仅显示 VideoTexture 的不同部分。因此，它可以看起来像是在播放不同视频，而无需承担多个 VideoTexture 的成本。
{% endhint %}

{% hint style="info" %}
**💡 提示**：当玩家站在场景外时，VideoTexture 不会每帧更新。这有助于减少对周边场景的影响。尽管如此，理想情况下仍应只在玩家 [进入您的场景时](/creator/content-creator-zh/chang-jing-sdk7/jiao-hu-xing/event-listeners.md#player-enters-or-leaves-scene) .
{% endhint %}

### 延迟加载

如果您的场景很大，或者有并非始终可见的室内区域，您可以选择不从一开始就加载整套实体。相反，可在玩家访问场景不同区域时按区域加载内容。这能显著缩短场景加载时间，也减少引擎每帧需要处理的纹理和 3D 内容量。

例如，博物馆的主建筑可以从一开始就加载，但每层楼的画作仅在每位玩家访问该楼层时才加载。

参见 [此示例场景](https://github.com/decentraland-scenes/lazy-loading) 了解其工作方式。

为获得避免卡顿的最佳效果，请通过将实体形状的 `visible` 属性设为 false 来隐藏实体。使用此方法时，您在创建实体时将其添加到引擎中，但不让其模型可见。

另一种方法是在需要前不将实体添加到引擎。这可能导致实体首次出现时发生一些卡顿，并且它们可能需要几秒钟才会显示。此方法的优点是可以有效绕过 [场景限制](/creator/content-creator-zh/chang-jing-sdk7/you-hua/scene-limitations.md)。请记住，场景限制计数针对的是任一时刻场景中正在渲染的内容，而不是可能渲染的内容总量。加载和卸载场景的部分内容应可让您规避这些限制。

{% hint style="warning" %}
**📔 注意**：不可见但已添加到引擎中的实体仍会计入场景限制。
{% endhint %}

您还可以为距离较远或被遮挡的实体开关动画。例如，对于播放非常细微待机动画的 NPC，您可以让其仅在玩家距离小于 20 米时播放该动画。在 NPC 周围使用触发区域，并据此开关其动画。

{% hint style="info" %}
**💡 提示**：当实体距离很远且足够小时，引擎会将其剔除。这种剔除有助于减少绘制调用，但从引擎中移除实体始终更好。这种剔除也不会考虑其他实体造成的遮挡，因此不够小但被墙壁遮住的实体仍会被渲染。
{% endhint %}

### 异步代码块

由 [异步代码](/creator/content-creator-zh/chang-jing-sdk7/bian-cheng-mo-shi/async-functions.md) 组成的代码块不会在等待时阻塞其他一切的进度：场景会继续运行，而异步代码块会在其等待的响应到达时恢复执行。请注意，场景在单个线程上运行，因此这不是并行处理；它只是在等待外部响应时避免场景停滞。

任何依赖异步服务响应的流程，例如 `getPlayerData()` 或 `getRealm()` 都应始终在异步代码块中运行，否则它们会在等待响应时阻塞场景其余部分的加载。对第三方服务器的所有调用也是如此。

请注意，所有非异步内容完成后，场景即被视为已完全加载。玩家进入场景时，异步进程可能仍在运行。避免异步进程导致加载某个实体，而该实体的几何体可能使玩家卡在其中的情况。

### 依赖事件

请尽量让场景逻辑依赖于监听 [事件](/creator/content-creator-zh/chang-jing-sdk7/jiao-hu-xing/event-listeners.md) ，而非每帧运行检查。

该 `update()` 函数的数据存储在一个 [系统](/creator/content-creator-zh/chang-jing-sdk7/jia-gou/systems.md) 每帧运行一次，理想情况下为每秒 30 次。如果可以改为订阅事件，请避免执行重复检查。

例如，您无需不断检查玩家的可穿戴物品，而可以订阅 `onProfileChanged` 事件，并仅在玩家的可穿戴物品改变时检查。

如果必须使用系统，请避免在每一帧执行检查或调整。您可以在更新函数中加入计时器，仅在每完整秒一次或其他合理周期执行检查。

## 优化 3D 模型

您可以通过多种方式优化 3D 模型，使其更加轻量。

在使用 [创作者中心](/creator/content-creator-zh/chang-jing-bian-ji-qi/kai-shi-shi-yong/editor-installation.md)，您可以查看场景中 3D 模型所用资源的统计数据，以及它们是否通过任何 [场景限制](/creator/content-creator-zh/chang-jing-sdk7/you-hua/scene-limitations.md).

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-88f68a93b0cfcb7f8c48270f31ba7137655ee2e1%2Ftriangle-limit1.png?alt=media)

你可以展开此菜单查看详细信息。

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-aebaad725f1d9397552b2fb36a318eec91589b9c%2Ftriangle-limit2.png?alt=media)

以下是改善这些指标的一些提示：

* 尽可能让 3D 模型共享纹理。良好做法是使用一张作为图集贴图的纹理，由场景中的所有模型共享。使用 1 张 1024x1024 像素的大型共享纹理，比使用多张小纹理更好。

  > 注意：避免将同一图像文件同时用作材质的反照率纹理和法线贴图或自发光贴图。即使图像相同，也请使用独立文件。将同一图像文件分配给不同类型的纹理属性，在压缩为资源包时可能会产生不需要的视觉伪影。
* *.glb* 是一种压缩格式，它的体积始终小于 *.gltf*。另一方面，使用 *.gltf* 时，通过将纹理导出为独立文件可轻松共享纹理图像。您可以通过使用 [以下管线](https://github.com/AnalyticalGraphicsInc/gltf-pipeline)，兼得两种方式的优点，它可让您拥有 *.glb* 带有外部纹理文件的模型。
* 避免使用混合透明度。混合透明度必须绕过许多渲染优化。如有可能，请优先使用不透明或 Alpha 测试的几何体。
* 避免使用蒙皮网格。它们会显著降低性能。

{% hint style="info" %}
**💡 提示**：在 \[3D 建模部分]\(/creator/3d-modeling/3d-models 中阅读更多关于 3D 模型最佳实践的内容
{% endhint %}

### 在 Blender 中修复沉重模型

当统计数据指向某个特定模型时，通常修复模型比通过代码规避问题更快。在 Blender 或任何类似工具中，最有用的编辑包括：

* **减少三角形数量** 使用 Decimate 修改器。这是针对现有模型的修复工具。新模型最好从一开始就采用低多边形建模。
* **调整纹理尺寸** 将其调整为 2 的幂，例如 1024x1024 或更小，并将其重新打包到 *.glb*.
* **删除玩家永远看不见的面**，如道具的底面和背面。启用 [背面剔除](#backface-culling) 而不是使几何体翻倍。
* **合并材质** 为一个，使用单张图集纹理而不是每个部件一张纹理。
* **从 `_collider` 网格中移除灯光、摄像机和材质。** 引擎会忽略它们，因此它们纯粹增加负担。

前后检查三角形数量和材质数量，然后导出并覆盖同一文件。如果预览正在运行，它会加载您的更改。

### 多次复用同一模型

场景通常充满重复内容：街道旁的路灯、房间里的椅子、公园里的树木。构建它们的最佳方式也是最简单的方式—— **为每个副本赋予独立实体，并让它们全部指向同一个&#x20;*****.glb*****&#x20;文件。**

```ts
// 推荐：一个文件，多个实体
for (const position of lampPostPositions) {
  const lampPost = engine.addEntity()
  Transform.create(lampPost, { position })
  GltfContainer.create(lampPost, { src: 'assets/scene/lampPost.glb' })
}
```

引擎会识别这些实体共享同一来源。该文件仅下载一次、仅转换为资源包一次，其网格和纹理也仅在内存中保存一次——第二十个路灯除了自身在世界中的位置外，几乎不增加任何成本。这同样适用于跨场景：若相邻场景使用同一文件，它已在内存中。反之，导出二十个近乎相同的 *.glb* 文件则意味着二十次下载和内存中的二十份副本。

这种做法 **不会** 节省绘制调用。二十个路灯就是二十个需要绘制的对象，无论它们来自二十个实体，还是来自一个包含二十个建模路灯的 *.glb* 。减少此数量的唯一方法是在建模工具中合并网格，这是真正的取舍——请参阅 [实例化、复制与合并](/creator/content-creator-zh/3d-jian-mo-he-dong-hua/meshes.md#instancing-objects-vs-duplicating-objects) 了解何时值得这样做。

一些相关提示：

* **按簇分组，而不是使用一个巨大模型。** 如果您有许多散落的道具，一个不错的折中方法是每个 *.glb* 使用一个——一段街区、一整个房间的家具——而不是每个道具一个模型或整个场景一个模型。这样可以减少对象数量，同时让每个簇足够小，使剔除仍能发挥实际作用。
* **一次生成许多副本？** 先使用 [`AssetLoad` 组件](/creator/content-creator-zh/chang-jing-sdk7/you-hua/pre-load-resources.md)预加载模型。之后副本会从已在内存中的模型创建，而非每个副本都等待相同下载。构建每个副本仍需工作，因此无论哪种方式，大量突发创建都可能占用一帧——预加载消除了文件等待，而非创建副本的成本。
* **一个非常大的模型比许多小模型更难处理。** 引擎会将构建场景的工作分摊到多个帧，以避免卡顿，但它无法拆分一个巨型模型——它会全部落在一帧中。许多较小的部分可流畅加载；一个单体部分更可能导致明显卡顿。
* **重复使用模型不会引入新的纹理或几何体。** 由一个模型构建的二十个路灯共享该模型的网格和纹理，而不会增加集合内容——第二十个不会占用额外纹理内存。材质是例外：引擎为每个渲染对象创建材质实例，以应用场景的边界裁剪，因此材质数量取决于渲染对象数量，而非使用的模型数量。这些实例仍共享相同纹理和着色器变体，因此只占用少量内存而非帧时间。使场景接近纹理 [限制](/creator/content-creator-zh/chang-jing-sdk7/you-hua/scene-limitations.md) 的是拥有许多 *不同的* 模型，每个模型都有自己定制的一套资源——因此将场景整合为由较小的可复用模型库组成会有所帮助。

### 背面剔除

为优化性能，背面剔除将在引擎中渲染时被设置为 **开启** 位于 **所有** 模型的材质，无论其自身设置如何。

如果您预计需要看到模型的背面或内部，请复制面并反转法线。

#### 故障排除

要验证场景是否存在材质背面剔除问题，请执行以下步骤：

1. 打开场景中的 `调试` 面板。

* 如果场景已发布，请在聊天中输入 `/debug` 命令。
* 如果您处于场景预览模式，请点击屏幕右上角的 Bug 图标（

  <img src="https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-92fe4dd70621a496d0da083ae9b5f9b2ef84d2dd%2Fdebug-icon.png?alt=media" alt="调试图标" width="32">

  ）。

2. 调试面板将显示在屏幕右下角。
3. 在 **当前场景**，点击 **背面调试器** 按钮。

![](https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-94f40725793fcbf697f6386ad6c6249ca681381c%2Fdebug-panel-backface-debugging.png?alt=media)

4. 切换 **强制背面剔除**：它会显示启用了背面剔除的渲染材质。这是优化上线后的实际渲染效果。开启和关闭切换，以找出需要修复的材质。
5. 切换 **背面调试器** 以便轻松找出关闭背面剔除的材质。它会突出显示：

* **红色**：未将背面剔除设为 **开启**.
* **绿色**：启用背面剔除的材质 **开启**.

<p align="center"><img src="https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-10a08003626ccbdfddd2c934ba820bee8f4c5233%2Fbackface-culling-off.png?alt=media" alt=""> <img src="https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-d6687fbcd37cba5a800269d6ff89eb3b20e828ea%2Fbackface-culling-on.png?alt=media" alt=""><br><em>关闭背面剔除的材质（左）与开启背面剔除的材质（右）</em></p>

### 资源包转换

每次发布场景时，Decentraland 内容服务器都会将其中每个 *.gltf* 和 *.glb* 模型压缩为资源包格式。此格式 *显著* 更轻量，使场景加载更快、运行更流畅。每次部署后都会立即开始转换。通常只需几秒钟，但对于非常大的场景或服务器繁忙时可能更久，因为转换会针对每个平台分别运行，并且可能排在其他场景之后。您可以 [直接查看转换状态](/creator/content-creator-zh/chang-jing-bian-ji-qi/fa-bu/publish-scene.md#check-the-conversion-status) 。

在开发场景时，您也可以在本地运行同样的转换。这会让预览更流畅，并让您在发布前检查压缩模型是否存在问题。请参阅 [使用优化后的资源预览](/creator/content-creator-zh/chang-jing-sdk7/ru-men/preview-scene.md#preview-with-optimized-assets).

{% hint style="info" %}
**💡 提示**：在 Decentraland 计划活动时，请至少提前一小时发布最终版本，以便模型届时都已转换为资源包，并留出时间修复意外问题。如果您不想在活动前剧透，可以部署一个包含项目文件夹中所有最终 3D 模型的场景版本，但让这些模型不可见或将其尺寸设为 0。
{% endhint %}

{% hint style="warning" %}
**📔 注意**：如果您对 3D 模型文件进行了 *任何* 更改，即使只是改名，它也会被视为新文件，必须再次转换为资源包格式。
{% endhint %}

## 连接性

如果场景连接到任何第三方服务器，或使用 [消息总线](/creator/content-creator-zh/chang-jing-sdk7/wang-luo/serverless-multiplayer.md#send-explicit-messagebus-messages) 在玩家之间发送消息，还有一些事项需要牢记。

* 您的场景同一时间应仅有一个活跃的 WebSocket 连接。
* HTTP 调用由引擎汇集处理，因此同一时间只处理一个调用。任何额外请求都会在内部排队，必须等待其他请求完成。此排队过程会自动处理，您无需做任何操作。
* 当使用 [消息总线](/creator/content-creator-zh/chang-jing-sdk7/wang-luo/serverless-multiplayer.md#send-explicit-messagebus-messages) 在玩家之间发送消息时，请注意所有消息都会发送给服务器岛中的所有其他玩家。避免收到一条消息就直接发送另一条消息的情况，因为当场景中有大量玩家时，消息数量会迅速呈指数增长。

## 场景 UI

当场景 UI 由许多独立元素组成时，其渲染成本可能很高。请记住，每个 UI 元素都需要引擎进行一次单独的绘制调用。

{% hint style="info" %}
**💡 提示**：尝试将多个元素合并成一张图片。例如，如果您有一个包含多个文本元素的菜单，理想做法是将图块中的文本和任何额外图像烘焙到背景图片中。这样可让引擎避免每帧为每个文本元素进行一次额外的绘制调用。
{% endhint %}

避免每帧调整 UI，这些操作成本特别高且最终可能排队。例如，如果 UI 中有一条会在一段时间内缩短的生命条，玩家可能不会注意到它以 10 FPS 而非 30 FPS（每帧）更新的区别。更新此生命条的系统可以使用一个计数 100 毫秒的短计时器，并只在计时器到达 0 时影响 UI。

避免拥有许多隐藏的 UI 元素，即使不被渲染，它们也会影响性能。尽可能按需创建 UI 组件。

## Worlds 中的景观地形

发布到 [Decentraland 世界](https://github.com/decentraland/docs/tree/main/creator/worlds/about.md) 周围环绕着自动生成的草地、树木和海洋景观。渲染该景观会消耗玩家部分渲染预算。如果场景不需要它，您可以 [禁用景观地形](/creator/content-creator-zh/chang-jing-sdk7/xiang-mu-lei-xing/scene-metadata.md#landscape-terrain) 在您的 `scene.json` 中，为场景自身内容释放这些资源。

## 监控性能

了解场景性能的最佳指标是 FPS（每秒帧数）。在预览中，您可以在调试面板中查看当前场景 FPS。应始终以达到 30 FPS 或更高为目标。

在已部署的场景中，您可以通过输入以下内容来切换显示这些指标的面板： `/showfps` 到聊天窗口中。

### 场景统计面板

在桌面客户端中预览运行场景时，您可以打开一个面板，显示场景内容的实时统计数据。点击屏幕右上角、控制台和调试图标旁边的统计图标。

<img src="https://2460066822-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-6b9e306d006a431474403f15b186791329c3dab4%2Fscene-stats-panel.png?alt=media" alt="场景统计面板" width="400">

该面板会将场景的三角形、实体、物理体和纹理与其限制进行对比计数，显示每项预算的使用百分比。数值达到限制的 80% 后会变为橙色。它还会显示材质、几何体、碰撞体以及外部视频或音频的纯数量。将鼠标悬停在每项指标旁的信息图标上，即可查看其计数内容及其重要性的说明。

随着内容加载和卸载，这些数值会实时更新，因此该面板很适合检查诸如 [延迟加载](#lazy-loading) 之类的策略如何影响引擎在任意时刻实际处理的内容。请参阅 [场景限制](/creator/content-creator-zh/chang-jing-sdk7/you-hua/scene-limitations.md) 了解各项限制的详细信息。请记住，这些是软限制：超出某项并不会阻止场景运行，但可能降低玩家的性能体验。

### 场景与引擎之间的消息

场景性能的主要瓶颈之一通常是场景代码与引擎之间发送消息。

当您在预览中运行场景时，请注意右上角显示“Y = 切换面板”。按键盘上的 Y 键，即可打开一个实时更新且含有实用信息的面板。

当您与涉及 SDK 和引擎之间消息的内容交互时，会发现“已处理消息”数字不断增加。您应密切关注“队列中待处理”数字，它应始终为 0 或接近 0。这表示有多少消息未能得到处理而被推送至队列。如果“队列中待处理”计数开始增长，则说明您已进入危险区域，应考虑进一步优化场景。

{% hint style="warning" %}
**📔 注意**：不使用面板时请勿保持其开启，因为它会对性能产生负面影响。
{% endhint %}

请记住，您在预览中体验到的性能可能不同于生产环境：

* 周围相邻场景可能产生负面影响
* 将场景的 3D 模型压缩为资源包可能产生正面影响
* 部分访问场景的玩家可能使用性能较弱的硬件

最佳实践始终是先将场景部署到一个 [Decentraland 世界](/creator/content-creator-zh/chang-jing-sdk7/fa-bu/publishing-options.md#decentraland-worlds) 以进行更彻底的测试。

始终向玩家征求反馈。切勿想当然地认为您体验到的场景对每个人来说都相同。

## 使用 AI 优化

AI 智能体可以为您处理本页所述的大量测量和修复工作。Decentraland 提供 [AI 技能](/creator/content-creator-zh/chang-jing-sdk7/ru-men/vibe-coding.md#install-skills-for-any-ai-agent) ，用于教导编程智能体（例如 Claude Code 或 Cursor）如何优化场景；桌面客户端还包含一个 [MCP 服务器](/creator/content-creator-zh/chang-jing-sdk7/ru-men/vibe-coding.md#let-the-ai-see-your-scene-in-world) ，可让智能体直接检查和测量您正在运行的场景。

安装 `optimize-scene` 和 `unity-explorer-mcp` 技能并连接 MCP 服务器后，智能体可以：

* **根据内容预算检查场景**：它读取与场景统计面板相同的实时统计数据，并将其与 [场景限制](/creator/content-creator-zh/chang-jing-sdk7/you-hua/scene-limitations.md)对比，因此可告诉您哪项预算即将耗尽。
* **找出造成问题的资源**：它根据每个 3D 模型贡献的三角形、材质和绘制调用数量对场景模型进行排序，也会包括从特定视角可见的内容，因此它确切知道应优先优化哪些模型。
* **测量实际帧率**：它可以将玩家定位到场景任意位置，并采样玩家在该位置实际体验到的 FPS，包括瞬时卡顿。
* **验证自己的工作**：每次更改后，它都可以重新测量，因此其建议和修复由真实数据支撑，而非猜测。

这样，优化就变成了您可以直接提出的请求：

> “检查我的场景是否在限制内，找出出生点附近任何拖慢帧率的内容，修复它，并向我展示前后数据。”

### 与 Blender MCP 服务器结合使用

Decentraland 工具会告诉智能体哪些模型最沉重，但不会编辑模型本身。若要进一步操作，您可以尝试将它们与 [Blender MCP 服务器](https://www.blender.org/lab/mcp-server/)结合使用，它让智能体可以使用 Blender 的编辑工具。这样智能体可以在 Blender 中打开沉重模型，减少其三角形数量、合并材质或缩小纹理，并将结果作为一个 `.glb` 文件导回场景，之后它可在世界中重新测量帧率。

请记住，自动网格编辑可能会明显改变模型外观，因此请始终审查结果并保留原始文件的备份。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-zh/chang-jing-sdk7/you-hua/performance-optimization.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
