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

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
云解析 DNS,旗舰版 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文本文件分片加载的优化到此告一段路,感觉对网络数据的传输又有了新的认识,由于写该主题时明显感觉有些吃力,也意识到了自己的很多不足,后面再接再厉,争取把相关知识点搞懂搞透

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