网站性能优化的实战指南

简介: 性能优化是应用程序开发必须的工作之一,其目的之一为用户提供极致的速度体验,本文总结 WEB 应用或者网站可以快速实操的经验。

性能优化是应用程序开发必须的工作之一,其目的之一为用户提供极致的速度体验,本文总结 WEB 应用或者网站可以快速实操的经验。

应用本身

应用或者网站本身的优化,不包括逻辑和代码的优化。其中包括大家熟悉的资源最小化、图片懒加载、减少HTTP请求、延迟加载、预加载。

资源最小化

资源(静态资源)压缩是指从 HTMLCSSJavaScript 中删除不需要加载的不必要的冗余数据的过程,包括删除代码注释和格式、空白字符、未使用的代码、换行符等。现在的前端技术,这些工作都有现成的工具可以完成。

缩小 HTML、CSS 和 JavaScript 将加快前端加载时间,因为它减少了需要从服务器请求的代码量。

生成 HTML、CSS 和 JavaScript 代码的优化版本可以借助工具,如下:

延迟加载

延迟加载有助于进一步缩短前端加载时间,使用延迟加载,首先确保主要的内容先加载,如页面框架、文本内容、首屏内容等。在实际应用中可以对 JavaScript 进行延迟加载,HTML 中可以有两个相关属性 asyncdefer , 这个两个属性使得 script 都不会阻塞DOM 的渲染。:

  • defer 属性规定是否对脚本执行进行延迟,直到页面加载为止。
  • async:会使得 script 脚本异步的加载并在允许的情况下执行,并且不会按着 script 在页面中的顺序来执行,而是谁先加载完谁执行。
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-157283337-2"></script>
<script defer src="https://www.googletagmanager.com/gtag/js?id=UA-157283337-2"></script>

图片懒加载

图片懒加载又称图片延时加载、惰性加载,即在用户需要看到图片的时候加载,这样可以减少请求,节省带宽,提高页面加载速度。

通常将页面中的 img 标签属性 src 指向一张小尺寸图片或者为空,然后定义 data-src 属性指向真实的图片。当载入页面时,先把可视区域内的 img 标签的 data-src 属性值赋值给 src ,然后增加页面滚动事件,把用户即将看到的图片加载。

如果不想自己写代码,可以使用第三方脚本库,如 lazyload

现代浏览器也实现了懒加载的功能,即为需要实现懒加载的标签增加属性 loading="lazy",如:

<img src="image.jpg" alt="..." loading="lazy">
<iframe src="video-player.html" title="..." loading="lazy"></iframe>

预加载

预加载就是通过设置相应的资源属性告诉浏览器是否需要预取,包括 CSS文件、JavaScript文件、DNS接下,主要是在HTML页面的 <head></head> 间加入 <meta />

<link rel="dns-prefetch" href="//www.devpoint.cn" />
<link rel="preload" as="style" href="/devpoint/public/css/site.css"/>
<link as="script"  rel="preload" href="/devpoint/public/scripts/site_min.js" />

减少HTTP请求

减少HTTP请求,常见的原则页面尽量只有一个 CSS 文件和一个 JavaScript 文件,CSS小图片使用 CSS Sprites (使用图像集合拼接成一个图像文件,然后通过使用 CSS 中的 background-imagebackground-position 属性来显示所需的图像区域。这样做可以减少了所需的服务器请求数量)。

服务器侧

服务器侧这里简单介绍部署环境的优化,常见的方式是为静态资源增加缓存、压缩文件。

缓存

为静态资源增加缓存是常见的处理方式,通常在项目开发中建议采用动静分离,即所谓的静态资源与应用本身分离,方便对静态资源进行优化,增加缓存或者增加CDN都可以方便的实现。下面是以Nginx的配置为例,为静态资源增加缓存:

location ~* \.(gif|webp|txt|jpg|jpeg|png|swf|flv|ico|mp4|js|css|eot|ttf|woff|woff2|svg|bmp|doc|zip|docx|rar)$ {
    proxy_cache cache_one;
    proxy_cache_valid 200 302 24h;
    proxy_cache_valid 301 30d;
    proxy_cache_valid any 5m;
    expires 90d;
}

