gpt4 book ai didi

javascript - 什么时候真正使用 ChannelUrl?

转载 作者:可可西里 更新时间:2023-11-01 02:33:53 25 4
gpt4 key购买 nike

有谁知道传递给 FB.init 的 ChannelUrl 参数何时真正被 fb js sdk 使用?我可以看到它在我们的 nginx 日志文件中受到攻击,它似乎来自 IE8 用户,但我似乎无法手动重新创建它。我有一个粉丝页面 iframe 应用程序,带有点赞按钮和评论插件。

最佳答案

你可以看到这个帖子。解释得很好。

https://developers.facebook.com/blog/post/2011/08/02/how-to--optimize-social-plugin-performance/

此帖子链接将来可能会更新。所以我复制粘贴了 FB 开发者博客中的整篇文章,并将全部功劳归功于作者。


操作方法:优化社交插件性能作者:Ankur Pansari - 2011 年 8 月 3 日凌晨 12:00

数以百万计的网站使用 XFBML 来呈现社交插件。我们想分享一些可以提高这些网站性能的最佳实践。具体来说,我们提供自定义 channelUrl 和异步加载,使用后,将缩短加载时间并减少其他问题,例如重复计算来自 Facebook 的推荐流量。

自定义 channel URL 是 FB.init 函数中称为 channelUrl 的可选参数。初始化 JavaScript 库时,在 FB.init 函数中添加 channelUrl 参数:

<div id="fb-root"></div>
<script src="//connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : 'YOUR APP ID',
status: true, // check login status
cookie: true, // enable cookies to allow server to access session,
xfbml: true, // enable XFBML and social plugins
oauth: true, // enable OAuth 2.0
channelUrl: 'http://www.yourdomain.com/channel.html' //custom channel
});
</script>

channelUrl 指向您添加到本地目录的文件,这有助于提高某些旧版浏览器的通信速度。如果没有 channelUrl,我们将被迫使用变通方法,例如在 Conceal 的 iframe 中加载网页的第二个副本,以正确加载社交插件。解决方法会增加加载时间并增加来自 Facebook 的推荐流量。

要创建 channel.html 文件,请将以下行添加到文件(位于 http://www.yourdomain.com/channel.html ):

<script src="//connect.facebook.net/en_US/all.js"></script>

如果您有能力运行 PHP,我们强烈建议为 channelUrl 文件设置一个长缓存以确保最佳性能。这是完成此操作的示例 PHP 脚本:

<?php
$cache_expire = 60*60*24*365;
header("Pragma: public");
header("Cache-Control: maxage=".$cache_expire);
header('Expires: '.gmdate('D, d M Y H:i:s', time()+$cache_expire).' GMT');
?>

<script src="//connect.facebook.net/en_US/all.js"></script>

在这种情况下,您还应该将 channelUrl 文件设置为完全限定的 URL,例如 http://www.yourdomain.com/channel.php .

在我们的测试中,添加自定义 channelUrl 可以提高 Internet Explorer 的性能,因此建议我们所有的开发人员都包含它。当包含该参数时,Internet Explorer 会产生统计上显着的性能提升,其中具有 5 个 XFBML 插件的测试网站的加载时间从 1.10 秒缩短到 0.43 秒。

异步加载是另一种简单的策略,它允许您的页面快速加载而不会阻塞页面其他元素的加载。成功加载 JS SDK 后,我们调用 window.fbAsyncInit 函数。所有依赖于 Facebook API 调用的前端函数都应分离并通过 window.fbAsyncInit 调用。这确保了 Facebook 功能以非阻塞方式加载,并将加快其呈现速度,这具有积极的 SEO 优势。在设计社交功能时,您应该以这种心态着手。

例如:

<html xmlns:fb="https://www.facebook.com/2008/fbml">
<body>
<div id="fb-root"></div>
<script>
/* All Facebook functions should be included
in this function, or at least initiated from here */
window.fbAsyncInit = function() {
FB.init({appId: 'your app id',
status: true,
cookie: true,
xfbml: true});

FB.api('/me', function(response) {
console.log(response.name);
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
</body>
<html>

我们更新了文档以反射(reflect)这些选项的重要性,并更改了默认示例代码以包含 channelUrl。作为 Operation Developer Love 的一部分,我们将继续更新我们的文档,并通过“How-To”博客文章分享更多最佳实践。

关于javascript - 什么时候真正使用 ChannelUrl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8980012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com