【JavaWeb】Web前端性能优化

简介: 【JavaWeb】Web前端性能优化

定位产生性能问题的具体原因后,就需要进行性能优化,根据网站分层架构,可分为 Web前端性能优化、应用服务器性能优化、存储服务器性能优化3大类。

以下分为三篇文章分别记录分析:

第一部分是关于Web前端性能优化

一般说来Web前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图模型、图片服务、CDN服务等,主要优化手段有优化浏览器访问、使用反向代理、CDN等。

一、 浏览器访问优化

1.1 减少http请求

HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要建立通信链路、进行数据传输,而在服务器端,每个HTTP都需要启动独立的线程去处理。这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效提高访问性能。

减少HTTP的主要手段是合并CSS、合并JavaScript、合并图片。将浏览器一次访问需要的JavaScript、CSS合并成一个文件,这样浏览器就只需要一次请求。图片也可以合并,多张图片合并成一张,如果每张图片都有不同的超链接,可通过CSS偏移响应鼠标点击操作,构造不同的URL。

1.2 使用浏览器缓存

对一个网站而言,CSS、JavaScript、Logo、图标这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。通过设置HTTP头中Cache-Control和Expires的属性,可设定浏览器缓存,缓存时间可以是数天,甚至是几个月。

在某些时候,静态资源文件变化需要及时应用到客户端浏览器,这种情况,可通过改变文件名实现,即更新 JavaScript 文件并不是更新 JavaScript 文件内容,而是生成一个新的JS文件并更新HTML文件中的引用。

使用浏览器缓存策略的网站在更新静态资源时,应采用逐量更新的方法,比如需要更新10个图标文件,不宜把10个文件一次全部更新,而是应一个文件一个文件逐步更新,并有一定的间隔时间,以免用户浏览器突然大量缓存失效,集中更新缓存,造成服务器负载骤增、网络堵塞的情况。

1.3 启用压缩

在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量。文本文件的压缩效率可达80%以上,因此HTML、CSS、JavaScript文件启用GZip压缩可达到较好的效果。但是压缩对服务器和浏览器产生一定的压力,在通信带宽良好,而服务器资源不足的情况下要权衡考虑。

1.4 CSS放在页面最上面、 JavaScript 放在页面最下面

浏览器会在下载完全部CSS之后才对整个页面进行渲染,因此最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS。 JavaScript 则相反,浏览器在加载 JavaScript 后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此 JavaScript 最好放在页面最下面。但如果页面解析时就需要用到 JavaScript ,这时放在底部就不合适了。

1.5 减少Cookie传输

一方面,Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输,因此哪些数据需要写入Cookie需要慎重考虑,尽量减少Cookie中传输的数据量。另一方面,对于某些静态资源的访问,如CSS、Script等,发送Cookie没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送Cookie,减少Cookie传输的次数。

二、CDN加速

CDN(Content Distribute Network,内容分发网络)的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获取数据,即所谓网络访问第一跳,如图所示。

由于CDN部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,因此用户请求路由的第一跳就到达了CDN服务器,当CDN中存在浏览器请求的资源时,从CDN直接返回给浏览器,最短路径返回响应,加快用户访问速度,减少数据中心负载压力。

CDN能够缓存的一般是静态资源,如图片、文件、CSS、Script脚本、静态网页等,但是这些文件访问频度很高,将其缓存在CDN可极大改善网页的打开速度。

三、反向代理

传统代理服务器位于浏览器一侧,代理浏览器将HTTP请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求。

和传统代理服务器可以保护浏览器安全一样,反向代理服务器也具有保护网站安全的作用,来自互联网的访问请求必须经过代理服务器,相当于在Web服务器和可能的网络攻击之间建立了一个屏障。

除了安全功能,代理服务器也可以通过配置缓存功能加速Web请求。当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻Web服务器负载压力。事实上,有些网站会把动态内容也缓存在代理服务器上,比如维基百科及某些博客论坛网站,把热门词条、帖子、博客缓存在反向代理服务器上加速用户访问速度,当这些动态内容有变化时,通过内部通知机制通知反向代理缓存失效,反向代理会重新加载最新的动态内容再次缓存起来。

此外,反向代理也可以实现负载均衡的功能,而通过负载均衡构建的应用集群可以提高系统总体处理能力,进而改善网站高并发情况下的性能。

参考资料:大型网站技术架构核心原理与案例分析第四章

完结!


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
10天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
【7月更文挑战第15天】Python的协程与异步函数优化Web性能,通过非阻塞I/O提升并发处理能力。使用aiohttp库构建异步服务器,示例代码展示如何处理GET请求。异步处理减少资源消耗,提高响应速度和吞吐量,适用于高并发场景。掌握这项技术对提升Web应用性能至关重要。
36 10
|
4天前
|
缓存 前端开发 JavaScript
现代Web开发中的前端性能优化策略
在当今快节奏的Web开发环境中,前端性能优化至关重要。本文探讨了一些实用的策略和技术,帮助开发人员提升网页加载速度和用户体验。
|
5天前
|
SQL 关系型数据库 数据库
优化Web开发流程:Python ORM的优势与实现细节
【7月更文挑战第20天】Python ORM,如Django ORM,提升Web开发效率,通过面向对象接口抽象数据库操作,简化SQL,增强代码可读性,并确保安全。Django中,定义Model对应数据库表,使用`makemigrations`和`migrate`创建表,实例化Model并调用`save()`保存数据,`objects.all()`和`filter()`查询数据,更新和删除数据涉及字段修改和调用`save()`或直接`delete()`。ORM提供数据库无关性,防止SQL注入,是现代Web开发的强大工具。
11 1
|
5天前
|
前端开发 JavaScript UED
优化前端性能:提升网页加载速度的关键技巧
在当今互联网时代,网页加载速度直接影响用户体验和SEO排名。本文深入探讨了优化前端性能的关键技巧,包括减少HTTP请求、压缩和合并文件、优化图片和CSS,以及使用CDN加速等策略,帮助开发者有效提升网页加载速度,提升用户满意度和网站效能。
|
4天前
|
前端开发 JavaScript 数据管理
现代Web开发中的前端框架选择指南
选择合适的前端框架是现代Web开发中的关键决策之一。本文探讨了几种流行的前端框架,比较它们的特点和适用场景,帮助开发者在众多选项中做出理性的选择。
|
4天前
|
缓存 前端开发 JavaScript
现代Web开发中的前端性能优化策略
在当今快节奏的Web开发环境中,前端性能优化是确保用户体验和网站成功的关键。本文探讨了一些实用的前端性能优化策略,涵盖了从代码优化到资源加载的各个方面,帮助开发者有效提升网页加载速度和响应性能。
|
5天前
|
编解码 前端开发 JavaScript
现代Web开发中的前端技术趋势与挑战
随着互联网的迅猛发展,现代Web开发中前端技术正日益成为关注的焦点。本文探讨了当前前端技术的主要趋势和面临的挑战,从性能优化到跨平台适配,为开发者提供了深入的洞见和解决方案。
|
11天前
|
编解码 缓存 前端开发
现代前端开发中的响应式设计实践与优化
在当今快节奏的互联网环境中,用户对网页的访问设备多样化,响应式设计成为前端开发中不可或缺的一环。本文探讨了响应式设计的重要性以及实现中的最佳实践,涵盖了基本概念、布局策略、以及性能优化的关键技术,为开发人员提供了全面的指导与思路。
|
3天前
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
21 2
|
1天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
【7月更文挑战第24天】在 Python Web 开发领域, RESTful API 设计成为一种艺术, 关注用户体验与开发者友好性。
15 7