Shopify Function 输入查询成本超过 30 点怎么压
现象#
输入查询里给每条 cart line 都取了 product 的两个 metafield 和 hasAnyTag,线上函数始终返回空 operations,日志里看不到业务报错,只有这次运行没有产生结果。
原因#
- 输入查询有 30 点成本上限,任何返回 Metafield 的字段记 3 点,叶子字段记 1 点
- 成本按查询结构算而不是按返回数据量算,fragment 里的 metafield 每个都计费
hasAnyTag、inAnyCollection这类判断字段同样算 3 点- 查询文本本身还有 3,000 字节上限,注释不计入,别名与列表参数都计入
处理步骤#
- 把 metafield 收拢到
shop或cart层一次取回,代码里按 id 查表 - 同一对象多次取值合并成别名,如
limit: metafield(...) - 删掉判定用不到的字段,列表型参数控制在 100 个元素以内
- 标签判断改成商品 metafield 里预存布尔值,绕开
hasAnyTag的 3 点 - 用
shopify app function schema --stdout对照 schema 后再部署观察
验收标准#
部署输出不再出现查询成本告警,回放日志里函数能取到判定所需的全部字段,operations 不再为空。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。