导入特定功能与在Elm中全部曝光

时间:2018-11-15 02:19:37

标签: elm

当我在elm中导入库时,仅导入特定功能会比公开所有内容更有效吗?

例如,当我导入Html模块时,我通常只是公开所有内容

import Html exposing (..)

这很方便,因此在我继续写作时,我不必不断修改定义以添加更多的Html标签,但这有效吗?编译器会意识到我不需要源代码中的整个库,还是会全部导入?

2 个答案:

答案 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起,编译器具有消除功能级死代码的功能。因此,无论哪种方式,您编译的应用程序都应该相同。

我不确定只公开使用的函数是否会缩短编译时间。

https://elm-lang.org/blog/small-assets-without-the-headache