Shopify Functions

Shopify Function 输入查询成本超过 30 点怎么压

现象#

输入查询里给每条 cart line 都取了 product 的两个 metafield 和 hasAnyTag,线上函数始终返回空 operations,日志里看不到业务报错,只有这次运行没有产生结果。

原因#

  • 输入查询有 30 点成本上限,任何返回 Metafield 的字段记 3 点,叶子字段记 1 点
  • 成本按查询结构算而不是按返回数据量算,fragment 里的 metafield 每个都计费
  • hasAnyTag、inAnyCollection 这类判断字段同样算 3 点
  • 查询文本本身还有 3,000 字节上限,注释不计入,别名与列表参数都计入

处理步骤#

  1. 把 metafield 收拢到 shop 或 cart 层一次取回,代码里按 id 查表
  2. 同一对象多次取值合并成别名,如 limit: metafield(...)
  3. 删掉判定用不到的字段,列表型参数控制在 100 个元素以内
  4. 标签判断改成商品 metafield 里预存布尔值,绕开 hasAnyTag 的 3 点
  5. 用 shopify app function schema --stdout 对照 schema 后再部署观察

验收标准#

部署输出不再出现查询成本告警,回放日志里函数能取到判定所需的全部字段,operations 不再为空。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。