BioforestChain / dweb_browser

BioforestChain Infrastructure
https://docs.dweb-browser.org
MIT License
11 stars 4 forks source link

【讨论】模块动态安装 #130

Closed waterbang closed 2 months ago

waterbang commented 3 months ago

在一些功能性的模块中,并不需要一开始就在内存当中初始化安装。初始化的时候只初始化必须启动的模块(http)

image

dns在用户需要使用的时候再去安装到内存,这会大大减少app一启动的内存占用,但是可能会增加模块第一次启动速度。

Gaubee commented 3 months ago

这里的核心问题在于有些模块没有遵循最佳实践,所以会导致启动时间过长。 假设一下,如果要做到“按需初始化”,那么说白了模块只需要提供一个占位id就够了,这其实就是所谓的最佳实践,只提供最基础的静态元数据,而不是在MicroModule的类上写大量变量的初始化。 现在很多模块都没有遵循,比如做了store的初始化、内存map/set的初始化、做了静态链接库的初始化等等。

最佳实践中,需要将所有的模块运行消耗全部放在 _bootstrap 中,并在 _shutdown 中全部销毁。 理论上,我们要做到在最佳实践下,100ns能setup 100个mm。也就是0.1ms,这已经很慢了,主要的消耗只能在i18n上。

只有一些模块的初始化,可以确实另外起一个launch 来执行setup,但是要考虑的是在最佳实践下,launch的成本可能都已经远超直接setup来。 但客观事实是目前很多mm都没有做最佳实践。

总之,可以延迟启动,但是这属于临时举动,反而会导致一些问题被隐藏起来,因此不建议推行。

waterbang commented 3 months ago

todo 模块设计需要遵循最佳实践,当过完所有模块之后,此issue将关闭

waterbang commented 2 months ago

close of 83e0fbc0c1e01bc88a7790560d24f50adfa42022