最近被官网坑了,flatbuffers抛弃了对js的支持

flatbuffers的官网是真的坑,作为一个新技术,网上又没有太多中文的技术文档去解释它,学起来是真痛苦

在这里插入图片描述
这是官网给的语言支持功能对照表

官网告诉你用flatc编译器可以编译Javascript,但是最新版的flatbuffers已经抛弃了js的用法,按照官网的做法根本不得行。

在Vue项目中的具体使用方法

需要走schema->typrscript->javascript的路线,而flatbuffers官网的关于javascript的教程却没有对应的更新,而且schema->typescript生成的typescript代码是千差万别的,因此不建议跟随flatbuffers官网的关于javascript的教程进行操作(因为无法完全复现官网的教程)

1、使用flatc编译fbs文件为typescript文件

# 这个有个坑是生成的TS文件有类型错误,我项目中根本通不过Eslint检查
$ cd schema-path
 
# 使用flatc编译器将当前目录下的所有fbs文件编译为typescript
$ flatc --ts ./*.fbs
 
# 将会在当前目录下生成data的文件夹和.ts文件
$ ls
 

2、在项目中引入flatbuffers工具和TS文件

# 全局安装flatbuffer关于javascript的依赖库
$ npm install -g flatbuffers
 
# 全局安装tsc工具
$ npm install -g typescript
 
# 以上的库可以不安装在全局环境中,当你希望只在当前工程中使用,那么只需要在去掉-g参数即可;强烈建议你安装在全局环境中,因此这样比较容易使用tsc命令

3、将TS文件转换为JS文件

大家用flatc的时候肯定也看了转换出来的TS文件的,外部的TS文件是我们主程序文件(但其实里面没有实现方法,只是一个export的接口,如果对这个接口去转换,你会发现数据结构没有被转换为JavaScript文件);
所以我们直接进入到data文件夹中进行转换

# 进入到数据模型的文件夹
$ cd ./data

# tsc命令
$ npx tsc ./*.ts

# 清除不必要的TS文件
$ find . -name"*.ts" | xargs rm -rfv 

在项目中实际使用flatbuffers

上一步生成JS文件之后ESlint检查就没有问题了(直接就没有类型了)
在项目的js中直接使用flatbuffers提供的API

//引入flatbuffers
import flatbuffers from "flatbuffers";
//引入模型文件
import {DF_Data} from  "@/assets/js/mecdata_js/d-f_-data"

/**
*@author:AlbertOS
*@param message:所需要解释的二进制序列化数据
*/
export function JSgetData(message){
    if(message!=null){
        let data =new Uint8Array(message);//把序列化数据转换为2进制数组
        let buf =new flatbuffers.ByteBuffer(data);//通过ByteBuffer这个API反序列化数组
        let tempData = DF_Data.getRootAsDF_Data(buf);//通过模型文件的结构来解释数据
        return tempData
    }
    else{
        let datanull = "数据为空"
        return datanull
    }
}


总结

官网真不一定是对的,我们要抱着辩证的态度去看待~

这里的代码路径大家根据自己的来,这个flatbuffers折磨了我1周时间,从看英文文档的无所适从,到理解代码的解析逻辑这其中的收获满满(程序员的成功就是在一次次试错中成长起来的)
flatbuffers作为Goggles在17年新出的序列化格式在性能上比JSON格式高了几个量级,学习永不停歇!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertOS

还会有大爷会打钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值