javascript - 减少 React/MERN Stack Bundle 的大小 - 主要是删除重复的 D3

标签 javascript reactjs d3.js build

当我运行 npm run-script build 来捆绑我的 React 应用程序时,一旦 bundle 完成,以下 webpack bundle 分析器就会启动,它会显示我的应用程序 bundle 的组成:

enter image description here

虽然我对此并不乐观,但这似乎是一个相当大的构建,这可能会减慢我的应用程序的速度。

d3 似乎是我的 bundle 中最大的部分之一,而且似乎 d3 被捆绑了两次 - 一次单独捆绑,一次与 d3-tip 捆绑。 (我的 React 应用程序是一个图形/d3 密集型应用程序,我在整个应用程序中使用了几个 d3 模块。我使用 d3-tip 作为我的图表工具提示库)。我该如何解决这个问题,以便 d3 只捆绑一次?而且,如果它可以显着提高我的应用程序的速度,我如何才能捆绑只捆绑我使用的 d3 模块,而不是捆绑所有 d3?

我的 index.js 在右边看起来也很大,我不知道这是否普通。事实上,我对什么是大型/笨重的构建与小型/紧凑的构建几乎一无所知。我确实知道我的构建文件夹的大小约为 53MB。

.

----EDIT ----- 在赏金之前更新帖子。我删除了 d3-tip,并切换到使用带有悬停作为工具提示的普通 div。这是最新版本:

enter image description here

...我对赏金的主要问题是:

1:我怎样才能只捆绑在我的应用中实际使用的 d3、react-spinners 等模块?我听说过 tree-shaking,但找不到关于如何在应用程序中摇树 d3 的好资源。我使用 d3 的组件通常在前几行有以下内容:

import React, { Component } from 'react';
import * as d3 from 'd3';
import * as d3Hexbin from 'd3-hexbin';

class SomeClassHere extends Component { ...

...我认为我不必再以这种方式导入 d3,但我不确定是否简单地更改所有导入也会更改 bundle ,或者我是否必须做其他事情删除未使用的模块。

2: 是否有更小的 pdf-generation 库可供使用,而不是 kendo-react-pdf?同样还有比 react-datepicker 更小​​的东西吗?我的应用程序中只有一个日期选择器,而整个 react-datepicker 库似乎有点矫枉过正?

3:最后,我应该争取的 bundle 尺寸是多少? bundle 的屏幕截图显示了大多数应用程序的 stat 大小、解析大小和 gzip 大小(不包括我认为是我在/src 中编写的代码的蓝色 block ?)。这么大吗?

在此先感谢您的帮助!

最佳答案

Bounty 没有获得吸引力,但我想更新一下,与我在过去几天的努力和学到的知识分享:

根据 this blocks link , 使用 rollup是一种制作像 d3 这样的库的自定义包的方法。我还没有使用它,但我会查看汇总文档并尝试使用它制作一个更小的 d3 包(这可能具有挑战性,因为我的应用程序使用了几十个 d3 模块)。我很乐观,它会奏效。

对于 react-spinners,我将简单地删除这个库并在 react 中制作我自己的微调器(只需抓取一个图标并为其设置动画)。从 bundle 中移除一个大型库,并且在没有库的情况下使用 react 创建并不难。

我也可能会在 react 中创建自己的日期选择器,而不是使用 react-datepicker。这消除了 2 个并不真正需要的大型依赖项。特别是使用 react-datepicker,这主要是 1 个大模块,因此没有自定义模块创建者会使这个库更小。我可能会关注 this tutorial因为它看起来合法。

kendo-react-pdf 非常庞大,但我的应用程序需要“下载到 pdf”功能来生成 1 页 pdf 报告。 一般而言 - 任何关于在 react 中生成 pdf 的建议(指向指南、教程、库等的链接)都会有所帮助。在 react 中构建下载到 pdf 功能的最新库和/或方法是什么?

回顾一下 - 删除库并在 react 中重新创建它们似乎比尝试“摇树”我的应用程序使用的每个库更简单。 d3 异常(exception),我将尝试构建一个仅使用我的应用所需的 d3 模块的自定义包。

编辑:我处于一个轨迹上,在帖子的捆绑层次结构图中,我的 bundle 的黄色部分将小于我 bundle 的蓝色部分。到那时,大概使捆绑更小的唯一方法是减少我自己的代码?我的应用程序的所有组件(我相信这是捆绑层次结构图中的蓝色)和容器组件(很多吗?)可能有 20K - 30K 行代码,但如果我要花时间重构事情,我可以减少大约 30% - 50%

关于javascript - 减少 React/MERN Stack Bundle 的大小 - 主要是删除重复的 D3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247964/

相关文章:

javascript - 将 Duo Web 2 因素身份验证与 ColdFusion 集成

javascript - 是否可以使用 Plupload 调整文件大小以获得更多大小?

reactjs - 使用react和jest测试文本输入

javascript - D3 js - 当使用画笔线超出图表 x 轴时

javascript - D3 堆叠图问题与 x 轴上的条形位置

javascript - 在 .json 中查找最大值和最小值

JavaScript 中的 java.lang.Double.longBitsToDouble 函数

javascript - 数组/对象解构

javascript - ReactJS:无法在浏览器上显示html文本

javascript - 升级 reactJS 后出现非法访问错误