【问题标题】:what is the best way to include libraries?包含库的最佳方式是什么?
【发布时间】:2023-03-11 04:12:01
【问题描述】:

我正在尝试创建一个移动轮播,我发现最好的方法是使用 jquery 移动库,问题是当直接将它包含在模板中时会阻塞渲染。

顺便说一下,我用的是wordpress。

这就是为什么我的查询是基于是否有任何好的做法来包含库(在我的情况下是 jQuery Mobile)而不损害负载/或页面速度分数。

已经非常感谢你了!!!

【问题讨论】:

  • 不要全部包含在内。它已被废弃多年
  • @j08691 感谢您的回答,我不明白您所说的“不包括所有内容”是什么意思。

标签: javascript jquery wordpress


【解决方案1】:

您始终可以通过添加defer 属性来修改<script> 标记的输出。这将使您的(JS)脚本非阻塞。

具有 defer 属性的脚本将阻止 DOMContentLoaded 事件触发,直到脚本加载并完成评估。 MDN

首先将wp_enqueue_scriptwp_enqueue_style 包装在wp_enqueue_scripts 操作处理程序中。这是注册和排队脚本和样式WP Docs的正确方法。

add_action('wp_enqueue_scripts', function() {
  wp_enqueue_script('jqm_js', 'https://code.jquery.com/mobile/1.2./jquery.mobile-1.2.0.min.js', ['jquery'], '1.2.0');

  wp_register_style('jqm_css', 'https://code.jquery.com/mobile/1.2./jquery.mobile-1.2.0.min.css', [], '1.2.0');
  wp_enqueue_style('jqm_css',);
}, 10);

使用script_loader_tag 过滤器,您可以修改<script> 标记的生成方式。如果句柄在$handles 数组中,则以下 sn-p 将检查每个已注册和排队的脚本。如果是,那么它将在脚本中添加一个defer 属性。

修改 $handles 数组中的值以添加或删除您想要延迟的任何脚本。

add_filter('script_loader_tag', function ($tag, $handle, $src) {
  $handles = ['jqm_js'];

  if (in_array($handle, $handles)) {
    $tag = str_replace(' src', ' defer="defer" src', $tag);
  }

  return $tag;
}, 10, 3);

【讨论】:

  • 您的回答非常有用,我最终使用了 flickity,并且正如您告诉我的那样效果很好!一个查询为什么你使用 defer="defer" 而不仅仅是 defer?
  • 那是因为如果你只是做defer,那么PHP会将它渲染为defer="",这是有效的,但感觉更像是一个副作用,因为你没有指定空字符串属性。如果您执行defer="defer",则输出将为defer="defer",从而使您的代码执行您期望它执行的操作。
  • 非常感谢您的精彩解释!
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多