@H_502_0@wordpress 本身以及主题和插件通常需要加载一些 JavaScript 来实现某些特殊功能。为了最大限度地保证兼容性,不至于出现 JavaScript 失效的情况,所以一般在页头加载 JavaScript 文件。但是根据 Yahoo 开发者论坛的建议,加载 JavaScript 应该尽量在页尾以提高页面的显示(响应、渲染)速度。本文根据作者的使用经验介绍几个相关插件,并说明如何在某些特殊页面仍然在页头加载 JavaScript。
@H_
502_0@下面先简单介绍几个相关的优化 JavaScript 的
wordpress 插件及特点,然后演示如何处理一些特殊情况。
@H_
502_0@
我曾经用过
、、wordpress.org/extend/plugins/footer-javascript/">JavaScript to Footer这三个
插件,下面一一介绍其特点。
@H_
502_0@
1. WP Minify
这个
插件将 Minify 引擎整合到
wordpress 中。一经启用,该
插件就能够合并和压缩你的 JS 和 CSS
文件来提高
页面的加载速度。
@H_
502_0@WP Minify 能够抓取
生成的
wordpress 页面中的 JS/CSS
文件,将
文件列表传递给 Minify 引擎。Minify 引擎处理后返回一个加强、精简并经过压缩的 JavaScript 或样式表
文件(CSS),由 WP Minify 将其替换到
wordpress 页头中。
@H_
502_0@其主要特点是:
- 易于使用;
- 对 JavaScript、CSS 和 HTML 均有效;
- 提供了调试工具;
- 能够处理外部 JS 和 CSS 文件;
- 能够排除指定 JS 和 CSS 文件;
- 能够指定处理后的 JS 和 CSS 文件的位置(页头或页尾,甚至别的地方);
- 可对处理后的 JS 和 CSS 文件添加过期时间等。
@H_
502_0@
当
wordpress 3.1 测试版出来后,我发现 WP Minify 与之不兼容,会导致网站无法正确加载。
@H_
502_0@
2. Autoptimize
也许将来 WP Minify
升级后会
解决不兼容问题,但是我等不及了。后来找到了 Autoptimize 这个具有类似
功能的
插件,而且这个
插件操作更简单。
@H_
502_0@Autoptimize 整合、精简并压缩所有的 JS 和 样式表(CSS)
文件,
增加缓存过期标志。然后将样式表
文件放到页头(同样是为了提高
页面加载效率),并将 JS
文件放到页尾。它还能够精简 HTML
代码,给你的
页面瘦身。不过我觉得给 HTML
页面瘦身作用不是很明显,只要你的服务器开启了 Gzip 压缩特性就没必要这么做了。
@H_
502_0@默认情况下,Autoptimize 会按照上面介绍的方式优化所有 HTML/CSS/JavaScript 。
@H_
502_0@我个人觉得,Autoptimize 是比 WP Minify 更好用的
wordpress 优化
插件。
@H_
502_0@
3. JavaScript to Footer
这个
插件写的非常简洁。我查看了源
代码,完成任务的
代码只有 6 个
wordpress 函数(见下文),也就是 6 行。所以这个
插件从创建之后就怎么更新过。我一开始就因为见它最后更改日期还停留在2009年9月22日,所以把它给忽略了。
@H_
502_0@但是它仅仅优化 JavaScript 的加载位置,也就是将所有在
wordpress 中正确声明了的 Javascript
文件都给移到
页面末尾来加载。它没有对 HTML
代码和 CSS 样式表
文件作任何处理。
@H_
502_0@根据 JavaScript to Footer 的源
代码,它使用下面的 6 行
代码来完成工作:
PHP;">
remove_action('wp_head','wp_print_scripts');
remove_action('wp_head','wp_print_head_scripts',9);
remove_action('wp_head','wp_enqueue_scripts',1);
add_action('wp_footer','wp_print_scripts',5);
add_action('wp_footer',5);
@H_
502_0@如果有需要,可以在某个特定
wordpress 模板的 wp_head()
函数前加入下面的
代码,将上述过程逆转过来,也就是使之失效,恢复成了本来的加载位置:
PHP;">
remove_action('wp_footer',5);
remove_action('wp_footer',5);
add_action('wp_head','wp_print_scripts');
add_action('wp_head',9);
add_action('wp_head',1);
@H_
502_0@当然只是说某些特定的
页面模板,如果是所有
页面,那干脆禁用该
插件好了 :D
@H_
502_0@
二. 使用方法
相信对于大多数 WPer 来说,看了前面的介绍就知道如何选择自己需要的优化
插件并合理使用了。无非是基于以下三个方面来考虑:
@H_
502_0@你的
页面模板中是否使用了大量的 HTML 注释、空格、空行等
标记?如果没有,那么你就不需要为了一点点(开启 Gzip 压缩时通常 1% 以下)的带宽节省而使用 HTML 精简
功能;
你的
页面中是否加载了多个 CSS 样式表
文件?如果没有,你也不需要通过
插件来精简和整合 CSS 样式表,手工精简和整合 CSS 样式表比使用
插件更加简单有效;
基于
wordpress 默认会在页头中加载 JavaScript,一般的
wordpress 网站都需要对 JS 的加载位置进行优化。但是如果你大部分的
页面也都需要在
页面头部加载 JS 以保证不会出现 JS 失效的情况,那你就不能进行这样的优化了。
在我看来,WP Minify 就不需要了,原因在前面已经说过了。那么剩下的 Autoptimize 和 JavaScript to Footer 可以选用其一或者两者配合使用(如果是配合使用,当然是使用前者的 HTML 和 CSS 精简/整合
功能,而使用后者的 JS 位置控制
功能,因为后者就这一个
功能)。我只需要控制 JS 的加载位置,所以就选择了 JavaScript to Footer。因为我的
页面中也就四五个 JS
文件,又是放到页尾加载,我觉得没必要进行整合。
@H_
502_0@
三. 特殊情况处理
虽然将 JavaScript
文件都放到
页面末尾加载对于
页面加载速度很有帮助,但是请注意,所谓
页面末尾指的是在
wordpress 的 wp_footer()
函数中
调用,这个
函数通常刚好位于
页面的