在不影响依赖项的情况下组合入队js

时间:2014-09-18 作者:Ünsal Korkmaz

我想合并一些javascript文件,同时保留其他脚本对它们的依赖关系。有什么办法吗?

<小时>

Details:

BuddyPress enqueue 6-7 little javascripts的新版本:

// Legacy
\'bp-confirm\',
\'bp-widget-members\',
\'bp-jquery-query\',
\'bp-jquery-cookie\',
// 2.1
\'jquery-caret\',
\'jquery-atwho\'
例如,bp confirm只是一行脚本:

jQuery(document).ready(function(){jQuery("a.confirm").click(function(){return confirm(BP_Confirm.are_you_sure)?!0:!1})});
这太疯狂了。我想将这些结合起来,但遗憾的是,其他一些javascript队列依赖于这些小js文件。我想不出解决办法。有什么想法吗?

3 个回复
最合适的回答,由SO网友:gmazzap 整理而成

从你的评论中我读到

这就是为什么我在寻找一种方式对wordpress说:“嘿,我添加了那些js文件,别担心。”。这就是这个问题的全部目的

我认为这是完全公平的,我问了你的问题,但问题是这种方式不存在,或者更好的方式不存在一种干净、规范的方式。

如何首先,您必须查看7个脚本的所有依赖项,并注意这些依赖项,以便将来使用,为所有7个脚本创建一个单独的组合js文件wp_print_scripts 可能是优先权晚了PHP_INT_MAX, 在挂钩回调中,检查BuddyPress是否已安装并激活,如果已安装并激活,请将7个脚本排入队列,将7个文件的所有依赖项(即您在第#1点发现的那些文件)用作依赖项WordPress将添加您的单个脚本(包含7个脚本)以及所有需要的依赖项,并且一切正常。

如果第三方BuddyPress插件将使用其中一个BP脚本作为依赖项添加脚本,例如:。

add_action( \'wp_enqueue_scripts\', function() {

  wp_enqueue_script( \'thirdparty-bp-script\', $js_url, array( \'bp-jquery-query\' ) );

} );
一切都将正常运行,因为此脚本在\'wp_enqueue_scripts\', 此时,作为依赖项使用的BP脚本已排队,所以WordPress不会再次添加它。

问题此工作流可能有什么问题?我认为工作流本身没有什么问题,但如果您想将此脚本用于共享或出售主题,我真的不鼓励您这样做。

原因是BP脚本可能在插件的不同版本中发生了更改,同时维护了脚本句柄。因此,您需要返回BuddyPress历史记录,逐行查看该脚本,为每个BP版本添加不同版本的组合脚本,并通过检查安装的BP版本将正确的脚本排队。

当然,脚本将来可能会更改,或者可能会添加一些新脚本,因此在每个BP版本上,即使是较小的版本,您也需要检查脚本及其依赖关系,并在需要时添加脚本的新版本。正如您所理解的,这变得很难维护,您可以打赌您的用户会遇到问题。

IMHO这种优化,即使required 在任何性能很重要的WordPress安装中(全部?)应该由站点所有者实施,在您的情况下,由将安装您的主题的人员实施,而不是由主题开发人员实施。

例如,有人可能希望将站点中排队的所有js(而不仅仅是主题中使用的ONCE)结合起来,并使用CDN,这会怎么样?

总之,如果你想为你自己的网站做到这一点,请遵循我的步骤,这应该是可行的,但如果你计划分享/销售你的主题,请保持原样。

如果您愿意,可以在主题文档中添加一个部分,解释如何组合脚本以获得更好的性能,并让用户选择是否这样做。

SO网友:Pieter Goosen

老实说,我会not 这样做吧。

PRO\'S and CON\'s

PRO\'S这里真的没有任何专业版,除了少了几个文件。我甚至不认为将这些文件组合在一起会获得任何显著的加载时间

CON\'S

这里有很多问题

您不应该直接更改buddypress文件。升级时,您将失去所做的一切

这意味着您必须创建一个子主题或另一个插件来取消这些脚本的注册和出列after 他们已经成功加载,然后用所有代码创建一个新的js文件并将其排队。

不必要地加载不需要的脚本。我相信buddypress的作者在创建大量js文件时有一种疯狂的方法。我不知道buddypress的内部工作原理,但我的逻辑思维告诉我,这是由于条件加载造成的

结合所有这些脚本可能会打破其他东西,如您所说的依赖关系。您甚至可能在某些页面上出现意外行为

前端和后端脚本的加载方式不同,因此后端和前端的脚本不应混合使用。

我确实认为我遗漏了一些方面,但这些是最基本的要点。我真的会重新思考整个过程,首先会联系buddypress的作者,提出以下问题

为什么js文件的数量如此之多,这是因为条件加载、前端和后端脚本等

如果单个js文件的数量没有明显的原因,是否可以在buddypress的未来版本中合并这些脚本

SO网友:lippoliv

为什么不将这些句柄反注册到6个不同的文件中,然后将这些句柄重新注册到一个组合文件中?

我想如果你有6个不同的句柄,指向一个文件,WordPress只会对这个文件进行一次加密。

所以你可以保证你的依赖关系不会破裂。

这对你来说是一个可能的解决方案吗?

结束

相关推荐

将链接替换为表单以将变量传递给javascript/ajax

我通过一个链接向javascript/ajax发送一个变量,但我想通过一个表单发送,这样我也可以传递用户输入。(这是一个插件,它与Echonest混音python脚本交互以创建音频编辑)。简短的问题是,我如何在WP ajax javascript中接收此内容:<form id=\"receive_me\" method=\"POST\"> Username: <input type=\"text\" name=\"user_variable\"> <input