常用优化网页加载速度方法
许多研究发现,页面速度和访客的滞留时间,跳出率以及收入都有直接的关系。另外,谷歌的排名算法中也把页面加载速度作为其中一项考虑因素。因此,你网站的页面加载时间是至关重要的。从访问者的角度看,测试你的浏览器速度的一个很好的方法是清除你的浏览器缓存,然后加载页面。
小于2秒的页载入时间被认为是优良的,而且高达4秒是可接受的。而大于5秒的页面载入时间不仅影响你网站的搜索引擎排名,还会严重影响用户体验。这里列出了几种方法,可以快速提升你网站的性能。
1. 优化图像
图像对于吸引访客的关注是很重要的。但是你添加到页面上的每一张图片都需要用户从你的服务器下载到他们的电脑上。这无疑增加了页面的加载时间,因此很可能让用户离开你的网站。所以,优化图像是非常必要的。
过大的图像需要的下载时间更多,因此要确保图像尽可能的小。可以使用图像处理工具如PS来减小颜色深度、剪切图像到合适的尺寸等。
在图片适合的情况下尽可能的减小图片大小。
2. 去掉不必要的插件
一个非常值得关注但经常被忽略的因素是你网站安装的插件。如今,大量免费的插件诱导网站开发者添加很多不必要的功能。您安装的每个插件都需要服务器处理,从而增加了页面加载时间。所以禁用和删除不必要的插件。
然而,有些插件是必须的,如社交分享插件,你可以选择CMS内置的社交分享功能来代替安装插件。
将展示网页中不用的插件和连接等尽可能去掉
3. 减少DNS查询(DNS lookups)
减少DNS查询是一个WEB开发人员可以用了页面加载时间快速有效的方法。DNS查询需要话费很长的时间来返回一个主机名的IP地址。而浏览器在查询结束前不会进行任何操作。对于不同的元素可以使用不同的主机名,如URL、图像、脚本文件、样式文件、FLASH元素等。具有多种网络元素的页面经常需要进行多个DNS查询,因而花费的时间更长。
减少不同域名的数量将减少并行下载的数量,加速你的网站
4. 最小化重定向
重定向增加了额外的HTTP请求,因此也增加了页面加载时间。然而有时重定向却是不可避免的,如链接网站的不同部分、保存多个域名、或者从不存在的页面跳转到新页面。
重定向增加了延迟时间,因此要尽量避免使用它。检查是否有损坏的链接,并立即修复。
5. 使用内容分发网络(Content Delivery Network CDN)
服务器处理大流量是很困难的,这最终会导致页面加载速度变慢。而使用CDN就可以解决这一问题,提升页面加载速度。
CDN是位于全球不同地方的高性能网络服务,复制你网站的静态资源,并以最有效的方式来为访客服务。
6. 把CSS文件放在页面顶部,而JS文件放在底部
把CSS文件在页面底部引入可以禁止逐步渲染,节省浏览器加载和重绘页面元素的资源。
JavaScript是用于功能和验证。把JS文件放在页面底部可以避免代码执行前的等待时间,从而提升页面加载速度。
这些都是一些减少页面加载时间和提高转换率的方法。在某些情况下,需要JavaScript在页面的顶部加载(如某些第三方跟踪脚本)。
7. 利用浏览器缓存
浏览器缓存是允许访客的浏览器缓存你网站页面副本的一个功能。这有助于访客再次访问时,直接从缓存中读取内容而不必重新加载。这节省了向服务器发送HTTP请求的时间。此外,通过优化您的网站的缓存系统往往也会降低您的网站的带宽和托管费用。
8. 使用 CSS Sprites 整合图像
多图像的网站加载时间比较久。其中一个解决方法就是把多个图像整合到少数几个输出文件中。你可以使用 CSS Sprites 来整合图像文件。这样就减少了在下载其他资源时的往返次数和延迟,从而提高了站点的速度。
9. 压缩CSS和JavaScript
压缩是通过移除不必要的字符(如TAB、空格、回车、代码注释等),以帮助减少其大小和网页的后续加载时间的过程。这是非常重要的,但是,你还需要保存JS和CSS的原文件,以便更新和修改代码。
10. 启用GZIP压缩
在服务器上压缩网站的页面是提升网站访问速度非常有效的一种方法。你可以用gzip压缩做到这一点。Gzip是一个减小发送给访客的HTML文件、JS和CSS体积的工具。压缩的文件减少了HTTP响应时间。据Yahoo报道,这大概可以减少70%的下载时间。而目前90%的通过浏览器的流量都支持Gzip压缩,因此,这是一个提示网站性能有效的选项。
优化你的网站是留住你的访客和提升搜索引擎排名有效的途径。
前端实现懒加载(lazyload)
在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,还浪费带宽。这也就是们通常所说的首屏加载,技术上现实其中要用的技术就是图片懒加载–到可视区域再加载。
思路:
将页面里所有img属性src属性用data-xx代替,当页面滚动直至此图片出现在可视区域时,用js取到该图片的data-xx的值赋给src。
关于各种宽高:
页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offsetWidth (包括边线的宽); 网页可见区域高: document.body.offsetHeight (包括边线的宽); 网页正文全文宽: document.body.scrollWidth; 网页正文全文高: document.body.scrollHeight; 网页被卷去的高: document.body.scrollTop; 网页被卷去的左: document.body.scrollLeft; 网页正文部分上: window.screenTop; 网页正文部分左: window.screenLeft; 屏幕分辨率的高: window.screen.height; 屏幕分辨率的宽: window.screen.width; 屏幕可用工作区高度: window.screen.availHeight;
示例:
jqueryLazyload方式
下载地址:
<section class="module-section" id="container"> <img class="lazy-load" data-original="../static/img/loveLetter/teacher/teacher1.jpg" width="640" height="480" alt="测试懒加载图片"/> </section>
require.config({ baseUrl : "/static", paths: { jquery:'component/jquery/jquery-3.1.0.min' jqueryLazyload: 'component/lazyLoad/jquery.lazyload',//图片懒加载 }, shim: { jqueryLazyload: { deps: ['jquery'], exports: '$' } } });
require( [ 'jquery', 'jqueryLazyload' ], function($){ $(document).ready(function() { $("img.lazy-load").lazyload({ effect : "fadeIn", //渐现,show(直接显示),fadeIn(淡入),slideDown(下拉) threshold : 180, //预加载,在图片距离屏幕180px时提前载入 event: 'click', // 事件触发时才加载,click(点击),mouseover(鼠标划过),sporty(运动的),默认为scroll(滑动) container: $("#container"), // 指定对某容器中的图片实现效果 failure_limit:2 //加载2张可见区域外的图片,lazyload默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况 }); }); });
为了代码可读性,属性值我都写好了注释。值得注意的是预制图片属性为data-original,并且最好是给予初始高宽占位,以免影响布局,当然这里为了演示我是写死的640x480,如果是响应式页面,高宽需要动态计算。
dome演示地址:http://www.jq22.com/yanshi390
echo.js方式
一款非常简单实用轻量级的图片延时加载插件echo.js,如果你的项目中没有依赖jquery,那么这将是个不错的选择,50行代码,压缩后才1k。当然你完全可以集成到自己项目中去!
下载地址:https://github.com/helijun/helijun/tree/master/plugin/echo
<style> .demo img { width: 736px; height: 490px; background: url(images/loading.gif) 50% no-repeat;} </style>
<div class="demo"> <img class="lazy" src="images/blank.gif" data-echo="images/big-1.jpg"> </div>
<script src="js/echo.min.js"></script> <script> Echo.init({ offset: 0,//离可视区域多少像素的图片可以被加载 throttle: 0 //图片延时多少毫秒加载 }); </script>
说明:blank.gif是一张背景图片,包含在插件里了。图片的宽高必须设定,当然,可以使用外部样式对多张图片统一控制大小。data-echo指向的是真正的图片地址。
图片懒加载是相当常见且简单实用的功能,如果你的项目中还是傻瓜式的一次性全部加载,那么请花20分钟优化下~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
搭建Dubbo开发学习环境——补充新版本的Dubbo-Admin的编译和执行过程
由于最近公司正在进行服务治理和改造,越来越多的项目将会被分拆成服务的形式从原有的高耦合度的项目中剥离。作为(接口)性能测试,也需要跟上变化。本文的写作目的,在于搭建一个Zookeeper单节点、Dubbo的学习环境。 Dubbo的作用: 当服务越来越多时,容量的评估,小服务资源的浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力实时管理集群容量,提供集群利用率。其中,用于提高机器利用率的资源调度和治理中心是关键。 Dubbo 是阿里巴巴开源项目的一个分布式服务框架。致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,Dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有Dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSDL,以服务者与消费者的方式在Dubbo上注册)。 名词解释: - WSDL:Web Services Description Language,网络服务描述语言 - RPC:Remote Procedur...
- 下一篇
Python Fire试用体验
之前用Python写过一些CLI的小工具,在CLI命令行传参处理上,一般都是用argparse,最近看到Google开源的Python Fire(2017-3-2就开源了), 把argparse包装了,可以自动将代码转变成 CLI,开发者无需做任何额外工作。减少没有技术含量的代码量,减少低级Bug产生可能,节省了宝贵的吃鸡时间。这么有意义的库,那么肯定要推荐下给小伙伴们。 Python Fire优点 省心。开发者不必定义参数,设置帮助信息,或者编写定义代码运行方式的 main 函数。相反,开发者只需从 main 模块调用“Fire”函数,其余工作全部交由 Python Fire 来完成。 有爱。Fire自带检查功能,将 Python 对象(无论是类、对象、字典、函数甚至整个模块)转变成一个 Tab 命令补全和文档齐备的命令行界面,并且这
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果