pix*_*wiz 9 javascript bundling-and-minification ecmascript-6 es6-modules
我已经找到了至少两种从像Ramda这样的模块导入函数的方法.可能还有一些方法可以做一些非常相似的事情const R = require('ramda');
选项1是导入某些功能:
import { cond, T, always, curry, compose } from 'ramda';
Run Code Online (Sandbox Code Playgroud)
选项2是导入整个模块,如:
import * as R from "ramda";
Run Code Online (Sandbox Code Playgroud)
我更喜欢引用调用函数的模块,如下所示:
R.T();
Run Code Online (Sandbox Code Playgroud)
但是如果使用第二个选项,它是否会引入每个Ramda函数,而不仅仅是我正在使用的模块中使用的函数?如果使用选项2,是否会对实际内存使用或带宽使用产生影响?有可能以某种方式这样做:
// invalid syntax below:
import R { cond, T, always, curry, compose } from 'ramda';
R.T();
Run Code Online (Sandbox Code Playgroud)
我的问题与此问题有点相关,但它有点不同 导入R(ramda)到typescript .ts文件
Ber*_*rgi 10
TL; DR:没关系.
import * as … from 'ramda';
import { … } from 'ramda';
Run Code Online (Sandbox Code Playgroud)
将两者在默认情况下总能带来完整的Ramda模块及其所有依赖英寸 将运行模块内的所有代码,并且使用哪种语法来引用导出的绑定无关紧要.您是否使用命名或命名空间导入完全取决于首选项.
什么可以减少下载的文件大小和使用的内存是静态分析.在评估模块之后,引擎可以垃圾收集那些从无处引用的绑定.模块命名空间对象可能会使这一点变得更难,因为任何有权访问该对象的人都可以访问所有导出.但是仍然以某种方式指定这些对象(作为不可变的)以允许对它们的使用进行静态分析,并且如果你用它们做的唯一事情是具有常量名称的属性访问,那么引擎应该利用这个事实.
任何大小优化都涉及猜测模块的哪些部分需要进行评估,哪些部分不需要,并且在模块捆绑器中发生(如Rollup或WebPack).这称为Tree Shaking,在不需要时删除部分代码和整个依赖项(由导入的任何内容使用).它应该能够检测您正在使用哪些导入而不管导入样式,尽管在使用命名空间对象执行异常操作时可能需要挽救(例如循环它或使用动态属性访问).
要了解您的捆绑商可以做出的确切猜测,请联系其文档.
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |