在wordpress后台,wordpre【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。ss采用了一招load-scripts.【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。php来加载核心的javascript代【本文受版权保护】【转载请注明来源】码,你可以在wordpress后台的ht著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.netml源代码中看到链接。但是有一个问题,就【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net是每次加载的load-scripts.p本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】hp的体积很大,导致后台实际上加载速度慢【本文受版权保护】【转载请注明来源】。在我上一篇文章中,也提到了php加载c【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】ss遇到性能问题。那么怎么来解决这个问题原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】呢?
【本文受版权保护】【关注微信公众号:wwwtangshua【转载请注明来源】【未经授权禁止转载】ngnet】本文版权归作者所有,未经授权不得转载。【作者:唐霜】实际上,wordpress通过load-【转载请注明来源】本文版权归作者所有,未经授权不得转载。scripts.php来加载的javas转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】cript代码,多半情况下是不会变的,输【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。出结果是一样的。我们打开/wp-admi【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】n/load-scripts.php来看未经授权,禁止复制转载。未经授权,禁止复制转载。看它的源码是怎么回事。
著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。而在源码的底部,我们可以看到这样一段代码【原创不易,请尊重版权】原创内容,盗版必究。:
著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。【原创内容,转载请注明出处】【作者:唐霜】header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expires_offset ) . ' GMT');
header("Cache-Control: public, max-age=$expires_offset");
看样子wordpress试图要做一个缓存【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。,通过Cache-Control: pu【版权所有,侵权必究】未经授权,禁止复制转载。blic来向浏览器发出缓存请求。但是可惜未经授权,禁止复制转载。【原创不易,请尊重版权】的是,这一缓存请求并没有被接受。我们通过【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】chrome的调试面板去看network著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】一栏,可以发现,每次对load-scri转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netpts.php的请求都是200响应,每次著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。都是重新请求的资源。因此,我们要修改这个【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。缓存,从而实现真正的浏览器缓存。把上面这本文作者:唐霜,转载请注明出处。【未经授权禁止转载】两句代码替换为:
【作者:唐霜】【版权所有】唐霜 www.tangshu原创内容,盗版必究。【本文受版权保护】ang.net著作权归作者所有,禁止商业用途转载。function http_header_cache($expire = '+15 minutes') {
date_default_timezone_set('Etc/GMT');
header("Cache-Control: public");
header("Pragma: cache"); // 如果存在缓存,则使用缓存
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$last_modified = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
$expire = strtotime(trim("$last_modified $expire"));
if($expire > time()) {
header("Expires: ".gmdate("D, d M Y H:i:s",$expire)." GMT");
header("Last-Modified: $last_modified",true,304);
exit;
}
}
// 如果不存在缓存,则增加上次更新时间,从而加入缓存
header("Expires: ".gmdate("D, d M Y H:i:s",strtotime($expire))." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
date_default_timezone_set('PRC');
}
http_header_cache($expires_offset);
这个http_header_cache函【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net数是我的御用函数,我几乎在所有需要用到浏本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net览器缓存的项目中都用到它。现在分享出来,本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。解决这个问题。把上面的代码替换之后,通过【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。header向浏览器端发送的缓存请求就实【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。现了,第一次进入后台的时候会加载一次全部著作权归作者所有,禁止商业用途转载。【作者:唐霜】代码,而第二次请求时,直接使用浏览器缓存【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】的内容,http响应码也变成了304。
著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】转载请注明出处:www.tangshua未经授权,禁止复制转载。【原创不易,请尊重版权】ng.net但是,这个方法是有问题的,也就是每次wo【未经授权禁止转载】【原创内容,转载请注明出处】rdpress升级的时候,核心文件会被覆【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net盖,这段代码也就被升级后的wordpre【原创内容,转载请注明出处】【未经授权禁止转载】ss核心代码覆盖掉了。那么怎么来处理这个【作者:唐霜】【本文受版权保护】问题呢?我们回到load-scripts【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】.php的使用上。
【版权所有】唐霜 www.tangshu【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.netang.net【作者:唐霜】【作者:唐霜】【访问 www.tangshuang.n本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。et 获取更多精彩内容】在后台,为什么wordpress使用lo【原创内容,转载请注明出处】原创内容,盗版必究。ad-scripts.php来加载jav【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netascript呢?它是通过在/wp-ad【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.netmin/admin-header.php转载请注明出处:www.tangshuang.net【作者:唐霜】中的do_action( 'admin_enqueue_scripts', $hook_suffix );这个位置的钩子输出的。所以,其实,我们是【版权所有,侵权必究】原创内容,盗版必究。可以改变load-scripts.php本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。的输出内容的。而最终,我们在/wp-in【原创内容,转载请注明出处】【未经授权禁止转载】cludes/script-loader原创内容,盗版必究。【本文受版权保护】.php中找到了最终的输出函数function _print_scripts(),在输出load-scripts.php【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net时,竟然使用了esc_attr(),那么我们就可以在这个位置上大做文章了。【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。因为ecs_attr()函数的输出是有一著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net个钩子的:attribute_escap本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】e,所以,我们就可以在这个钩子上进行处理【版权所有,侵权必究】原创内容,盗版必究。:
add_filter('attribute_escape','change_load_scripts_filter');
function change_load_scripts_filter($url) {
if(strpos($url,admin_url('load-scripts.php')) === 0) $url = '...your own url...';
return $url;
}
当我们发现attribute_escap【本文受版权保护】未经授权,禁止复制转载。e这个钩子要处理的url包含load-s【本文受版权保护】【版权所有】唐霜 www.tangshuang.netcripts.php时,把它替换为一个真【版权所有】唐霜 www.tangshuang.net【作者:唐霜】实的javascripts.js文件,当【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net然,这个文件得和load-scripts【未经授权禁止转载】【版权所有,侵权必究】.php输出的内容一模一样。
【版权所有】唐霜 www.tangshu著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netang.net【版权所有】唐霜 www.tangshu原创内容,盗版必究。转载请注明出处:www.tangshuang.netang.net【本文受版权保护】2016-03-09 11047



define(‘CONCATENATE_SCRIPTS’, false); 就好了其实、
很赞👍
感谢分享