js json过滤_如何在浏览器不崩溃的情况下过滤 200 万行数据?

2ac13c86685acea6a80c98505a3695fb.png

最近我分配到了一个非常有趣的任务:在前端显示 1GB 文件和 200 万行数据,并实现过滤,在这篇文章中,我将分享我是如何完成这个任务的。

背景

我曾经创建了一个简单的 React 应用程序。这个应用程序从服务器加载一些数据,并呈现在几个表格中。在成功演示了 React 应用程序后,客户授权我访问生产数据。然后,有趣的事情发生了。当我将应用程序从开发 API 连接到生产环境并重新加载页面时,看到了类似“显示此网页时出现问题”的错误。经过调试,我发现生产服务器的 JSON 文件大小约为 500MB(而不是从开发服务器的 2 到 5 MB)。

最新的需求是:

1.JSON 文件最大可达到 1 GB。

2. 后端不会进行分页——只能接受这个事实。

首先,我尝试了 react virtualized,一个 React 组件,可以通过虚拟渲染有效地渲染大型列表。

但几天后又出现了新的需求:

3.“标准的浏览器搜索(Ctrl/Cmd + F)功能无法正常工作,必须修复这个问题!”

虚拟列表背后的主要思想是只渲染可见的内容。因此,如果用户在搜索框中输入一些东西,那么浏览器只会搜索虚拟列表的可见部分。

下图演示了浏览器是如何搜索虚拟列表的。请注意,滚动后出现的记录(虚拟列表进行了重新渲染)没有高亮显示,尽管包含了要搜索的值“@”。

10a136abe63252a2ee7688b5faf27328.gif

搜索框

我决定创建一个具有类似默认浏览器搜索功能的自定义搜索框,但可以搜索所有的 200 万条记录。

对大量数据进行过滤操作会导致“堆内存不足”。截至 2018 年 4 月,我没有找到任何提供内置搜索 / 过滤功能的 React 虚拟列表实现。

经过几个小时的谷歌搜索和在 Stack Overflow 网站上提问之后,我想到了 Web Worker,并使用了Simple Web Worker 库。这个方法的主要思想是将一个大数组拆分成更小的部分,并使用 Web Worker 异步处理每个部分。

找到最佳的块长度是很有必要的。块的长度越短搜索速度就越慢,但长度越长,在低配置设备上出现“堆内存不足”的可能性就越大。在我的例子中,根据实验结果,3000 是最佳长度。

华丽制胜

下图演示了自定义搜索框。在发生滚动后,高亮显示不会消失,用户可以通过箭头按键在行和表之间导航。是的,过滤数据确实需要一些时间,但它可以处理比之前更多的信息。为简单起见,数组只包含了 9000 个项,但可以随意添加,不过过滤时间也会随之增加(过滤 200 万行可能需要 5-7 分钟)。

7aa4dcf98969d95cca561a95dc083a67.png

这种方法帮助我解决了几个问题:

  • 过滤大量数据而不会导致浏览器崩溃。在我的例子中,文件的最大大小约为 1GB,最多有约 200 万行数据。
  • 创建一个搜索框,提供与原生浏览器搜索类似的 UX,可以搜索所有 200 万行数据。

你可以在这里找到应用程序的源代码:

https://github.com/uptechteam/react-filter-demo

演示:https://uptechteam.github.io/react-filter-demo/

解决方案简短描述

这个 React 应用程序包含 3 个组件:

  • App.js——应用程序的主要组件;
  • SearchBox.js——实现搜索框功能的组件,使用箭头按键导航搜索结果;
  • TablesViews.js——渲染结果表格的组件,它演示了如何在表格之间实现 SearchBox 导航。

英文原文:

https://blog.uptech.team/https-medium-com-oleksii-kryvonosov-how-to-filter-1gb-json-on-the-frontend-and-not-crash-the-browser-ff59ebeb1baa

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

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

相关文章

联合国旗舰报告《全球生物多样性展望》发布:面对最糟糕的生物多样性保护成绩单,人类该何去何从?...

来源:阿拉善SEE公益机构2020年9月15日 ,联合国《生物多样性公约》(CBD)发布了一份重量级的旗舰报告——第五版《全球生物多样性展望》(Global Biodiversity Outlook 5)。该报告显示,CBD于2010年…

阿里云发布首台云电脑“无影”,传统 PC 已“末路”?

来源 | 硬核编辑部作者 | 硬核云顶宫在9月17日的云栖大会上,阿里云智能总裁、达摩院院长发布阿里云第一台云电脑——“无影”。这是一台长在云上的“超级电脑”,只需将一张名片夹大小的 C-Key 上连接一块屏幕,就可以进入专属云电脑桌面&#…

金星可能存在生命?科学家发现大气中有磷化氢,剧毒气体或是生物代谢产物...

文章来源:量子位最新消息,英国皇家天文学会发布了一条激动人心的新进展:金星上可能存在着生命迹象。因为科学家发现,金星大气中存在着浓度异常的磷化氢(PH3)气体,达到20ppb(亿分之二)。这种剧毒…

3D芯片大脑:在芯片上培养脑细胞,还能用来测试新药

来源:MEMS在科学实验中,研究人员往往首先以小白鼠为实验对象。虽然是科研需要,但有人谴责这是对生命的亵渎。此外,动物测试成本高且耗时,同时无法精确体现人类的反应。那么有没有其他替代品呢?来自劳伦斯利…

