Javascript 为什么不应该';您在ES6中不使用全部导入吗

Javascript 为什么不应该';您在ES6中不使用全部导入吗,javascript,reactjs,ecmascript-6,es6-modules,Javascript,Reactjs,Ecmascript 6,Es6 Modules,因此,我最近开始学习react,并注意到所有文档都有类似于其他文档的导入: import { Apples, Bananas, Oranges } from 'fruits'; 但在研究react时,我发现这种语法同样有效: import * as Fruits from 'fruits'; 我的问题:使用import all语法是否会导致性能损失或逻辑冲突 如果没有,那么我将继续使用该语法。我宁愿说得更详细一点,也不必担心是否所有东西都已导入。事实上,这取决于从给定模块导出的数量 如果导入

因此,我最近开始学习react,并注意到所有文档都有类似于其他文档的导入:

import { Apples, Bananas, Oranges } from 'fruits';
但在研究react时,我发现这种语法同样有效:

import * as Fruits from 'fruits';
我的问题:使用import all语法是否会导致性能损失或逻辑冲突


如果没有,那么我将继续使用该语法。我宁愿说得更详细一点,也不必担心是否所有东西都已导入。

事实上,这取决于从给定模块导出的数量

如果导入例如
Lodash
您可能不希望导入整个库,则应仅导入将在应用程序中使用的以下方法:

import{isEmpty,pickBy,orderBy}来自'lodash'


避免性能损失和内存浪费

但是,如果您给定的模块只包含几个方法,或者基本上每次导出都要使用,那么您可以自由使用该快捷方式:

import*作为来自“水果”的水果


注意:我想您使用的是
webpack2
,它实际上包括三种震动算法,可以缩小捆绑包。

这取决于您使用的是什么模块捆绑包。如果使用>webpack 2.0作为捆绑程序,则会影响捆绑大小,因为:

import { Apples, Bananas, Oranges } from 'fruits';
由于webpack 2.0使用树摇动算法进行优化,因此只会从文件中带来苹果、香蕉和橙子。此外,在这种情况下,您需要注意不要在文件中执行任何
默认导出
,而是导出
const
,因为命名导出就足够了

import * as Fruits from 'fruits';
只需将
文件中声明的所有内容都带到
文件中即可

我在推特上找到了与丹·阿布拉莫夫的精彩对话,这应该会对你有所帮助

编辑

如果是lodash,您可能希望使用。如果你用这个,你就不必这么做了

import {isEmpty, isUndefined} from 'lodash';
你能做到吗

import _ from 'lodash';

因为它不会为你带来整个图书馆

最好使用第一种方法。至少有一件事:
始终明确地编写您想要使用的内容
。这是所有框架/语言中的最佳实践

如果你有一些树摇晃,一些未使用的模块将不会被加载,一切都应该是好的(就像@zerkms说的)。 但在最好的情况下,即使是最好的摇树也不是完美的,即使你不使用它们,你也可以有一些导入。 如果你的项目是“小的”,它应该是好的。如果在你的项目中你加载了数百个东西,可能会有点不同

当你们要建立你们的项目时,你们也会在树震动分析上浪费时间


所以,仅仅因为你不想“写两个字来浪费时间”,你就会在每个构建上浪费时间,并且可能会对性能产生影响

如果你使用支持树抖动的绑定器,那么前者可能会导致更小的结果文件。“而且不必担心”—你不必担心,您的IDE应该替您担心。@zerkms这是有道理的。我使用的是Webpack,我很确定它确实如此。除了给出的答案外,更具体的导入使您的代码更加自我记录。这显然对你的应用程序的性能没有帮助,但当你从现在开始6个月后回顾你的代码时,它可能会帮助你的大脑执行,你不确定香蕉是来自水果还是黄色的东西,以避免性能损失和内存浪费。或者至少有一些东西可以说明这一点。@zerkms最近在我的应用程序中测试了它,整个
lodash
重约70kb,而只有少数导入的方法-3-10kb取决于它们的复杂性。然后你应该提到“摇树”或替代技术。限定的导入本身并不能改善任何东西。@zerkms但是有
reactjs
标记,这就是为什么我认为asker实际上使用了react with babel。与其他2个相比,这是最好的建议。在我的例子中,我使用的库很少,其中一些我只使用了其中的一部分,一些我知道我将使用全部或至少几乎所有的组件。