网络优化方案

简介: 本文介绍多种网络优化方案:合并与压缩资源、利用缓存与CDN加速、DNS预解析、预加载与预渲染技术,以及图片优化策略,全面提升页面加载速度与用户体验。

网络优化方案

1.合并资源文件,减少HTTP请求浏览器并发的HTTP请求是由数量限制的(比如桌面浏览器并发请求可能是8个,手机浏览器是6个),如果一下子并发的几十个请求那么会有很多请求会停下来等,等前面的请求好了下一个再进去,这样就延长了整个页面的加载时间2.压缩资源文件减小请求大小文件大小越小当然加载速度就越快。 可对代码进行压缩,去掉空格、注释、变量替换,在传输时,使用gzip等压缩方式也可以降低资源文件的大小。3.利用缓存机制,尽可能使用缓存减少请求浏览器是有缓存机制的,在返回资源的时候设置一个cache-control设置过期时间,在过期时间内浏览器会默认使用本地缓存。但缓存机制也存在一定的问题,因为网站开发是阶段性的,隔一段时间会发布一个新的版本。因为HTTP请求是根据url来定位的,如果资源文件名的url没有发生更改那么浏览器还是会使用缓存,这个时候怎么办那? 这时就需要一个缓存更新机制来让修改过的文件具有一个新的名字。 最简单的方法就是在url后加一个时间戳,但是这会导致只要有新的版本发布就会重新获取所有的新资源。 一个现代流行的方法就是根据文件计算一个hash值,这个hash值是根据文件的更新变化而变化的。 当浏览器获取文件时如果这个文件名有更新那么就会请求新的文件。4.DNS预解析现代浏览器在 DNS Prefetch 上做了两项工作:html 源码下载完成后,会解析页面的包含链接的标签,提前查询对应的域名对于访问过的页面,浏览器会记录一份域名列表,当再次打开时,会在 html 下载的同时去解析 DNS自动解析 浏览器使用超链接的href属性来查找要预解析的主机名。当遇到a标签,浏览器会自动将href中的域名解析为IP地址,这个解析过程是与用户浏览网页并行处理的。但是为了确保安全性,在HTTPS页面中不会自动解析手动解析

5.CDN加速CDN 的原理是尽可能的在各个地方分布机房缓存数据。因此,我们可以将静态资源尽量使用 CDN 加载,由于浏览器对于单个域名有并发请求上限,可以考虑使用多个 CDN 域名。并且对于 CDN 加载静态资源需要注意 CDN 域名要与主站不同,否则每次请求都会带上主站的 Cookie,平白消耗流量。6.预加载在开发中,可能会遇到这样的情况。有些资源不需要马上用到,但是希望尽早获取,这时候就可以使用预加载。预加载其实是声明式的 fetch ,强制浏览器请求资源,并且不会阻塞 onload 事件,可以使用以下代码开启预加载。预加载可以一定程度上降低首屏的加载时间,因为可以将一些不影响首屏但重要的文件延后加载,唯一缺点就是兼容性不好。

Plain Text

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// 1.使用HTML标签

<img src="http://pic26.nipic.com/20121213/6168183 0044449030002.jpg" style="display:none"/>


// 2.使用Image对象

<script src="./myPreload.js"></script>


//myPreload.js文件

var image= new Image()

image.src="http://pic26.nipic.com/20121213/6168183 004444903000 2.jpg"


// 3.使用XMLHttpRequest对象,虽然存在跨域问题,但会精细控制预加载过程

   var xmlhttprequest=new XMLHttpRequest();

   xmlhttprequest.onreadystatechange=callback;

   xmlhttprequest.onprogress=progressCallback;

   xmlhttprequest.open("GET","http://image.baidu.com/mouse,jpg",true);

   xmlhttprequest.send();

   function callback(){

     if(xmlhttprequest.readyState==4&& xmlhttprequest.status==200){

       var responseText=xmlhttprequest.responseText;

     }else{

        console.log("Request was unsuccessful:"+xmlhttprequest.status);

     }

   }

   function progressCallback(e){

       e=e || event;

       if(e.lengthComputable){

           console.log("Received"+e.loaded+"of"+e.total+"bytes")

       }

   }

