ZSTD 解压缩前端处理方案(干货简单)

news2024/11/23 22:14:13

如果可以实现记得点赞分享,谢谢老铁~

1.需求描述

由于后台返回数据量大,请求资源比较耗时,需要一个方案来优化性能,下图是一个后台返回一个二进制的文件,需要解析成我们想要的对象
在这里插入图片描述

2.使用场景

采用ZSTD方案,官网链接:http://facebook.github.io/zstd/ (可能需要翻墙)

3.首先需要先安装包,命令:

npm install fzstd
or
yarn add fzstd

4.结合官网的例子,首先展示案例及说明

// I will assume that you use the following for the rest of this guide
import * as fzstd from 'fzstd';

// This is an ArrayBuffer of data
const compressedBuf = await fetch('/compressedData.zst').then(
  res => res.arrayBuffer()
);
if (fzstd) {
 //将ArrayBuffer转换成Uint8Array, zstd输入参数必须为Uint8Array类型
  const compressed = new Uint8Array(compressedBuf);
  // 解压缩成Uint8Array
  const decompressed = fzstd.decompress(compressed);
  // 将字符串转为JSON
  let result = new TextDecoder().decode(decompressed);
  result = JSON.parse(result);
}

5.由于我采用的是axios, 所以需要特殊处理一下

因为咱们是解析一个二进制的文件,所以需要进行指定返回类型
需要指定 responseType: “arraybuffer” 很重要!!!

export async function getCaseById(params: props): Promise<any> {
  return request("//getById", {
    method: "GET",
    data: params,
    responseType: "arraybuffer",
  });
}

6.然后再响应拦截器中获取,需要指定判断一下 :response?.config.responseType === “arraybuffer”