68个单位134项 | 2020年国家自然科学基金专项项目立项名单发布

来源:自然科学基金委、青塔9月17日,国家自然科学基金委基金查询系统公布了2020年专项项目立项名单。本年度专项项目共立项134项,来自68个单位。其中,北京大学立项项目数量、金额均最多,共9项,合计资助金额1…

mysql atlas php_Mysql中间件代理 Atlas

本文接上文介绍atlas的安装配置,以及借助keepalive软件实现altas的ha,避免由于atlas故障,导致数据库服务中断的情况出现:一:环境介绍Atlas主:192.168.1.12/# yum -y install openssl openssl-devel# wget h…

灵魂出窍的神经生物学基础!

来源:孙学军科学网博客过量使用氯胺酮,会导致使用者出现幻听幻象,甚至灵魂出窍的感觉。这种灵魂出窍的感觉在学术上被成为分离麻醉,常被描述为感觉脱离现实或有一种“脱离身体”的体验。这种现象不仅见于服用氯胺酮,也…

基于mycat的mysql_基于mycat实现mysql的读写分离

需要具备以下环境1 mysql主从复制2 jdk安装以及环境变量配置以下为我的演示参考:192.168.142.26 master- mysql 具备主从主从复制条件192.168.142.25 slave- mysql 具备主从主从复制条件192.168.142.27 slave- mysql 具备主从主从复制条件192.168.142.28 myca…

《WeCity未来城市2.0白皮书》全文发布

全文共计899字60图,预计阅读时间12分钟来源 | 腾讯研究院(转载请注明来源)编辑 | 石煜倩新基建浪潮之下,新型城镇化的建设正在加速,这为数字技术与经济社会融合带来了更多的想象空间;同时后疫情时代&#x…

杨振宁:理论物理的工作是“猜”,而数学讲究的是“证”

文章 | 数学传播来源 | 算法与数学之美杨振宁是当代的大物理学家,又是现代数学发展的重要推动者,他的两项巨大成就: 杨–密尔斯规范场和杨–巴克斯特方程,成为80年代以来一系列数学研究的出发点,其影响遍及微分几何、偏微分方程、…

我是ASML,除了技术,还有故事

来源: 半导体行业观察芯片是什么?一颗小小的硅片上布满了排列整齐的集成电路,阳光下,像一种五彩斑斓的昆虫。但正是这种“昆虫”实实在在地控制着科技时代的纷纭万物:手机、电脑、家居电器、汽车机械、能救命的高科技医疗器械、飞…

日本精密减速器,到底牛在哪?

来源:空前说精密减速机,是几乎所有机械设备中的关键装置。全球工业机器人用的精密减速器基本为日本所垄断,最近几年,虽然国内也有量产的RV减速器,但却鲜有国产机器人企业选用,目前中国市场的减速器普遍依赖…

大脑进化追不上社会文化:化石和脱氧核糖核酸证明人类大脑进化比社会慢

来源:thenextweb人类是何时在地球上出现?这个问题似乎没有一致的答案。化石和脱氧核糖核酸表明,智人大约早在30万年前就进化了。然而考古发现,人类复杂的技术和文化,以及「行为现代性」是在5万-6.5万年前发展而来的。科…

周鸿祎:过去只能在虚拟世界里发起的网络攻击,现在都可以通过物联网直达生产一线...

来源:亚布力中国企业家论坛责编:严莉2020年9月20日,2020世界工业互联网产业大会在青岛开幕。360集团董事长兼CEO周鸿祎在会上发表题为“安全是工业互联网发展的先决条件”主题演讲。他表示,工业数字化会带来一个很大的安全问题——…

SSL-ZYC 溜冰

题目大意: 一个国际溜冰比赛的赛道长L米。在起点选手的速度是1米/秒,但速度是可以改变的,在每一米的速度可以是前一米的速度加1、减1,或者等于前一米的速度。在滑行的过程中,选手会遇到N个转弯处,第i个转弯…

使用Spring-hadoop小结

SpringHadoop是通过Spring框架来调用hdfs,跟直接调用hdfs的最大的不同区别是Spring通过依赖注入的方式生成操作hdfs所需要的configuration和filesystem对象,其他所有调用hdfs的api不变 1.在项目的main目录下创建resources文件夹,并将其添加到项目的资源文件中,如图 &#xfffc…

火热物联网下,中国传感器的冷思考

文章来源于传感器专家网,转载自物联传媒,图片来源于网络近20年,移动互联网的发展催生物联网产业的发展。如今智能硬件层出不穷,从智能手环到智能手表,从智能盒子到智能家居,无不是在强化硬件的远程操控力。…

java c 基本类型_java 基本数据类型

java的8种基本数据类型:类型:bye short int long float double char boolean字节数:1 2 4 8 4 8 1 ???????对应的封装类是:Byte、Short、Integer、Long、Float、Double、Character、Boolean除…

因果推断的起源

转自:通识联播如涉版权请加编辑微信联系因果推断的起源朱迪亚珀尔但它(地球)仍在动。——出自伽利略(1564—1642)弗朗西斯高尔顿爵士在皇家学院展示他的“高尔顿板”(Galton board)或称“梅花机…

​台媒:台积电2nm制程获重大突破

来源:本文来自「经济日报」,谢谢。据台媒经济日报透露,台积电2纳米制程研发获重大突破。供应链透露,有别于3纳米与5纳米采用鳍式场效电晶体(FinFET)架构,台积电2纳米改采全新的多桥通道场效电晶…