An empirical study of bloated dependencies in CommonJS packages

2024年05月28日
  • 简介
    JavaScript的包经常容易出现臃肿,这会显著影响Web应用程序的性能和可维护性。虽然Web打包工具和Tree-shaking可以在客户端应用程序的函数级别上缓解这个问题,但它们无法有效地检测和删除服务器端应用程序中的臃肿。在本文中,我们进行了一项实证研究,调查了完全未使用的臃肿依赖项在服务器端应用程序中的情况。我们的研究重点放在使用广泛和高度动态的CommonJS模块系统构建的应用程序上。我们提出了一种基于跟踪的动态分析,该分析监视文件访问,以确定哪些依赖项在运行时未被访问。为了进行我们的研究,我们创建了一个原始数据集,其中包含92个CommonJS包,其中测试覆盖率中位数为96.9%,总计50,661个依赖项。我们的动态分析识别并成功删除了其中50.7%的依赖项,同时保持了所有包的正确构建。此外,我们发现直接使用的依赖项中有14.9%和间接依赖项中有51.3%是臃肿的。一个关键的见解是,只专注于通过清理package.json文件删除直接臃肿的依赖项,也会删除相当大比例的不必要的臃肿间接依赖项。与最先进的动态去除臃肿技术相比,我们基于文件访问的分析具有更少的误报,并且在检测臃肿依赖项方面具有更高的准确性。我们的研究结果表明,在包管理器中原生支持依赖项去除臃肿可以显著减轻维护依赖项的负担。
  • 作者讲解
  • 图表
  • 解决问题
    这篇论文试图解决服务器端应用程序中依赖包过多的问题,提出了一种基于文件访问的动态分析方法来检测和移除未使用的依赖包。
  • 关键思路
    该论文提出了一种基于文件访问的动态分析方法,用于检测和移除未使用的依赖包。与现有的动态去除技术相比,该方法具有更少的误报和更高的准确性。
  • 其它亮点
    该论文使用92个常用的CommonJS包作为研究对象,使用基于文件访问的动态分析方法,成功地移除了50.7%的未使用依赖包。此外,论文还发现14.9%的直接使用依赖和51.3%的间接依赖是过多的。该论文的实验设计详细,使用的数据集和开源代码也都有提供。
  • 相关研究
    在这个领域中,最近的相关研究包括《Understanding and Improving the Performance Impact of Package Dependencies》、《A Study of the Factors Affecting NPM Package Maintainability》等。
许愿开讲
PDF
原文
点赞 收藏
向作者提问
NEW
分享到Link

提问交流

提交问题,平台邀请作者,轻松获得权威解答~

向作者提问