Dart 不必要的包导入是否有性能缺陷?
假设为了方便起见,我想导出一组文件,但每当我导入这些文件时,我都不会使用其中的所有内容。在这种情况下,不必要的文件是否会带来性能缺陷?
或许。
Dart 会在编译时花时间解析额外的库。
如果幸运的话,编译器将识别出没有使用任何导入的类或函数,并在编译其余部分之前“tree-shake”掉它们。如果你真的很不幸,它不会检测到这一点(也许你正在使用dart:mirrors,所以你可以通过它访问声明)。如果您确实没有使用该库的任何部分,那么 tree-shaking 很有可能会起作用。
当提前编译代码时(例如对于 Web),如果未使用的代码没有被 tree-shaking 掉,它将影响程序的大小。下载时间也是性能的一部分,尤其是在网络上,所以这是一个效果。它还可能会影响一些优化。
例如,如果编译器知道程序中只有一个名为 的方法flamboozle,那么它可能会将 的调用优化o.flamboozle()为直接调用而不是虚拟接口调用。如果您的额外库还包含一个flamboozle方法,并且没有检测到不会使用该库,则可能不会使用该优化。因此,额外的代码即使没有使用,也会影响性能,只要它没有被明显使用即可。
在大多数情况下,我不会担心导入且完全未使用的库的性能。您使用的代码更有可能是导致性能问题的原因。可读性和名称冲突的风险更大,所以我仍然会删除导入。