Facebook聊天插件“杀死”页面速度至33

9

我已经通过从Facebook.com生成的代码添加了Facebook聊天插件

<!-- Load Facebook SDK for JavaScript -->
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<!-- Your customer chat code -->
<div class="fb-customerchat"
  attribution=setup_tool
  page_id="124030157608968">
</div>`

然而我在Google Chrome中运行了Pagespeed测试,结果很糟糕。有什么建议解决这个问题吗?非常感谢!

enter image description here


1
对于这个问题,你能做的事情很少,因为这些都是由插件加载的资源,而不在你的控制范围内。 - misorude
3个回答

7

有同样的问题。无论您是否以异步方式初始化它,它都会显著降低网站的页面速度指数!

为了完全避开此问题,我采用了以下方法:

我在页面右下角放置了一个假的 Messenger 按钮:

<svg id="fb-messanger-fake-button" width="60px" height="60px" viewBox="0 0 60 60" cursor="pointer">
    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g>
        <circle fill="#00B2FF" cx="30" cy="30" r="30"></circle><svg x="10" y="10">
            <g transform="translate(0.000000, -10.000000)" fill="#FFFFFF">
            <g id="logo" transform="translate(0.000000, 10.000000)">
                <path
                d="M20,0 C31.2666,0 40,8.2528 40,19.4 C40,30.5472 31.2666,38.8 20,38.8 C17.9763,38.8 16.0348,38.5327 14.2106,38.0311 C13.856,37.9335 13.4789,37.9612 13.1424,38.1098 L9.1727,39.8621 C8.1343,40.3205 6.9621,39.5819 6.9273,38.4474 L6.8184,34.8894 C6.805,34.4513 6.6078,34.0414 6.2811,33.7492 C2.3896,30.2691 0,25.2307 0,19.4 C0,8.2528 8.7334,0 20,0 Z M7.99009,25.07344 C7.42629,25.96794 8.52579,26.97594 9.36809,26.33674 L15.67879,21.54734 C16.10569,21.22334 16.69559,21.22164 17.12429,21.54314 L21.79709,25.04774 C23.19919,26.09944 25.20039,25.73014 26.13499,24.24744 L32.00999,14.92654 C32.57369,14.03204 31.47419,13.02404 30.63189,13.66324 L24.32119,18.45264 C23.89429,18.77664 23.30439,18.77834 22.87569,18.45674 L18.20299,14.95224 C16.80079,13.90064 14.79959,14.26984 13.86509,15.75264 L7.99009,25.07344 Z">
                </path>
            </g>
            </g>
        </svg>
        </g>
    </g>
</svg>

我使用CSS将其定位在右下角,恰好与您的配置所显示的真正的信使按钮重合:

#fb-messanger-fake-button {
    position: fixed;
    bottom: 24px;
    right: 24px;
    z-index: 100;
    transition: opacity 0.3s;
}

使用 jQuery(在我这里)或纯 JavaScript(如果你想),实现逻辑,当用户点击我们的假 Messanger 按钮时,注入 Facebook SDK 并启动 Messanger 插件:
// Facebook SDK for JavaScript inject code
function injectFbSdkAsync(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
    fjs.parentNode.insertBefore(js, fjs);
};

$(function() {
    const $fbMessangerFakeButton = $('#fb-messanger-fake-button');
    $fbMessangerFakeButton.on('click', function(){
        // Fades out the fake button a bit, to indicate "loading"
        $fbMessangerFakeButton.css({ opacity: 0.4 });
        // Inject the Facebook SDK in async manner:
        injectFbSdkAsync(document, 'script', 'facebook-jssdk');

        // Callback on Facebook SDK init, that fires up the Messanger plugin
        window.fbAsyncInit = function() {
            FB.init({ xfbml: true, version: 'v8.0' });

            // Callback when Facebook SDK finish up with rendering
            FB.Event.subscribe('xfbml.render', function(){
                // Immediately toggle opening the Facebook Messanger,
                // as if the user clicked the real Messanger button.
                FB.CustomerChat.show(true);

                // Hide the fake button, so that only the real one remains!
                $fbMessangerFakeButton.css({ display: 'none' });
            });
        };
    });
});

就是这样!您的页面速度指数已恢复正常。


1

我非常喜欢Kaloyan的方法。谢谢!这对于网站性能来说非常有用,变得更加明显。

我已经改进了带有小微调器的虚拟按钮,作为加载指示器-只是为了更好的用户体验。

此外,我用


0

请问您能详细说明一下您所说的“从那里实现”是什么意思吗?- 我理解为将脚本复制到本地,那么在“js.src=”中应该放置什么? - chenop
你可以将文件 https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js 下载到本地。然后在代码片段中将其 URL 更改为 https://your-domain.com/xfbml.customerchat.js 或者你保存它的位置。 - Evgeniy
我尝试过这个,但它并没有显著提高页面速度。页面速度减慢的主要原因大多是由PHP文件和由该js代码触发的大量js文件包造成的,而不是js本身的大小。此外,看起来谷歌的页面洞察忽略了defer和async,因为它们对我的页面评分没有任何改变。 - Terry Windwalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接