Angular AOT编译大型项目出现内存溢出瓶颈

2017 年 8 月 09 日

自 2.0 版本起,Angular 就已支持了 AOT (Ahead-of-time)编译,该功能在服务器端对代码进行编译,这可以免去标准的 JIT(Just-in-time)方式每次都在浏览器运行时进行编译的消耗,优化了客户端的渲染速度及代码的网络传输效率。同时谷歌还推出了 Angular-cli 工具,进一步简化了 Angular 项目的管理、编译过程。

然而,在今年年初,有用户指出在使用Angular-cli 对大型项目进行AOT 编译时遇到内存溢出(OOM)的情况,导致编译失败。谷歌的Angular-cli 工程师Hans 表示,问题的原因是,在Angular-cli 使用的Webpack 插件中,路径解析没有很好地处理递归问题,从而导致大量内存占用,目前还没有找到很好的解决方案。

Angular 的 AOT 编译会进行代码静态分析、无用代码及依赖的剪枝、缩小代码体积等一系列优化,这个过程势必会消耗一定时间。该功能在带来运行时性能提升的同时,拖慢了编译速度,从而遭到不少用户的吐槽。官方也建议,在开发过程中使用JIT 的编译方式,而只在正式发布时使用AOT 编译。

目前能够暂时缓解内存溢出这一问题的方法是为其分配更多可用的内存,使编译器能够完成编译,但这毕竟治标不治本,随着项目的不断增长,在可预见的将来还是会遇到同样的问题。将独立应用拆分成小型的模块会是一个不错的选择,同时也有人提出投奔Vue、Ember 或React 等其他框架。

社区中已有不少用户遇到了这个内存溢出的问题,并能够成功将其重现,然而目前谷歌官方并没有对该问题提出明确的解决方案,值得注意的是AngularDart 并没有出现类似情况。社区对该问题的出现产生了些许担忧,Angular 将来是否能很好地支持大型应用?谷歌最终会不会更倾向于推广AngularDart?现在只能希望Angular 在后续版本中针对该问题进行更好的性能优化。


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 8 月 09 日 19:00 2372
用户头像

发布了 5 篇内容,共 6 次阅读,收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

知识点总结

Acker飏

区块链交易系统开发,期货合约平台搭建

13823153121

我敢说,这个版本的斗地主你肯定没玩过?

华为云开发者社区

命令行 游戏 斗地主

区块链技术最重要价值所在

CECBC区块链专委会

区块链 数字经济 互联网革命

阿里P9技术专家:Java程序员这些必备技能的进阶书籍一定要读一读

Java成神之路

Java 学习 程序员 面试

区块链合约层是一种自动执行的数字协议

CECBC区块链专委会

区块链 智能合约

不懂 ZooKeeper?没关系,这一篇给你讲的明明白白

海星

Mysql学习笔记:分库分表(sharding)

马迪奥

MySQL Sharding

阿里P8大牛手写的源码笔记:Java集合+Java多线程+MyBatis+Spring

Java成神之路

Java spring 面试 多线程 mybatis源码

数字货币合约跟单系统开发app,跟单系统搭建源码

WX13823153201

巧用决策树消灭if-else/switch

赫杰辉

决策树 可视化 简化代码

架构师期末作业

傻傻的帅

云图说 | 华为云GPU共享型AI容器,让你用得起,用得好,用的放心

华为云开发者社区

gpu caffe

如何正确设置Java.home

谷鱼

彻底理解JavaScript执行上下文

Walker

JavaScript 前端 this指针 函数执行

牛批!清华毕业的Java大牛用一个坦克大战游戏项目来演示设计模式

Java成神之路

Java 学习 编程 程序员 设计模式

USDT跑分承兑系统开发,区块链支付平台搭建

13823153121

设计模式只是一把锤子

博文视点Broadview

读书笔记 编程 面向对象 设计模式

SpringBoot写后端接口,看这一篇就够了!

华为云开发者社区

后端 swagger pringboot

Mysql学习笔记:InnoDB索引结构浅析

马迪奥

MySQL 索引结构 innodb

端-边-云全面协同创新 英特尔携手百度共推产业智能化升级

intel001

用Go-Guardian写一个Golang的可扩展的身份认证

朱亚光

go golang 微服务 身份认证

音乐创作者必备软件,轻松玩转原创

Geek_96964a

音乐制作 编曲 电音 作曲 乐团

所见即所得的用户增长技术背后是如何实现的

海豚调度

用户增长 大数据技术 大数据架构 用户增长技术 ad-hoc技术

如何让知识图谱告诉你“故障根因”

华为云开发者社区

华为云 知识图谱 图谱

一次代码评审,差点过不了试用期!

小傅哥

Java 小傅哥 代码质量 代码优化 代码规范

拥抱K8S系列-07-部署K8S集群(Rancher)

张无忌

Kubernetes rancher

两年Java工作经验涨到23K,这究竟是怎么做到的?

Java架构师迁哥

区块链技术与我们的生活将并存

CECBC区块链专委会

区块链 数字经济

@所有人 Flink Forward Asia 2020 向您发出议题征集邀请!

Apache Flink

flink

解Bug之路-记一次JVM堆外内存泄露Bug的查找

无毁的湖光

Linux JVM heap memory GC Linux Kenel

跨越计算鸿沟:如何靠软硬件协同突破算力瓶颈?

跨越计算鸿沟:如何靠软硬件协同突破算力瓶颈?

Angular AOT编译大型项目出现内存溢出瓶颈-InfoQ