0

Woocommerce 运输计算运行过于频繁。

Woocommerce 运输设置效果很好,直到您构建了一个自定义运输插件,该插件通过 HTTP API 调用使用外部报价系统,此时您意识到在订单过程中不必要地计算了数十次运输 - 减慢了一切。

我们在澳大利亚邮政系统和快递聚合系统中向外部服务器进行 API 调用,以获取邮政和运费。这需要大约 5 秒来完成两个 API 调用,并且由于calculate_shipping()似乎在每次添加和修改购物车时都会调用该函数,在进入结帐页面时,然后在结帐页面中相关地址字段的每次击键时都有 5-无处不在的第二次延迟和不必要的 HTTP 调用。

结帐页面上每次击键的 ajax 调用似乎也在排队并一个接一个地处理,因此用户可以坐下来观看 30 秒,同时填充运输选项,然后清除几次,然后才能选择一个。

另一个愚蠢的结果是,引用不完整地址返回的错误最终会将屏幕滚动到显示通知的顶部,这会阻止用户完成输入地址。

所以问题是如何阻止 WC 调用calculate_shipping(),直到所有运输字段都完成并且可能最后一个字段失去焦点 - 或任何替代建议来做类似的事情并避免多次调用。

为了消除每次购物车添加的运费计算,我只是测试了当前请求 URI,如果不是则直接返回

if ('https://aaa.bbb/checkout/' !== $_SERVER['HTTP_REFERER']) {
    return;
}

似乎没问题,但是,我预计以后会有一些并发症,否则为什么 WC 会在每次添加购物车时都这样做。

在结帐时,虽然它是一个不同的故事。我需要运输来运行,但不是每个输入到地址字段的新字符,这似乎是默认功能。似乎有一个计时器在起作用,如果你在输入地址时暂停超过几秒钟,它就会触发update_checkout()或类似的调用calculate_shipping(),所以我最终联系了邮政服务器和快递服务器以询问新的报价。(我敢肯定,他们会厌倦这种 DOS 攻击)

我一直在研究 checkout.js 脚本,但真的不想弄乱 WC 功能并且无法更新,所以不确定是否要更改它。

在这个阶段不相关

我想要的是在所有物品都在购物车中并且用户完成输入他们的地址之前不计算运费 - 其他任何东西似乎有点傻。

4

0 回答 0