加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 只加载模块的一部分来节省资源?

发布时间:2020-12-15 22:05:46 所属栏目:大数据 来源:网络整理
导读:我正在阅读O’Reilly的Perl Objects,References模块,更具体地说是关于模块的部分.它声明当使用Some :: Module时,您可以指定导入列表.从它的解释看来,使用这个列表的唯一好处是为了保持命名空间的清洁.换句话说,如果主程序包中有子程序some_sub,并且加载的模
我正在阅读O’Reilly的Perl Objects,References&模块,更具体地说是关于模块的部分.它声明当使用Some :: Module时,您可以指定导入列表.从它的解释看来,使用这个列表的唯一好处是为了保持命名空间的清洁.换句话说,如果主程序包中有子程序some_sub,并且加载的模块有一个同名的子程序,则子程序将被覆盖.但是,如果您指定导入列表并从此列表中省略some_sub,则不会发生此冲突.然后你可以通过声明它来运行模块中的some_sub:Some :: Module :: some_sub.

除了上面描述的那个之外还有其他好处吗?我问这个是因为在某些情况下你加载了具有大量功能的模块,即使你只对它的一些方法感兴趣.起初我认为通过指定一个导入列表,你只加载那些方法,而不是用你不会使用的方法来膨胀内存.但是,从上面的解释看来并非如此.您是否可以通过仅加载模块的部分来有选择地节省资源?或者Perl是否足够智能,在编译时无需程序员干预?

解决方法

请注意,“导入列表”只是一种约定.模块的导入功能可以随意使用此列表执行任何操作,您可以看到它(ab)被许多所谓的pragma模块使用.因此,部分加载不一定以任何方式使用.例如,模块可以加载重要的函数存根,无论您是否导入它们,并在实际的第一次调用时动态加载大量实现.

因此,使用部分导入列表可能,或者实际上可能不会保存任何资源 – 这完全取决于所使用模块的实际实现.

虽然require和use确实加载了整个.pm文件 – 该文件可能只是一个轻量级的存根和加载器,用于位于其他地方的实际代码.还有一个惯例是调用那些模块::Heavy.

模块可以自由地以任何方式实现部分加载.以下是模块如何节省资源的一些可能性:

> AUTOLOAD(带有免费的AutoLoader,AutoSplit和SelfLoader模块).
>使用加载必要子模块的存根.
>首次按名称访问繁重数据(即字典或编码映射)时,动态加载它们.
>如果依赖于其他重型模块,则在运行时动态地要求它们依赖于它们而不是一开始就使用编译时.

此列表中的所有内容都可以在幕后自动运行,通过使用导入列表公开,或以其他完全任意的方式工作/调用.再一次,它完全取决于模块的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读