压缩文件

对于WEB项目,可以使用合适的方法压缩文件,可以轻松地对前端的加载时间产生重大影响。以下是可以遵循的两个不错的文件压缩选项:

Gzip :最流行的数据压缩和解压缩方法,所有现代浏览器都支持,Gzip 在将站点的 HTML、CSS 和 JavaScript 包发送到浏览器之前先在服务器端对其进行压缩,然后在客户端解压缩文件并传送内容。Brotli :与当前可用的压缩方法相比,它提供了最佳的压缩率,根据 CertSimple 的研究,Brotli 压缩 JavaScript 文件比 Gzip14%,而 HTML 和 CSS 压缩率比 Gzip21%17%

gzip on;
gzip_vary on;
gzip_proxied off;
gzip_comp_level 3;
gzip_buffers 32 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

总结

性能黄金法则80-90% 的最终用户响应时间用于下载前端组件,例如图像、样式表、脚本等。

因此,优化前端数据加载对于降低跳出率和增加用户在网站上的停留时间至关重要。


相关文章
|
10月前
|
设计模式 缓存 Java
吃透阿里2023版Java性能优化小册后,我让公司系统性能提升了200%
性能优化可以说是很多一线大厂对其公司内高级开发的基本要求(其中以Java岗最为显著)。其原因有两个:一是提高系统的性能,二是为公司节省资源。两者都能做到,那你就不可谓不是普通程序员眼中的“调优大神了”。 那么如何成为一名“调优大神”呢?
|
运维 Kubernetes 负载均衡
使用K8s之我见
作为开发者,想必都对docker并不陌生,尤其是做后端开发的开发者更为熟悉。但是前段时间有个新闻关于docker马上要停止开源,这对于应用容器领域来说是一个晴天霹雳。但是docker停止开源,想必会让其他应用容器引擎能够有更好的发展。随着容器化的快速发展,关于集群管理、资源整合调度等相关领域的历史问题都得到了很好的解决,而且最为耀眼的就是谷歌开源的Kubernetes,那么接下来就来谈谈关于K8s相关的内容。
147 0
使用K8s之我见
|
存储 缓存 网络协议
强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍
强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍
强推Linux高性能服务器编程, 真的是后端开发技术提升, 沉淀自身不容错过的一本经典书籍
|
前端开发 JavaScript
前端性能优化之企业项目实战篇(2)
前端性能优化之企业项目实战篇(2)
96 0
|
Web App开发 前端开发 测试技术
前端性能优化之企业项目实战篇(1)
前端性能优化之企业项目实战篇(1)
103 0
|
敏捷开发 运维 监控
技术分享 | 想测试入门就必须要懂的软件开发流程
技术分享 | 想测试入门就必须要懂的软件开发流程
|
XML Rust Java
C++之我见:重剑无锋,大巧不工
首先声明,编程语言没有银弹,要懂得因地制宜,随机应变。陷入语言之争是无意义的。但我也认为对于程序员而言,学习和使用哪门语言是有个人偏好的,偏爱哪个自然也无关乎对错。
234 0
C++之我见:重剑无锋,大巧不工
|
敏捷开发 运维 监控
技术分享 | 想测试入门就必须要懂的软件开发流程
从事软件测试行业,每天面对的被测对象都是软件。如果想要更好的去完成测试工作,首先需要对被测对象,也就是对软件要有基本的了解。 ## 软件 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。 程序好理解,就是可以操作的产品。比如 wps、微信、QQ、网页等等这些都是程序。比如说需求文档、设计文档、用户手册这些东西都属于文档。在页面中展示的,还有用户输入的内容这些都是数据。 所以说程
|
存储 缓存 监控
珍藏版《大型网站技术架构知识汇总》,架构师必备
珍藏版《大型网站技术架构知识汇总》,架构师必备
155 0
珍藏版《大型网站技术架构知识汇总》,架构师必备
|
Java 测试技术 Apache
五款资深高效的Web性能测试工具
五款资深高效的Web性能测试工具
191 0