我目前正在尝试使用golang的插件系统。我在测试中遇到的一个问题是,插件的文件大小相对较大。
加载插件的应用程序将被称为“主机”。
主机应用程序本身约为50MiB,因为它是一个Web应用程序,应使用插件功能进行扩展。
我已经实现了一个小的插件加载器来启动插件。
插件可以使用应用程序中已经存在的API,例如访问数据库。
我已经为这个问题准备了一个示例插件。插件.so文件大小为〜39MiB。这使我有一个合理的怀疑,即该插件还包含来自主机应用程序的源代码。
用于创建的命令main.so
:
go build -ldflags="-s -w" --buildmode=plugin main.go
是否可以从应用程序中“删除”重复的源代码以减小文件大小,因为在加载插件时已在运行时将其加载?
插件加载程序:https://github.com/jonasfranz/gitea/blob/feature/plugin/modules/plugins/loader.go
插件示例:https :
//git.jonasfranz.software/JonasFranzDEV/giteaplugin
插件中不包含源代码。但什么是包含在他们的是他们的 依赖性 , 递归
。之所以这样,是因为不能保证加载插件的主应用程序也包含依赖项,因此,要确保插件的生存能力,其依赖项必须是自包含的。
如果主应用程序还包含相同的依赖项(具有相同的版本),这不会引起问题,它们只会在go运行时中“实例化”一次
为了减小插件的尺寸怎么办?除了删除调试信息(您做了什么)之外,您还应该最小化依赖性。
这可能需要在插件或您要为其创建插件的应用程序中进行重新设计和重大更改。例如,插件不应引用“实现”软件包,插件应仅引用“接口”软件包。如果接口和实现未分开,则可能无法实现(因此也可能需要更改主应用程序)。
您也可以尝试尝试压缩二进制文件的实用程序,有关详细信息,请参见:使用这一奇怪的技巧缩小Go二进制文件
问题内容: 如果大小为0,如何在Linux中删除某个文件。我想在crontab中执行此文件,而无需任何额外的脚本。 像这样吗 问题答案: 这将删除目录(及以下)中大小为零的所有文件。 如果您只想要一个特定的文件;
问题内容: 有什么办法可以减少jar文件的大小? 我想要一个减少未使用依赖性的工具。 我使用Maven进行依赖管理。 问题答案: 从Maven的角度来看,JAR文件通常不包含依赖项。因此,您必须在谈论: WAR或EAR或类似文件, 通过合并大量JAR文件而产生的所谓的UberJAR文件;例如使用Maven阴影插件,或 依赖比Maven模块更精细。 在前两种情况下,可以通过在依赖关系规范或war或s
问题内容: 我用Xcode 6.1和Swift制作了一个非常简单的iPhone应用程序。我对ios开发真的很陌生,遇到了一个134 mb的应用程序!当然这是不可接受的。 我的所有屏幕尺寸的背景图像加起来总计20 mb。就是这样!我将这些图像存储在xcassets中,因为那是我猜的首选方式。 我认为该应用程序不应超过25 mbs。 我发现我的项目中有一些参考文献加倍。我删除了这些,但我的.app文件
问题内容: 我有一个要在其中显示表行的表,它是一个组件。我也想将数据传递给该组件: 在中,HTML包含一些从和渲染的数据。 但是渲染后,由于我的CSS损坏,导致所有HTML(整个表格行)都显示在第一列中。 以上结果: 我尝试了以下方法: 但这会导致错误。 我也不能使用,因为我想呈现HTML。 如何呈现不带标签的模板? 其他答案是角度的早期版本。我正在使用Angular 4.3.4。 任何帮助,将不
问题内容: 我已经为Java项目开发了一个模块。该模块取决于外部库()。问题是,该文件比整个项目本身(14 MB)大两倍。我仅使用库中类的一小部分。该模块现已完成,将来没有人会对其进行扩展。有没有一种方法可以将相关类仅提取给某些类,以便其他人不必下载所有这些额外的内容? 问题答案: ProGuard之类的混淆工具通常提供从jar文件中删除未使用的类(甚至字段和方法)的功能。但是,您必须小心确认所有
我正在努力使一个现有的项目变得更加专业化。我能够构建EAR文件(因为我必须在Websphere中部署),当我尝试部署时,使用管理控制台-能够成功安装,但应用程序不工作,在调查后,我发现的大小与参考EAR文件(旧的现有EAR文件)相比非常小 构建EAR文件所遵循的步骤 已安装M2E插件 我将文件夹结构与现有的EAR文件及其内容进行了比较,看起来都不错。但只有类文件的大小(不是全部,而是超过80%)是