我们应该在WordPress项目中使用预先捆绑的javascript文件吗?

时间:2017-01-14 04:50:54

标签: wordpress module webpack requirejs bundle

最近我尝试使用像requirejs / browserify / webpack这样的模块系统作为我的wordpress项目,主要目的是捆绑资产(javascript,css文件等)。

但是我有一个令人困惑的问题:我们应该在WordPress主题/插件项目中使用预先捆绑的javascript文件吗?

预捆绑脚本的优点是减少请求并提高性能,为什么这是一个问题?

因为wordpress网站通常不只是使用一个主题而是使用许多插件。如果wordpress模块​​(主题/插件)使用预先捆绑的脚本,则可能导致由不同模块加载的相同脚本,用户无法将其出列。

例如:

预束

我的主题A使用预先捆绑的脚本文件bundle.js,其中包括lodash,backbone,jquery,carousel插件,bootstrap ...,用户在其网站上使用了我的主题,并激活了许多插件,一些插件入列主干,bootstrap或其他相同的插件。即使我们可以解决冲突问题,网站也会多次加载相同的库/插件,从而导致页面不必要的额外加载时间。

束后

如果我们使用WordPress方式wp_enqueue_script()wp_enqueue_style()分别加载脚本并实现资产依赖。当在不同模块中使用相同的脚本时,用户可以使用wp_dequeue_script()将脚本出列,并且用户可以使用一些minfiy / merge插件来合并所有脚本,我称之为post-bundle。

所以,再次提问,我们应该在WordPress项目中使用预先捆绑的javascript文件吗?或者你有什么建议在WordPress项目中组织脚本的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

是的,这肯定是你应该做的事情。我对WordPress没有多少经验,因此不清楚如何根据每个请求动态评估脚本列表来实现这一点。

我认为,有一件事可能是为某组脚本创建一个静态包,比如public class ListViewActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); String[] osArray = getResources().getStringArray(R.array.os_list); final ListView osListView = (ListView)findViewById(R.id.osListView); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,osArray); osListView.setAdapter(arrayAdapter); } } foo.jsbar.js,然后做一些事情。这些行:

  • 在HTML输出中呈现之前评估所有脚本
  • 对于每个脚本,检查它是否是捆绑包的一部分
  • 如果是,请将脚本出列,将包标记为包含
  • 最后,将所有应包含的包排入队列

显然,这需要在PHP和JS之间进行大量的工具和共享数据,而且你不能轻易放入WP实例,因为你可能不得不进行一些手动更改比方说,每次插件列表发生变化时。虽然,既然你可以完全控制bundle,你当然可以实现更好的优化,除了简单的&#34;采取HTML响应,提取脚本,连接和缩小,转换响应&#34;大多数WP所有者都在努力解决这个问题。