为什么 facebook 的转换像素会加载多个 JavaScript 文件?

Why does facebook's conversion pixel load multiple JavaScript files?

如果我访问安装了 facebook 转换像素的网站(例如 https://www.walmart.com/),我注意到像素加载了几个不同的 JavaScript 文件。

第一个是https://connect.facebook.net/en_US/fbevents.js

第二个是 https://connect.facebook.net/signals/config/168539446845503?v=2.9.2&r=stable。这似乎有一些用户特定的配置数据烘焙到文件中。

第三个是https://connect.facebook.net/signals/plugins/inferredEvents.js?v=2.9.2

我不明白的是,为什么 Facebook 不简单地将所有这些合并到一个请求中,例如 https://connect.facebook.net/en_US/168539446845503/fbevents.js?v=2.9.2&r=stable,然后简单地 return 一个包含所有内容的文件?这将能够完成转换像素现在所做的一切,但需要 1 个请求而不是 3 个。

由于该页面对其加载提出了一百多个请求,因此加载 1 个 javascript 文件而不是 3 个文件不会有显着改进。

Facebook为了更好的设计选择了分成3个文件,大概是:

  • 1 个通用库:fbevents.js
  • 1 更具体:inferredEvents.js,使用第一个
  • 1 个包含生成代码的文件,可能特定于商家 168539446845503(沃尔玛?)

这种碎片化使代码维护更容易(测试、可重用性、错误修复)。

最后,通用文件 fbevents.js 和 inferredEvents.js 可以由浏览器缓存并在其他网站上重复使用。这是一种优化,可能比你建议的更好。

与几年前相比,对同一个来源的多个资源请求远不是一个问题:

  1. 网速更快。
  2. 延迟更短(在 5G 手机上最明显)。
  3. HTTP/3 protocol 有许多改进,有助于同时从同一服务器多路复用文件。
  4. 浏览器不会像过去那样严格限制站点的活动连接数(无论如何 HTTP/3 都没有关系)。

Facebook 使用 HTTP/3,您可以在此处看到: