Onesignal插件推迟JS

时间:2018-01-08 03:09:24

标签: javascript jquery wordpress deferred

您好我有一个wordpress网站,我根据GT Metrix建议推迟了脚本设置。除了Onesignal推送通知插件

之外,所有脚本都被推迟
<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async></script>

function js_defer_attr($tag){

$scripts_to_exclude = array('.jsdelivr');

foreach($scripts_to_exclude as $exclude_script){
   if(true == strpos($tag, $exclude_script ) )
      return $tag;
}
   return str_replace( ' src', ' defer="defer" onload src', $tag );
}
add_filter( 'script_loader_tag', 'js_defer_attr', 10 );

我猜它是在页面加载/延迟完成后添加脚本加载?

有任何帮助吗? 干杯

1 个答案:

答案 0 :(得分:1)

我在我的网站上做到了,它工作正常……并且将首先加载更重要的页面内容。这样,用户体验会更好。

我会解释我做了什么。

我更改了OneSignal插件代码,并将所有广告代码都移到了另一个文件头。如果文件不存在,则会在运行时创建该文件。

假设我创建了一个名为“ onesignal_deferred.js”的新文件。

然后我将其添加到页面的页脚:

function add_script(url){
   var element = document.createElement("script");
   element.src = url;
   document.body.appendChild(element);
}        
function downloadJSAtOnload(){
    add_script("add_script("https://<domain>/onesignal_deferred.js")
}
if (window.addEventListener)
    window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
    window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;

清单也不是必须的.​​..因为它适用于旧版本的Chrome ...因此它是一项新的优化,您可以在每次页面浏览中节省一个请求。

我还可以使用相同的函数“ add_script”来推迟其他脚本,例如Google Analytics(分析)和其他任何脚本。

ps:当您推迟使用Google Analytics(分析)时,有时在载入事件之前关闭的页面不会被视为视图...在这种情况下,您可能会被错误的Google Analytics(分析)报告所欺骗,该报告称页面加载速度更快。这种情况是,加载页面的速度太慢将不会计入……因为Google Analytic脚本甚至都不会加载。