写点什么

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

  • 2017-08-09
  • 本文字数:804 字

    阅读完需:约 3 分钟

自 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-08-09 19:002949
用户头像

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

关注

评论

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

2021年最佳VUE3 UI框架推荐

devpoint

Vue3 antd vue vue2 8月日更

MinIO Client 使用(二)

耳东@Erdong

Minio client 8月日更 minio client

求阿里大神整理的分布式核心笔记出炉了,GitHub刚发布就标星85k

Java~~~

Java 架构 面试 微服务 JVM

Nginx原理解析

程序员阿杜

nginx 8月日更

前端之算法(二)选择和插入排序

Augus

8月日更

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

编程三昧

JavaScript html5 大前端 8月日更 事件冒泡

网络攻防学习笔记 Day103

穿过生命散发芬芳

态势感知 网络攻防 8月日更

未来25年看隐私计算与区块链

CECBC

MySQL专栏(三)-->事务控制那些事

卢卡多多

MySQL 8月日更

优秀的求职者,是如何巧妙应对面试提问呢?

xcbeyond

面试 求职 8月日更

IntelliJ IDEA 如何在 Java 中进行快速注释

HoneyMoose

旗舰机怎么做隐私安全?荣耀Magic3有个答案

脑极体

占楼

IT蜗壳-Tango

8月日更

猎杀时刻!疯狂狩猎大厂offer,阿里高工总结698页Spring学习笔记

Java 编程 架构 面试 架构师

让GitHub低头!这份阿里内部的10W字Java面试手册到底有多强?

Java~~~

Java spring 面试 微服务 JVM

架构实战营毕业总结

thewangzl

滴滴最看重的SpringCloud手册曾被疯狂转载,现在学还有用吗?

Java~~~

Java 架构 面试 微服务 Spring Cloud

【设计模式】责任链模式

Andy阿辉

C# 后端 设计模式 8月日更

毕业总结

方堃

交易所市值管理机器人搭建,项目方市值管理软件源码

什么是分布式超媒体信息获取系统?

escray

学习 极客时间 如何落地业务建模 8月日更

运营宠物类自媒体:明确受众和自己的定位

石头IT视角

熬夜28天肝完这25W字的九大Java核心专题,连续拿下多个大厂offer

Java~~~

Java 架构 面试 JVM 架构师

用区块链技术实现电力供给“三流合一”

CECBC

有状态算子和应用(七)

数据与智能

flink 算子 状态

Golang中的Remove和RemoveAll的对比分析

liuzhen007

8月日更

Linux之ss命令

入门小站

Linux

Redis入门到超神 - 03 redis.conf配置文件详解

陈皮的JavaLib

redis 运维 8月日更

在线HTTP/HTTPS协议GET,POST,RESTful接口测试

入门小站

Linux

另一个失败的小项目

箭上有毒

8月日更

算法分析

一个大红包

8月日更

Angular AOT编译大型项目出现内存溢出瓶颈_语言 & 开发_周元昊_InfoQ精选文章