instance.interceptors.response.use(
  async function (response: any) {
    if (response?.config.responseType === "arraybuffer") {
      if (fzstd) {
        //将ArrayBuffer转换成Uint8Array, zstd输入参数必须为Uint8Array类型
        const compressed = new Uint8Array(response?.data);
        // 解压缩成Uint8Array
        const decompressed = fzstd.decompress(compressed);
        // 将字符串转为JSON
        const result = new TextDecoder().decode(decompressed);
        response.data = JSON.parse(result);
      }
    } else {
      if (!response?.data.data) {
        message.error(response?.data.message || "服务器异常,请稍后再试");
        return;
      }
    }

    return response?.data;
  },

收工!谢谢老铁们的点赞收藏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

otter、canal跨服务器数据同步解决方案详解,包括下载、安装、配置、应用过程解读。

1.背景和原理&#xff1a; 阿里巴巴B2B公司&#xff0c;因为业务的特性&#xff0c;卖家主要集中在国内&#xff0c;买家主要集中在国外&#xff0c;所以衍生出了杭州和美国异地机房的需求&#xff0c;同时为了提升用户体验&#xff0c;整个机房的架构为双A&#xff0c;两边均可…

【数据结构】 队列 queque

一、什么是队列 单端队列&#xff1a;一端入队&#xff0c;一端出队 双端队列&#xff1a;两个口都可以进出 先进先出 二、常用操作 1.原理 访问 access&#xff1a;遍历查找某个元素 时间复杂度&#xff1a;O(N) 搜索 search&#xff1a;遍历查找某个元素 时间复杂度&a…

视频美颜sdk是什么?技术解析与实现原理详解

视频美颜技术的发展则为人们提供了一种美化自己的方式&#xff0c;因此&#xff0c;视频美颜技术成为了一个备受关注的领域。在这个领域中&#xff0c;视频美颜sdk技术则是实现高效美颜的关键因素之一。本文将从技术角度分析视频美颜sdk的实现原理和优势。 一、视频美颜技术的…

【十六】设计模式~~~行为型模式~~~策略模式(Java)

5.1. 模式动机 完成一项任务&#xff0c;往往可以有多种不同的方式&#xff0c;每一种方式称为一个策略&#xff0c;我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况&#xff0c;实现某一个功能有多个途径&#xff0c;此时可以…

学编程能参加哪些比赛?

孩子学习编程可以参加这10个竞赛: 下面将会根据孩子所学的编程语言来列举孩子可以参加的竞赛: 一、Scratch编程可参加的比赛 1、全国中小学生电脑制作大赛 电脑制作大赛不能完全说是编程比赛,更多讲究艺术与科技结合。 评选项目要求学生使用计算机设计电子报、网页设计、F…

计网作业练习一

第一章练习 简答题 1. 简述计算机网络业务的分类及各类业务的特点。 按网络的作用范围划分&#xff1a; &#xff08;1&#xff09;广域网 WAN&#xff0c;作用范围通常为几十到几千公里&#xff0c;也称为远程网&#xff0c;是 Internet 的核心部分。 &#xff08;2&#x…

冒泡排序(超详细图解加代码解析,5分钟看懂)

目录 1.冒泡排序的定义 2.冒泡排序的原理 3.代码及其解析 4.冒泡排序的改进 5.实现冒泡排序函数 生命中永远会有令人懊恼的事&#xff0c;但我知道&#xff0c;我们是为了不留遗憾活着的&#xff0c;对吗&#xff1f; 1.冒泡排序的定义 冒泡排序&#xff08;Bubble Sort&…

C++的一些点

P52 函数-值传递 值传递时&#xff0c;函数的形参发生改变&#xff0c;不会影响实参。 P54 函数-函数声明 先函数声明&#xff0c;就可以把函数定义放在main函数后面 声明可以写多次&#xff0c;但是定义只能写一次。 #include<iostream> using namespace std;int ma…

Tomcat源码:SocketProcessor、ConnectionHandler与Http11Processor

前文&#xff1a; 《Tomcat源码&#xff1a;启动类Bootstrap与Catalina的加载》 《Tomcat源码&#xff1a;容器的生命周期管理与事件监听》 《Tomcat源码&#xff1a;StandardServer与StandardService》 《Tomcat源码&#xff1a;Container接口》 《Tomcat源码&#xff1a…

C++线程 并发编程:std::thread、std::sync与std::packaged_task深度解析

C线程 并发编程&#xff1a;std::thread、std::sync与std::packaged_task深度解析 1. C并发编程概述&#xff08;C Concurrency Overview&#xff09;1.1 并发与并行的区别&#xff08;Difference between Concurrency and Parallelism&#xff09;1.2 C中的线程模型&#xff0…

(二)微服务中间键工作原理——nacos服务端服务注册心跳包(/nacos/v1/ns/instance/beat)源码解读

前言 上节内容我们通过分析nacos客户端源码&#xff0c;了解了nacos客户端是如何向服务端注册服务和发送心跳包的&#xff0c;本节内容话接上一节内容&#xff0c;我们通过分析nacos服务的源码&#xff0c;查看服务端是如何处理客户端注册时候的心跳包的。关于nacos服务端的源…

工程制图篇:公差原则与要求

目录 1、尺寸与几何公差2、公差原则3、公差要求4、关键名词解释5、常用通用量具 1、尺寸与几何公差 1&#xff09;尺寸公差1&#xff1a;上极限尺寸减去下极限尺寸之差&#xff0c;或上极限偏差减去下极限偏差只差。它是允许尺寸的变动量。尺寸公差是一个没有符号的绝对值&…

Cisco.Packet.Tracer思科模拟器练习题

一、网络设备配置 1、将 RA 路由器重命名为 RA&#xff0c;将 RB 路由器重命名为 RB 2、按下方表格中的要求完成设备主机名&#xff08;hostname&#xff09;及接口配置&#xff1b; 3、将 RA 的 DCE 端时间频率设置 64000&#xff0c;并封装 PPP 协议后发送用户名密码 usera…

Spring 源码分析衍生篇十三 :事务扩展机制 TransactionSynchronization

文章目录 一、前言二、TransactionSynchronization 1. TransactionSynchronization 1.1 TransactionSynchronization 的定义1.2 TransactionSynchronizationManager2. TransactionSynchronization 原理简述 2.1 TransactionSynchronization#beforeCommit2.2 TransactionSynchro…

基于状态的系统和有限状态机FSM

基于状态的系统和有限状态机FSM 介绍 基于模型进行测试。模型可能是规格或描述感兴趣的属性。 该模型通常是一个抽象概念&#xff0c;应该相对容易理解。 测试补充了白盒方法。 测试通常是黑盒&#xff1a;不考虑实际系统的结构。 如果模型具有形式语义&#xff0c;则可实现的…

leetcode--二叉搜索树中第K小的元素(java)

二叉搜索树中第K小的元素 leetcode 230 题 二叉搜索树第K 小的元素解题思路代码演示二叉树专题 leetcode 230 题 二叉搜索树第K 小的元素 原题链接&#xff1a; https://leetcode.cn/problems/kth-smallest-element-in-a-bst/ 题目描述 给定一个二叉搜索树的根节点 root &#…

智慧办公室虚拟现实 VR 可视化

“虚拟现实”是来自英文“Virtual Reality”&#xff0c;简称 VR 技术&#xff0c;其是通过利用计算机仿真系统模拟外界环境&#xff0c;主要模拟对象有环境、技能、传感设备和感知等&#xff0c;为用户提供多信息、三维动态、交互式的仿真体验。 图扑软件基于自研可视化引擎 H…

亚马逊云科技位列IDC MarketScape决策支持分析数据平台领导者

随着科学技术的不断发展&#xff0c;人们的生活方式也在不断改变。现在&#xff0c;人们可以通过互联网获得更多的信息&#xff0c;也可以通过智能手机随时随地与他人进行交流。此外&#xff0c;人工智能技术的进步也使得机器能够完成一些复杂的任务&#xff0c;从而提高了人们…

【Azure】微软 Azure 基础解析(六)计算服务中的虚拟机 VM、虚拟机规模集、Azure Functions 与 Azure 容器(ACI)

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx…

写了 7 年代码,第一次见这么狗血的小 Bug!

刚刚修我们鱼聪明 AI 助手平台的一个 Bug&#xff0c;结局很狗血&#xff01;赶紧给大家分享一下&#xff0c;顺便也分享下标准的排查 Bug 思路。 事情是这样的&#xff0c;有小伙伴在鱼聪明平台&#xff08;https://www.yucongming.com&#xff09;创建了一个 AI 助手&#x…