你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

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:002606
用户头像

发布了 41 篇内容, 共 10.9 次阅读, 收获喜欢 1 次。

关注

评论

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

浏览器上有趣的Console命令都了解吗?

空城机

前端 浏览器 前端进阶 6月日更

算法训练营 - 学习笔记 - 第十周

心在飞

Django-Task1笔记

IT蜗壳-Tango

IT蜗壳教学 6 月日更 Datawhale

算法之异位词字符处理

Skysper

算法

Python——列表切片

在即

6月日更 六月日更

面试官嘲笑我,这你都不会?

我是阿沐

php redis cluster 大厂面试真题

「SQL数据分析系列」3. 查询入门

数据与智能

MySQL select

docker搭建Nginx和Tomcat负载均衡

叫我阿柒啊

nginx Docker 负载均衡

react源码解析12.状态更新流程

全栈潇晨

React

2021年,5G、AR、裸眼3D技术给户外广告带来了全新的改变

󠀛Ferry

6月日更

让前端小姐姐愉快地开发表单

Daniel

vue.js 表单 动态表单 6月日更 6 月日更

你有一份Rx编程秘籍请签收

vivo互联网技术

响应式编程 函数编程 RXJS web前端

[译] Android 的 Java 9,10,11,12 的支持

Antway

6月日更 6 月日更

懵了!本以为精通String类,想不到却被阿里面试官狠狠虐了一把

java专业爱好者

Java string

前端 CSS 变量简介及基本使用方法

编程三昧

CSS css3 前端 样式

【Vue2.x 源码学习】第十四篇 - 生成 ast 语法树 - 模板解析

Brave

源码 vue2 6 月日更

浪潮云说丨云应用容灾:四大关键能力,护航业务连续性

浪潮云

云计算

视频号真人首播 - 踩坑经验总结

悟空聊架构

复盘 直播 视频号 6 月日更

算法训练营 - 知识总结

心在飞

Java 字符串 split 踩坑记

mghio

6 月日更

Java中生成随机数的4种方式!

王磊

Java 随机数

【Flutter 专题】127 图解基础 Image 小组件

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6 月日更

Apache Drill 1.19.0 发布集锦

MPP Apache Drill 联邦查询和分析

架构实战训练营 - 模块五课后作业

Johnny

架构实战营

工作流Activiti框架中仿真引擎Crystalball的使用分析

攻城狮Chova

工作流引擎 仿真 6 月日更

极光开发者周刊【No.0611】

极光开发者

Pandas高级教程之:Dataframe的重排和旋转

程序那些事

Python 数据分析 pandas 程序那些事

云图说|华为云自研云数据库GaussDB NoSQL,兼容多款NoSQL接口的数据库服务

华为云开发者社区

nosql Influxdb Cassandra mongo GaussDB NoSQL

springboot启动流程之加载入口类

梦倚栏杆

【21-7】Grafana如何配置Thanos 查询历史数据

耳东

Grafana Prometheus Thanos query 6月日更

Python训练营笔记 数据结构大汇总 Day5

万里无云万里天

Python 6月日更

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

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