现在流行的说法都是百度谷歌开始抛弃打开速度慢的网站了,但是对于网站速度的问题,影响因素有很多的,但是一个网站的性能问题却是绝对的,一般来说网站打开速度快的网站性能不一定好,但是网站性能比较好的网站速度也不会差到哪里去,今天借助我的友链的一个网站,来分类剖析网站性能优化的那些问题。
前言
规则
看上图,网站性能根据排序,分为A/B/C/D/E/F,A最好,后面的反之,因为是来自加拿大的测试服务器,所以加载时间这些我们不看,没有参考价值,我们主要看pagespeed和yslow这两个标签,下面的推荐项目,分数,类别,优先级,下面我们具体的分析下这个网站的问题。
PageSpeed分析
我们先来看一下PageSpeed的具体分析报告,看下图
下面开始具体的每条进行分析和解决。
Enable gzip compression
如何检查自己的网站有木有进行gzip压缩,可以使用下面这个网站试试:
站长直接Gzip检测
关于如何开启Gzip,115遇见有一篇很全面的文章
另外云落再添加一种,在wp-config.php文件添加下面代码也可以
define( 'ENFORCE_GZIP', true );
Leverage browser caching
解决办法也很简单,只需要在服务器htaccess文件里面添加下面代码【云落自用的】
## 文件缓存 ## <FilesMatch ".(html|gif|jpg|jpeg|png|ico|js|css)$"> Header set Cache-Control "max-age=2592000" </FilesMatch>
其实这一个项目和雅虎的一个项目很相似的,下面说道再说。
Optimize images
optimized version
,可以直接下载压缩版本的。Antelope是一款非常不错,简单的图片压缩软件,支持压缩jpg,png格式图片,界面非常的小清新,而且比较 […]
Specify image dimensions
我们来举个栗子:
<img src="xxoo/xxoo.jpg">
这段代码是高速浏览器,这里有一个突破,地址xxooxxoo,至于尺寸没有标明,那么需要浏览器自己检测这个图片了
<img width="250px" height="250px" src="xxoo/xxoo.jpg">
后面这句告诉浏览器,这里有个图片,地址xxooxxoo,尺寸是250*250,那么浏览器会直接按照你写明的尺寸进行展示,这个无形之中就帮助浏览器减轻了负担,版浏览器减轻了负担,不就是加快了网页的展示了嘛!
Minify JavaScript
下面推荐个js压缩工具,当然,你压缩完一个文件之后要检测下相关功能是否受到影响。
js在线压缩
Specify a cache validator
设定一个缓存验证,有的插件或者主题会使用.css.php或者js.php动态的加载静态文件,这个就导致浏览器没发正确的获得缓存验证
<IfModule mod_headers.c> <FilesMatch ".(php)$"> Header set Last-Modified "Tue, 31 Aug 2018 00:00:00 GMT" </FilesMatch> </IfModule>
Minify CSS
Remove query strings from static resources
移除静态文件的查询符,简单说静态文件的链接里面不能带有?问号的,关于这个针对这个站点我们分两步看。
第一步:接触缩略图里面的问号,由于这个站点缩略图使用的timthumb方案,可以采用七牛,又拍,OSS等云存储的解决方案,采用图片处理+自定义图片样式名就可以解决。
第二步,针对缩略图以外的查询符,我们可以使用下面这个方法来解决:
通过禁用WordPress静态资源的版本查询来实现WordPress的优化,Remove Query stri […]
Specify a Vary: Accept-Encoding header
这个还是头部的问题,主要说我是不是可以压缩的,问题不大没设置也无妨
<IfModule mod_headers.c> <FilesMatch ".(js|css|xml|gz|html)$"> Header append Vary: Accept-Encoding </FilesMatch> </IfModule>
Enable Keep-Alive
启用HTTP Keep-Alive或HTTP持久连接允许相同的TCP连接发送和接收多个HTTP请求,从而减少后续请求的延迟。打个比方吧,你从卧室版一堆东西到客厅,是没开一次门都关上,还是搬完东西再关门?其实很好理解的
解决办法也简单,还是htaccess文件
<ifModule mod_headers.c> Header set Connection keep-alive </ifModule>
Defer parsing of JavaScript
延迟加载js文件,简单说就是将js文件放在最后执行,放到WordPress里面就是加载js文件的时候需要这样执行
wp_register_script('default', get_template_directory_uri() . '/assets/js/global.js', false, '1.0', true );//底部加载 wp_enqueue_script('default');
Yslow分析
Add Expires headers
给静态文件添加过期头,其实这个问题和之前说过的浏览器缓存是一个道理的,也可以直接使用上面的代码
云落这里也可以提供一份完整一点的,其实都差不多
<IfModule mod_expires.c> # Enable expirations ExpiresActive On # Default directive ExpiresDefault "access plus 1 month" # My favicon ExpiresByType image/x-icon "access plus 1 year" # Images ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" # CSS ExpiresByType text/css "access plus 1 month" # Javascript ExpiresByType application/javascript "access plus 1 year" </IfModule>
Make fewer HTTP requests
减少http请求,简单说将一些不必要单独存在,经常是一起运行的静态文件合并到一起
js请求有20个,css请求有9个,不要忘了,还有若干图片请求。。。。。。
Use a Content Delivery Network (CDN)
这是让你使用cdn的,关于CDN其实说的很多,但是经常有人问我:用了XXX怎么感觉没快,反而慢了?使用XXX加速是真的吗?怎么没有感觉到?总之各种问题。
关于CDN我这里简单的做个比喻,平时我去打酱油都去小区大门口的大超市,没事都要跑大半个小区,突然有一天我们楼下开了个小店,我现在直接去楼下小店打酱油,你说,去门口超市打酱油速度快还是去楼下打酱油速度快?道理是明显的。
Use cookie-free domains
简单说就是使用一些不带cookie的域名来专门做静态文件的传输,其实上还是CDN的问题,解决了CDN也就解决了这个。
Reduce the number of DOM elements
减少DOM元素的数量,这里没有好的办法,只能从WordPress主题下手了,这个需要你有一定的技术了。
按需加载
按需加载这个是云落后加的,这个是一种思路,而不是具体方法,简单说,当前页面不需要的都应该被禁止加载,我这里简单的举例说明:
第一:图片弹窗
一般来说图片弹窗会应用于文章页,首页使用这个功能的很少,所以关于图片弹窗的js和css都应该安排在文章页加载,简单来说就是做个is_single()
的判断而已。
第二:代码高亮
同上一般来说代码高亮同样是运用在文章页的,但是很多代码高亮插件为了考虑兼容性,在首页同样加载相关js和css文件,那么同样应该被挪移到文章页。
第三:短代码
云落很喜欢使用短代码,但是使用短代码也会加在一些代码,并且并不是每篇文章都会使用某个短代码,如果直接加载了相关资源,是不是有点浪费?我们可以通过判断短代码是否存在来加载资源。举例:
function secret_css() { global $post; if ( has_shortcode( $post->post_content, 'secret') || has_shortcode( $post->post_content, 'vip') ){ echo '<style type="text/css">.wxpic{float:left;width:18%}.wxtips{color:#32B9B5;float:left;width:72%;padding-left:5%;padding-top:0;font-size:20px;line-height:150%;text-align:left;font-family:Microsoft YaHei}.yzts{margin-left: 40px}@media (max-width:600px){.yzts{margin-left:5px}.wxpic{float:left}.wxbox #verifycode{width:35%}.wxbox #verifybtn{width:22%}.wxpic,.wxtips{width:100%}.wxtips{font-size:15px;padding:2px}}</style>';}} add_action('wp_head', 'secret_css');
第四:后台资源
很多文都说WordPress后台也很卡,我可以详细的看看后台有木有多加载资源,我们一般可以根据当前所在页面来加载一些必要的资源。
后语
说了那么多,肯定有人问,那么博主你的怎么样?我来截个图看看吧
当然如果是壕玩家,那么可以无视文章所写,加钱提高宽带,上好的CDN 都是可以解决的。
相关链接
-- 完 --
测试看看看
很好,很强大,转载了,留着以后方便查看
那个添加过期头代码放在哪。。。原谅小白啊,检测了一下 两个B,一个让我添加过期头,一个让我添加CDN和浏览器缓存。浏览器缓存按照你的方法设置好了,就差过期头了,谢谢。
很好很强大
完全看不明白。。。
应该是对国内用户无效吧!我用我的博客测试结果是C和D!o(╯□╰)o
@明月登楼学习笔记 有限,因为这个是根据响应的的内容来判断的。不是根据速度,另外如果使用cdn的话,源站的一些优化就会无效,比如文章提到的网站,实际上优化设置都做了,但是加了360网站卫士,响应给浏览器的是360的,而不是源站的
博主的网站打开速度很快。
我把js和css都放在七牛上,结果说我没用cdn给了零分...
很强势,这分析。 😉
大赞啊 分析的很给力~ 🙄