n8n “Run Once for All Items“和“Run Once for Each Item“区别
文章目录
- **1. 执行次数**
- - **Run Once for All Items**(默认模式):
- - **Run Once for Each Item**:
- **2. 数据处理方式**
- - **Run Once for All Items**:
- - **Run Once for Each Item**:
- **3. 性能差异**
- - **Run Once for All Items(高)**:
- - **Run Once for Each Item(低)**:
- **4. 适用场景**
- - **选择 "Run Once for All Items" 的场景**:
- - **选择 "Run Once for Each Item" 的场景**:
- **5. 配置方法**
- 1. 打开代码节点(**Code Node**)的配置面板。
- 2. 找到 **"Mode"**(模式)选项。
- 3. 选择 **"Run Once for All Items"** 或 **"Run Once for Each Item"**。
- **6. 注意事项**
- - **性能敏感场景**:如果输入数据量很大(例如数万条),优先选择 **"Run Once for All Items"**。
- - **代码兼容性**:某些功能(如 `this` 上下文绑定)可能因模式不同而表现不同。
- - **数据结构**:两种模式的输入/输出数据结构不同,需根据模式调整代码逻辑。
- **总结**
在 n8n 中, “Run Once for All Items” 和 “Run Once for Each Item” 是代码节点(Code Node)的两种执行模式,它们的核心区别在于 如何处理输入数据 以及 代码的执行次数。以下是详细对比:
1. 执行次数
- Run Once for All Items(默认模式):
- 代码在整个工作流中只执行一次,无论输入数据中有多少条记录(Items)。
- 所有输入数据会被合并为一个整体传递给代码节点,代码需要自行处理所有数据。
- Run Once for Each Item:
- 代码会为每个输入记录(Item)单独执行一次。
- 每个 Item 被独立处理,代码需要针对单个数据条目操作。
2. 数据处理方式
- Run Once for All Items:
- 输入数据是一个包含所有 Items 的数组(
items
),代码需要遍历或统一处理这个数组。 - 适合需要全局处理或跨多个数据条目操作的场景(例如汇总统计、批量转换)。
- 示例:
// 假设输入数据是 3 个 Item const allItems = items; // items 是一个包含所有数据的数组 const result = allItems.map(item => {return { json: { processed: item.json.value * 2 } }; }); return result;
- Run Once for Each Item:
- 输入数据是单个 Item(
item
),代码直接针对当前 Item 操作。 - 适合需要逐条处理或依赖单个数据条目的场景(例如发送通知、独立计算)。
- 示例:
// 每个 Item 单独处理 const processedValue = item.json.value * 2; return { json: { processed: processedValue } };
3. 性能差异
- Run Once for All Items(高):
- 性能更高,因为代码仅执行一次,减少了重复调用的开销。
- 但需要手动处理数据遍历逻辑,代码复杂度可能较高。
- Run Once for Each Item(低):
- 性能较低,因为代码会多次执行(次数等于输入 Item 数量)。
- 但逻辑更简单,适合需要独立处理的场景。
4. 适用场景
- 选择 “Run Once for All Items” 的场景:
- 需要跨多个数据条目进行聚合或全局操作(如生成汇总报告、批量数据清洗)。
- 输入数据量较大时,追求性能优化。
- 示例:将多个订单数据合并生成一个总账单。
- 选择 “Run Once for Each Item” 的场景:
- 每个数据条目需要独立处理(如逐条发送邮件、独立计算指标)。
- 逻辑简单且不需要跨条目依赖。
- 示例:为每个用户注册事件发送独立的欢迎邮件。
5. 配置方法
在代码节点的设置中,可以通过以下方式切换模式:
1. 打开代码节点(Code Node)的配置面板。
2. 找到 “Mode”(模式)选项。
3. 选择 “Run Once for All Items” 或 “Run Once for Each Item”。
6. 注意事项
- 性能敏感场景:如果输入数据量很大(例如数万条),优先选择 “Run Once for All Items”。
- 代码兼容性:某些功能(如 this
上下文绑定)可能因模式不同而表现不同。
- 数据结构:两种模式的输入/输出数据结构不同,需根据模式调整代码逻辑。
总结
特性 | Run Once for All Items | Run Once for Each Item |
---|---|---|
执行次数 | 1 次 | 与输入 Item 数量相同 |
输入数据 | 所有 Item 的数组 | 单个 Item |
适用场景 | 全局处理、批量操作 | 逐条独立处理 |
性能 | 更高(适合大数据量) | 较低(适合小数据量或简单逻辑) |
代码复杂度 | 需手动遍历数据 | 直接操作单个数据条目 |
根据具体需求选择合适的模式,可以显著提升工作流的效率和可维护性。