前端较大数据传输优化方案(上)

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 前端较大数据传输优化方案

92a1e15c83028b4b6ab0f931cb3fb1b.png

前言

今天刷抖音看到一个与前端海量数据下载优化相关的问题(在大数据资源请求的时候,前端如果等待所有数据加载完,那么页面从请求到最终呈现内容,会有很长一段的空白期,如何优化响应速度呢,这就需要我们对响应数据做切片处理了),刚好学习了顺便对客户端请求数据的相关知识简单做了下总结复习

关于 Fetch

mdn文档:使用 Fetch - Web API 接口参考 | MDN (mozilla.org)

Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。它还提供了一个全局 fetch()方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源

视频的内容是基于 fetch 展开做讲解的,这里我们也一样,先用 fetch 为案例降解,后续用 axios 以同样的思路再做一遍

首先我们看一下官网提供的一段代码

fetch('http://example.com/movies.json')
  .then(response => response.json())
  .then(data => console.log(data))
复制代码

这里我们发现 fetch 发送请求时里边有 2 个 then,有的同学可能会有疑问,毕竟现在大部分项目使用的请求库都是 axios ,实际上 axios 也有这两个过程,只不过 axios 在内部把第一步 .json()或者.text() 数据转化的过程处理掉了,直接返回了我们处理后的结果

关于请求过程

68e50797c3a52fcae350a2e144b2630.png

前面提到,在请求中第一个异步回调有两个数据处理的方法 json()和text() ,而这些方法的调用都有一个前提,就是必须等待请求头 header 传输完成后才可以调用

而后一个回调则是需要等待整个body传输完成后触发,这就意味着,如果body数据很大的话,那么等待响应就需要很长的时间

优化思路

既然等待整个body传输完再响应需要花很长时间,那么我们能不能在body传输的过程中就取到数据呢?就是传输一点用一点(即分片),答案是可以的,那么具体怎么做呢,请看下面

优化方法

fetch 方法在它的第一个响应体中提供了一个方法 getReader ,可以获取一个观察加载进度的对象,这个对象上又提供了一个read方法,可以异步的获取当前读取的数据内容(value 字节数组)和加载状态(done,未加载完成时为false,全部加载完成时为true),我们可以根据这个 done 的状态做一个递归,直到加载完成时一直去读取当前已加载好的数据进行处理

TextDecoder 文本解码器,用来处理文本数据

async function loadBody (url) {
    const res = await fetch(url)
    const reader = await res.body.getReader()
    let flag = false
    while(!flag) {
        const { value, done } = await reader.read()
        flag = done
        const decoder = new TextDecoder() // 文本解码器
        decoder.decode(value)
        const text = decoder.decode(value)
        console.log(text);
    }
}
复制代码

现在我们拿一个本地 txt 文件,在浏览器慢速3G模式下调用一下上面的方法看看效果

ee434c8d24825496f3543e6b149c6a8.png

我们发现数据已经可以按照我们的期望做到分段加载了

但是细心的同学会发现现在还有一点小瑕疵,就是在切分点,由于字节的截取,很有可能在还原时造成乱码,这时就需要我们对这些切割点做特殊处理了,关于切割点如何优化处理,还有使用 axios 时如何分片,我们会在下一节在做详细讲解,敬请关注

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
9天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
24 5
|
11天前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
41 7
|
8天前
|
存储 NoSQL 大数据
大数据 数据存储优化
【10月更文挑战第25天】
29 2
|
10天前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
24 2
|
17天前
|
缓存 前端开发 JavaScript
前端性能优化:打造流畅用户体验的秘籍
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘籍
29 3
|
16天前
|
存储 缓存 算法
前端算法:优化与实战技巧的深度探索
【10月更文挑战第21天】前端算法:优化与实战技巧的深度探索
13 1
|
16天前
|
缓存 前端开发 JavaScript
如何优化前端资源
如何优化前端资源
|
17天前
|
监控 前端开发 JavaScript
前端性能优化:打造流畅用户体验的秘籍
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘籍
26 2
|
17天前
|
前端开发 JavaScript UED
前端性能优化:打造流畅用户体验的秘诀
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘诀
24 0
|
24天前
|
缓存 前端开发 UED
前端 8 种图片加载优化方案梳理
本文首发于微信公众号“前端徐徐”,详细探讨了现代网页设计中图片加载速度优化的重要性及方法。内容涵盖图片格式选择(如JPEG、PNG、WebP等)、图片压缩技术、响应式图片、延迟加载、CDN使用、缓存控制、图像裁剪与缩放、Base64编码等前端图片优化策略,旨在帮助开发者提升网页性能和用户体验。
141 0
下一篇
无影云桌面