api-design - 为什么 facebook 的转换像素会加载多个 JavaScript 文件?
问题描述
如果我访问安装了 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
,然后简单地返回一个包含所有内容的文件?这将能够完成转换像素现在所做的所有事情,但需要 1 个请求而不是 3 个请求。
解决方案
由于该页面对其加载提出了一百多个请求,因此加载 1 个 javascript 文件而不是 3 个不会带来显着的改进。
Facebook 选择分成 3 个文件以获得更好的设计,可能是:
- 1 个通用库:fbevents.js
- 1更具体:inferredEvents.js,使用第一个
- 1 个包含生成代码的文件,可能特定于商家 168539446845503(沃尔玛?)
这种碎片化使代码维护更容易(测试、可重用性、错误修复)。
最后,通用文件 fbevents.js 和 inferredEvents.js 可以被浏览器缓存并在其他网站上重复使用。这是一种优化,可能比您建议的要好。
推荐阅读
- python - 使用 sklearn 虚拟分类器的随机分类器
- android - (Android) 错误:未找到 Admob + 未加载广告
- protege - Protege 导出推理不适用于规则
- python - 从另一个数据框和列表创建数据框
- swift - Auth0 swift4 无法处理要点范围
- python-3.x - Python - 如何通过查找对象的属性来搜索存储在列表中的对象
- mysql - 根据条件加入 MySQL 表
- r - corrplot 中的数学符号
- ios - UITableView - 如何在拖动开始时阻止触摸事件被取消?
- asp.net-mvc - 字段密码必须是字符串或数组类型,最大长度为 '30'