使用预渲染后,只需加载index.html和app.css即可看到页面的部分形式。 预渲染的最佳时间莫过于预渲染骨架屏了。静态的骨架屏预渲染后保存在本地,基本永久使用,只要骨架屏返回并渲染了,用户是看不到白屏的(诸如以上只有topNav的那种),而骨架屏作为布局简单,样式普通的一个小组件,构建后返回的html在浏览器渲染当然速度也是极快的,用户体验++7.图片优化不用图片。很多时候会使用到很多修饰类图片,其实这类修饰图片完全可以用 CSS 去代替。对于移动端按理说,图片不需要加载原图,可请求裁剪好的图片小图使用base64格式将多个图标文件整合到一张图中(雪碧图)采用正确的图片格式对于能够显示 WebP 格式的浏览器尽量使用 WebP 格式。因为 WebP 格式具有更好的图像数据压缩算法,能带来更小的图片体积,而且拥有肉眼识别无差异的图像质量,缺点就是兼容性并不好色彩很多的使用 JPEG色彩种类少的使用 PNG,有的可用SVG代替8.预渲染Note预渲染:构建阶段生成匹配预渲染路径的 html 文件(注意:每个需要预渲染的路由都有一个对应的 html)。构建出来的 html 文件已有部分内容。非预渲染需要加载到1(index.html),2(app.css),3(manifest.js),4(vender.js),用户才能看到页面js 1 index.html 2 app.css 样式 3 manifest.js webpack manifest 4 vender.js 第三方库 5 app.js 业务逻辑 6 0.js 路由分包文件

相关文章
|
存储 资源调度 JavaScript
轻松搞定 reduxjs/toolkit
轻松搞定 reduxjs/toolkit
501 0
|
数据安全/隐私保护 安全 定位技术
什么是GSM?GSM是什么
本文讲的是什么是GSM?GSM是什么,GSM全名为:Global System for Mobile Communications,中文为全球移动通讯系统,俗称"全球通",是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。
4673 0
|
4月前
|
存储 缓存 负载均衡
CP(强制一致性),AP(最终一致)
本文探讨RPC框架中的服务发现机制,对比DNS、ZooKeeper等方案,指出其在超大规模集群下的局限性。重点提出基于消息总线的最终一致性注册中心,通过AP模型替代CP,提升系统性能与稳定性,适用于高并发、大规模服务节点场景。
CP(强制一致性),AP(最终一致)
|
4月前
|
Java Shell Maven
06-nexus私仓环境搭建
本文介绍Nexus私有仓库环境搭建全过程,包括JDK安装、Nexus OSS版下载与解压、配置文件修改、创建nexus用户并启动服务。详细说明了如何通过Web界面登录、修改默认密码、配置匿名访问,并创建Maven私仓。同时提供上传本地jar包的两种方式,重点演示使用脚本批量导入本地仓库依赖的方法,包含清理无效文件、重命名元数据及执行上传命令等步骤,适用于企业内网构建Maven私服场景。
|
4月前
|
Java Maven 数据安全/隐私保护
Nexus仓库
Nexus仓库是Sonatype推出的开源制品管理工具,支持Maven、Npm、Docker等格式。本文介绍其在Linux和Docker环境下的安装配置,包括JDK部署、OSS版下载、用户权限、匿名访问设置,以及仓库创建与上传下载操作,涵盖密码重置、数据持久化及脚本批量导入等内容,助力搭建高效私有仓库。
|
4月前
|
人工智能 数据可视化 安全
通过阿里云 Chat App 合规接入 WhatsApp Business API:WABA 注册指南
本文将详解如何通过阿里云 Chat App 消息服务完成WABA 账号注册。
858 0
|
缓存 前端开发 JavaScript
前端领域驱动设计的一些思考
前端领域驱动设计的一些思考
1355 0
|
8月前
|
缓存 监控 Linux
CentOS系统如何查看当前内存容量。
以上方法都不需要特殊软件或者复杂配置即可执行,在CentOS或其他Linux发行版中都适合运行,并且它们各自透露出不同角度对待问题解答方式:从简单快速到深入详尽;从用户态到核心态;从操作层数到硬件层数;满足不同用户需求与偏好。
616 8
汉化FC(红白机)游戏需要用到哪些技术?
这篇文章介绍了FC(红白机)游戏文本汉化的基本流程和技术知识。主要步骤包括分析游戏ROM、寻找文本字符串、学习游戏代码、修改文本、修改ROM头信息、重新映射、测试和修正。文章还提供了汉化实例,详细讲解了如何使用各种工具,如VirtuaNES Debugger、NO$NES、6502 Simulator等进行ROM分析和修改。此外,文章还介绍了如何使用汇编语言编写自定义程序以实现大字体汉化和在游戏画面切换时恢复原来的VROM。整个过程需要对6502汇编语言、NES硬件架构和ROM结构有一定的理解和编程经验。
|
安全 Oracle Java
Java 中的运算符重载
Java 中的运算符重载
305 19

热门文章

最新文章

下一篇
开通oss服务