当我在elm中导入库时,仅导入特定功能会比公开所有内容更有效吗?
例如,当我导入Html模块时,我通常只是公开所有内容
import Html exposing (..)
这很方便,因此在我继续写作时,我不必不断修改定义以添加更多的Html标签,但这有效吗?编译器会意识到我不需要源代码中的整个库,还是会全部导入?
答案 0 :(得分:4)
我认为完全导入要使用的功能没有性能优势。如farmio所述,无论如何,在导入0.19之前,整个模块都会被导入,而在0.19之后,则可以传递--optimize
来消除无效代码。
但是,我强烈建议您不要导入模块公开的所有功能,因为这会使代码很难阅读。想象这种情况:
import Html exposing (..)
import Svg exposing (..)
import Html.Attributes exposing (..)
import Svg.Attributes exposing (..)
我们已经将这四个模块中的所有功能拉到了自己的名称空间中,因此,每次读取未定义功能的名称时,我都必须猜测该功能的来源。替代方法只是公开类型,但不公开功能:
import Html exposing (Html)
import Svg exposing (Svg)
import Html.Attributes as HAttr
import Svg.Attributes as SAttr
通过这种方式,您不必一次猜测功能的来源。
答案 1 :(得分:2)
自Elm 0.19起,编译器具有消除功能级死代码的功能。因此,无论哪种方式,您编译的应用程序都应该相同。
我不确定只公开使用的函数是否会缩短编译时间。