我最近遇到了一个问题,当页面上有很多图像时,Facebook API 需要很长时间才能初始化。当有大约 50MB 的图像时,我会更加明显。Facebook init 实际上是在一切之前首先调用的,但它似乎仍然要等到所有图像都被首先加载。95% 的图像实际上是异步附加到页面的。
有没有人遇到过类似的问题?在这一点上,我不确定这是否是一个错误或浏览器的行为方式,但它在 Chrome 和 Safari 中非常一致。我还确保在任何地方都没有可能阻止初始化的同步代码。
由于我们依赖 Facebook 通过首先检查 cookie 来确定用户是否已经登录(如果没有 cookie,则调用 Facebook),这对用户的体验有很大影响。我们还使用 Facebook 登录作为主要方式,因此用户在 API 初始化之前无法登录。
这很容易通过较慢的互联网连接重现。如果您想查看实际行为,可以访问https://www.toovia.com。单击右上角的登录,您将看到 Face Pile 不存在,即 API 仍在初始化中。
这是我初始化 API 的方式。它几乎是从 Facebook 文档中复制而来的。
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);