【问题标题】:Scripts are being load more than once in Wordpress在 Wordpress 中多次加载脚本
【发布时间】:2014-01-22 01:19:12
【问题描述】:

我正在尝试从 CDNjs 和 Google 等 CDN 加载我的一些脚本,这些脚本正在正确加载,但由于某种原因我没有找到,对于每个脚本我都有两个甚至三个 HTTP 请求(对于相同的脚本),这里是一个例子:http://tools.pingdom.com/fpt/#!/ePuR3Z/http://elbauldelprogramador.com.

我注意到当我登录时,所有脚本都只生成一个 HTTP 请求。

来自 ajax.googleapis 的 jquery 正在生成两个 http 请求,而 jquery.easing.min.js 来自 cdnjs 三个。

代码是:

//Making jQuery Google API
function modify_jquery() {
    if (!is_admin()) {
        // comment out the next two lines to load the local copy of jQuery
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js', false, '2.0.3');
        wp_enqueue_script('jquery');
   }
}
add_action('init','modify_jquery');

我有一个子主题,我从他的父母那里复制了一个名为 wi_enqueue() 的函数。在父函数中是这样的:

add_action( 'wp_enqueue_scripts', 'wi_enqueue' );
if ( !function_exists('wi_enqueue') ) {
function wi_enqueue(){
 /* ...*/
}

在我的子function.php中我有:

function wi_enqueue(){
    global $wp_styles, $smof_data;

    /* Enqueue */
    wp_enqueue_script( 'wi-easing', '//cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js', array('jquery'), '1.3', true );  
    wp_enqueue_script( 'wi-touchswipe', '//cdnjs.cloudflare.com/ajax/libs/jquery.touchswipe/1.6.4/jquery.touchSwipe.min.js', array('jquery'), '1.3.3', true );
    wp_enqueue_script( 'wi-autosize', '//cdnjs.cloudflare.com/ajax/libs/autosize.js/1.17.1/autosize-min.js', array('jquery'), '1.17.1', true );
    wp_enqueue_script( 'wi-placeholder', '//cdnjs.cloudflare.com/ajax/libs/placeholders/2.1.0/placeholders.min.js', array('jquery'), '2.1.0', true );
    wp_enqueue_script( 'wi-modernizr', get_template_directory_uri() . '/js/modernizr.custom.15463.js', array('jquery'), '2.6.2', true );
    wp_enqueue_script( 'wi-waypoint', '//cdnjs.cloudflare.com/ajax/libs/waypoints/2.0.2/waypoints.min.js', array('jquery'), '2.0.2', true );
    wp_enqueue_script( 'wi-tipsy', get_template_directory_uri() . '/js/jquery.tipsy.js', array('jquery'), '1.0.0', true );
    wp_enqueue_script( 'wi-fitvids', get_template_directory_uri() . '/js/jquery.fitvids.js', array('jquery'), '1.0', true );
    wp_enqueue_script( 'wi-sidr', get_template_directory_uri() . '/js/jquery.sidr.min.js', array('jquery'), '1.1.1', true );

/* .... */
}

【问题讨论】:

  • 你真的不应该这样做。这是一个非常bad practice。请放弃这种方法。 wordpress 自己的 jQuery 没有任何问题(除了非常极端的案例使用。)
  • @Andy,这不是错误信息。 CDN 在许多国家/地区的工作方式与在美国​​或东欧不同。例如,在中国(世界互联网用户的三分之一)谷歌 CDN 的工作是零星的,如果有的话。工作时,网站的加载时间可以增加 200%。我建议你在指责别人 "spreading around misinformation" 之前先做好功课。如果这是一个很好的解决方案,它早就在核心中了。更不用说在这个问题中从谷歌加载的 jQuery 不是处于无冲突模式,
  • @Andy some reading material。这是便于教育阅读的 3 个链接。如果你不相信那些核心开发者,我想我也可以找到 Matt Mullenweg 在这个主题上的 cmets。
  • @Andy - 做你想做的事。关键是 - 如果你有问题,你不能知道。您可能正在开发小型本地网站,而您从未真正尝试过从国外检查它们。就像上面评论链接中所说的那样 - 您不知道您的用户是否有权访问 CDN。你不知道他们的加载时间。您不知道丢失的用户。 YOU 没有问题这一事实并不能使它成为一个好习惯,也不能使我成为 spreading around misinformation。
  • @Andy,如果你拒绝聊天,最后一条评论 - 你应该阅读你发布的链接 .. 如果你仔细阅读 - 它们实际上帮助我放弃了一点。我也想知道"misinformation"我应该"stop spreading around like this"(和喜欢什么.. ??)。

标签: javascript php jquery wordpress


【解决方案1】:

这可能会也可能不会解决您的问题,但不久前我遇到了一个非常类似的问题,并且花了很长时间寻找解决方案。最后发现,一些浏览器(Firefox 是最常见的有罪浏览器)基于<link rel="next" /> 标签预取下一篇文章/文章,包括 JS 和其他页面元素。

这里有更多关于此的信息:http://www.ebrueggeman.com/blog/wordpress-relnext-and-firefox-prefetching

如果您仍然遇到问题,希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果脚本被多次加载,请检查您的源代码并再次保存。然后,您可能需要清除浏览器缓存以确保清除以前的缓存,以便您可以查看当前更新的网站。如果您仍然遇到同样的问题,可能是因为您的模板或 wordpress 没有正确安装/配置。

    因此,如果您仍然遇到同样的问题,我强烈建议您在 wordpress.org 上发布一个帖子。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 2018-04-02
      • 2023-04-04
      • 2015-07-08
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多