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

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

4ffe467a8283322150da5a5c0f1e497.png

前言

上一节我们针对前端较大数据传输所造成的页面响应缓慢的问题,使用了分片的思路进行优化处理,但是由于分片会对字节码进行截取,导致了在文本解析的过程中在截取位置出现了乱码的问题,本节将针对这一问题,做进一步的优化,不废话马上开始

参考代码

为了保障字符能够正常解析,我们需要找到一个特殊的值来对字节数组进行截取,说实话这个特殊值是我看了相关的代码反推出来的,先看下完整的代码

async function loadText (url) {
    const res = await fetch(url)
    // 传输了多少读多少
    const reader = await res.body.getReader()
    const decoder = new TextDecoder() // 文本解码器
    let flag = false
    let remainChunk = new Uint8Array(0)
    while(!flag) {
        const { value, done } = await reader.read()
        // console.log(done);  // 加载状态
        // console.log(value); // 字节数组
        flag = done
        if (flag) return
        const lastIndex = value.lastIndexOf(10) // 数值10位置进行切分
        const chunk = value.slice(0, lastIndex + 1)
        const readChunk = new Uint8Array(remainChunk.length + chunk.length)
        readChunk.set(remainChunk);
        readChunk.set(chunk, remainChunk.length)
        remainChunk = value.slice(lastIndex + 1)
        const text = decoder.decode(readChunk)
        console.log('======');
        console.log(text)
    }
}
复制代码

这段代码琢磨了许久,通过使用了一些特殊的字节数组解析出来猜测,10这个位置要么应该是一个换行符(若有相关资料,望大佬留言指教)

const decoder = new TextDecoder() // 文本解码器
console.log(decoder.decode(new Uint8Array([155,135,227,128,130,10])))
复制代码

思路

计算解析数组的长度

找到 10 这个分割点后,后面的事情就简单多了,我们只需要每次读取到片段时,只解析上一次的末尾开始到这一次10处即可

const { value, done } = await reader.read()
const lastIndex = value.lastIndexOf(10) // 记录本次最后一个 10 的位置
const chunk = value.slice(0, lastIndex + 1) // 截取本次数组
// 以上一次未解析的内容长度 + 本次需要解析的长 = 需要初始化的字节数组长度
const readChunk = new Uint8Array(remainChunk.length + chunk.length) 
复制代码

加载数组内容

readChunk.set(remainChunk) // 从 0 开始,加载上一次未解析内容
readChunk.set(chunk, remainChunk.length) // 从上一次未解析内容末尾开始,加载本次内容
复制代码

暂存本次未解析内容

remainChunk = value.slice(lastIndex + 1)
复制代码

解析本次内容并展示

const text = decoder.decode(readChunk)
console.log('======');
console.log(text)
复制代码

162c51d1e019797cf52012ce9874ca9.png

好了,本篇针对txt文本文件分片加载的优化到此告一段路,感觉对网络数据的传输又有了新的认识,由于写该主题时明显感觉有些吃力,也意识到了自己的很多不足,后面再接再厉,争取把相关知识点搞懂搞透

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
13天前
|
缓存 监控 前端开发
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
【4月更文挑战第30天】本文探讨了Flutter应用启动优化策略,包括理解启动过程、资源加载优化、减少初始化工作、界面布局简化、异步初始化、预加载关键数据、性能监控分析以及案例和未来优化方向。通过这些方法,可以缩短启动时间,提升用户体验。使用Flutter DevTools等工具可助于识别和解决性能瓶颈,实现持续优化。
【Flutter 前端技术开发专栏】Flutter 应用的启动优化策略
|
1天前
|
缓存 前端开发 JavaScript
如何优化前端性能:关键步骤和技巧
提高前端性能是网站和应用程序开发中至关重要的一步。本文将介绍一些关键的优化步骤和技巧,帮助开发人员有效地提升前端性能,包括资源压缩、减少HTTP请求、使用CDN加速、优化图片等方面的方法。
|
2天前
|
数据采集 供应链 安全
利用大数据优化业务流程:策略与实践
【5月更文挑战第11天】本文探讨了利用大数据优化业务流程的策略与实践,包括明确业务目标、构建大数据平台、数据采集整合、分析挖掘及流程优化。通过实例展示了电商和制造企业如何利用大数据改进库存管理和生产流程,提高效率与客户满意度。随着大数据技术进步,其在业务流程优化中的应用将更加广泛和深入,企业需积极采纳以适应市场和客户需求。
|
2天前
|
缓存 前端开发 UED
实战指南:如何优化前端性能提升用户体验
本文探讨了在当今互联网时代,前端性能优化对于提升用户体验的重要性,以及如何利用各种技术手段实现前端性能的优化。通过介绍前端性能优化的原则、常见的性能优化技巧和工具,以及实际案例分析,帮助开发者深入了解并掌握提升前端性能的方法,从而提升网站的加载速度、响应速度,提高用户的满意度和留存率。
|
2天前
|
Web App开发 缓存 前端开发
如何优化前端网页加载速度:最佳实践和工具推荐
本文探讨了如何通过采用最佳实践和利用先进的工具来优化前端网页加载速度。从压缩资源到使用CDN,从减少HTTP请求到利用缓存策略,我们将介绍一系列提高网页性能的技术手段。同时,我们还将推荐一些广受好评的工具,帮助开发者更轻松地实施这些优化策略。
|
2天前
|
缓存 前端开发 JavaScript
优化前端性能的5个技巧
提高网站的性能是前端开发中的重要任务之一。本文将介绍5个实用的技巧,帮助前端开发者优化网页加载速度、提升用户体验,并降低服务器负载。
|
3天前
|
缓存 前端开发 JavaScript
如何优化前端性能:最佳实践与工具推荐
在当今互联网时代,用户对网页加载速度和性能的要求越来越高。本文将介绍一些优化前端性能的最佳实践,包括代码压缩、资源合并、懒加载等技术,并推荐一些实用的工具,帮助开发者提升网页加载速度和用户体验。
|
6天前
|
前端开发 JavaScript UED
如何优化前端网页加载速度
在当今互联网时代,网页加载速度是用户体验的关键因素之一。本文将探讨如何通过优化前端技术,提升网页加载速度,包括压缩资源、使用CDN加速、减少HTTP请求等方法。
|
7天前
|
缓存 前端开发 JavaScript
优化前端性能的五大技巧
在当今快节奏的网络世界中,优化前端性能是网站开发中至关重要的一环。本文将介绍五种有效的技巧,帮助开发者提升前端性能,提升用户体验和网站效率。
|
13天前
|
存储 缓存 前端开发
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化
【4月更文挑战第30天】本文探讨了 Flutter 中如何优化图片加载与缓存,以提升移动应用性能。通过使用图片占位符、压缩裁剪、缓存策略(如`cached_network_image`插件)以及异步加载和预加载图片,可以显著加快加载速度。此外,利用`FadeInImage`、`FutureBuilder`和图片库等工具,能进一步改善用户体验。优化图片处理是提升Flutter应用效率的关键,本文为开发者提供了实用指导。
【Flutter前端技术开发专栏】Flutter中的图片加载与缓存优化