前言

在前端开发过程中,经常会用到一些静态的csv数据,最普通的处理方式就是把数据包含在自己的项目中,跟随项目统一部署到服务器,使用时直接去请求服务器的csv数据。但是这样处理有几个劣势:

  1. 前端拿到的都是明文数据,可以在控制台中直接看到,数据保密性差。
  2. 冗余数据比较多,数据体积相对比较大。

关于数据冗余,举个例子:
如这里有一个学校1000个学生的基本信息。每个学生的基本信息中,有性别、有年龄、有班级、有所在地等等。

姓名,性别,年龄,班级,所在地
王二小, 男, 13, 一年级3班, 福田区
张三丰, 男, 14, 二年级1班, 福田区
...

仔细分析下每个属性和对应的值。

  • 性别: 男、女;
  • 年龄: 12 - 16岁;
  • 班级:每个学生都有所在班级,一个班级又有很多学生。
  • 所在地:同一城市下的不同区县。

如果用csv来表达这些数据,
1000个学生,

  • 男或女就要出现1000次。
  • 12、13、14、15、16总计也要出现1000次。
  • 每个班级名出现n次。
  • 每个区县出现n次。
    我们都知道中文字符相对比较占空间,这份csv中有大量重复的中文值,数据看起来比较冗余。

csv2png

csv2png是一个小型的前端依赖包,可用于将csv数据转换成png格式,也可以将png数据还原成csv。支持在node环境和浏览器环境下运行。可以比较好的解决上面说的csv的问题。
当我们项目中有这样的静态数据时,可以考虑使用这个包将csv转换成png存储在服务端,而在客户端需要时,将png再还原成csv。

使用方法

安装

npm i csv2png

csv转png

在node环境中

const {Csv2png} = require('csv2png')const csv = './test/data/sub.csv'const pc = new Csv2png({int: [7, 8, 9, 10], // 指定int类型的列的序号,从0开始filePath: csv,width: 400  // 可以指定png图的宽度
})pc.write('sub')

运行完后,会同时输出一份sub.png和sub.json的文件。
生成的图片

png转csv

当在客户端需要用到这份数据时,先将png转会csv。

import { Png2csv } from 'csv2png'
const pngURL = './data/sub.png'const data = {// 对应csv转png时生成的json文件的内容...
}const pc = new png2csv({png: pngURL,config: data
})
pc.parse().then((data) => {console.log('header',data[0]) // 打印csv文件头
})

使用注意事项

  1. csv转png时,指定int类型的列,可以提高转换效率(如果文件比较小,如不足万条,这点可以忽略)。
  2. 指定的int列的最大值,不能大于 16,581,375(即 255 * 255 * 255, 16.5百万+)。
  3. 非int类型的列,唯一值总数也不能大于 16,581,375。

详细的使用说明见:csv2png

前端开发中处理csv数据,也许你可以试试这个方法相关推荐

  1. 【repost】一探前端开发中的JS调试技巧

    有请提示:文中涉及较多Gif演示动画,移动端请尽量在Wifi环境中阅读 前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问 ...

  2. 前端开发中JS调试技巧,你知道几种?用过几种?

    调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今天,如 ...

  3. 一探前端开发中的JS调试技巧

    转自:http://seejs.me/2016/03/27/%E3%80%90%E5%8E%9F%E5%88%9B%E3%80%91%E4%B8%80%E6%8E%A2%E5%89%8D%E7%AB% ...

  4. 前端开发中的性能那点事

     前端开发中的性能那点事(一)巧用xdebug 前言: 在我们平时的php开发中,一个大的项目经过长时间的积累以后你会发现性能越来越慢,而性能到底消耗在了什么地方,常常是一个令人头疼的问题,funct ...

  5. 前端开发中的Error以及异常捕获

    本文首发于公众号:符合预期的CoyPan 写在前面 在前端项目中,由于JavaScript本身是一个弱类型语言,加上浏览器环境的复杂性,网络问题等等,很容易发生错误.做好网页错误监控,不断优化代码,提 ...

  6. java backbone_[Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合

    [Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合 0 2015-09-24 17:00:04 当我们开发含有大量Javascript的web应用程序时,首先你需要做 ...

  7. 初学者Web介绍一些前端开发中的基本概念用到的技术

    Web开发是比较费神的,需要掌握很多很多的东西,特别是从事前端开发的朋友,需要通十行才行.今天,本文向初学者介绍一些Web开发中的基本概念和用到的技术,从A到Z总共26项,每项对应一个概念或者技术. ...

  8. 前端中什么是中台开发环境_Web前端开发中需要学习什么?会使用到哪些开发工具?...

    今天我们来谈谈Web和前端开发过程中需要学习什么?前端开发需要使用什么开发工具?也简单介绍前端开发前景和薪水.下面和千锋广州小编一起来看看吧! ​前端工程师的主要职责: 前端工程师在不同的公司有不同的 ...

  9. 前端开发中的地理定位问题小总结

    项目中遇到地理定位的问题,没遇过不知道,遇过就发现这是个比较坑的问题.这个问题其实困扰了我挺久的,还不如一次性了解清楚.所以本文进行了一些小总结,先简单总结我看过的关于定位技术的资料,然后介绍前端开发 ...

最新文章

  1. iOS中的图像处理(一)——基础滤镜
  2. linux中xjvf指令,linux解压缩命令小结
  3. 播放框架模块:分而治之
  4. 防火墙配置十大任务之十,构建虚拟防火墙
  5. python核心装饰_《python核心编程》中高级闭包和装饰器理解?
  6. Bind Service 不会在后台无限期的一直运行
  7. 【李宏毅2020 ML/DL】P45-50 Network Compression
  8. ​​​​​​​​CloudMounter:挂载云存储作为在 Mac 的本地磁盘
  9. 计算机应用技术实习周记十篇,计算机应用实习周记模板.doc
  10. Semantic UI 之 条目 item
  11. 机器学习集成学习与模型融合
  12. SharpSCADA - 工控网关, 轻量级组态软件(笔记)
  13. PCB布局、布线小技巧
  14. 基于visual c++之windows核心编程代码分析(47)实现交换网络的QQ号嗅探
  15. 2018年AppleDeveloper苹果开发者账号组织名称修改
  16. 登月源码开源登顶GitHub No.1!接而又被中国程序员“玩坏”了
  17. docker单主机网络
  18. Latex 符号上加符号的方式
  19. python - 跨平台全局快捷键解决方案
  20. QQ怎么服务器远程,腾讯QQ远程协助功能详解

热门文章

  1. QMdiArea关闭窗口(QMdiSubWindow),如何不删除这个窗口
  2. 1207. 独一无二的出现次数
  3. HT7727 DC-DC升压芯片
  4. Pulsar IO 简介
  5. Deepin系统安装微信、QQ等exe文件攻略
  6. 微信公众号推送天气预报
  7. 【转】sprintf函数用法
  8. 天天狼人杀改密码_是时候杀了密码了吗?
  9. Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
  10. CSS background-size :contain与cover区别