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

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 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 时如何分片,我们会在下一节在做详细讲解,敬请关注

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
1月前
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
2月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
178 3
|
2月前
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
3月前
|
搜索推荐 前端开发 定位技术
前端开发人员SEO优化技术方案
不同的搜索引擎提供了服务后台常见功能来优化网站搜索
60 2
|
3月前
|
前端开发 安全 UED
2024年前端性能优化新策略
2024年前端性能优化策略涵盖代码分割与环境变量管理。代码分割通过动态导入和按需加载CSS减少初始加载时间;环境变量管理则确保敏感信息安全,简化多环境配置。结合最新工具和技术,可大幅提升Web应用性能与用户体验。
|
3月前
|
数据采集 缓存 监控
如何优化前端框架的数据驱动方式以提高性能?
综上所述,通过多种手段的综合运用,可以有效地优化前端框架的数据驱动方式,提高应用的性能,为用户带来更好的体验。同时,随着技术的不断发展和进步,我们需要不断探索和创新,以找到更适合的优化方法和策略。
|
3月前
|
缓存 前端开发 JavaScript
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
|
3月前
|
缓存 监控 前端开发
前端性能优化:从代码到部署的全面策略
前端性能优化:从代码到部署的全面策略
|
3月前
|
Web App开发 缓存 监控
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
55 1
|
3月前
|
Web App开发 前端开发 JavaScript
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
62 1

热门文章

最新文章

  • 1
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    29
  • 2
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    50
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 4
    巧用通义灵码,提升前端研发效率
    92
  • 5
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    139
  • 6
    详解智能编码在前端研发的创新应用
    96
  • 7
    智能编码在前端研发的创新应用
    82
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    118
  • 10
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    75