browserify / browserify/tinyify

Applying tinyify to plotly.js crashes Node

未关闭
#13 8 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
JavaScript
星标
405
派生
14
PR 合并指标
30 天内没有已合并 PR

描述

I'm trying to optimize a bundle that contains the (rather hefty) [plotly.js](https://github.com/plotly/plotly.js) library.

When I pass `-p tinyify` to my bundling command it will hang for quite a while and then crash, printing the following:

```
<--- Last few GCs --->

[9631:0x36f27f0] 56924 ms: Mark-sweep 1345.1 (1440.5) -> 1344.3 (1456.5) MB, 1270.8 / 0.0 ms (average mu = 0.103, current mu = 0.006) allocation failure scavenge might not succeed
[9631:0x36f27f0] 58143 ms: Mark-sweep 1344.3 (1456.5) -> 1344.3 (1456.5) MB, 1218.0 / 0.0 ms (average mu = 0.053, current mu = 0.000) allocation failure GC in old space requested

<--- JS stacktrace --->

==== JS stack trace =========================================

0: ExitFrame [pc: 0x292a09adc01d]
Security context: 0x37fbe811e549
1: addHelpers [0x1401217d54e9] [/home/frederik/projects/tinyify-crash/node_modules/transform-ast/index.js:~87] [pc=0x292a0a5a7f5a](this=0x2f3e1e21aa09 ,node=0x071fba8d11c1 )
2: enter [0x208cdc2350f9] [/home/frederik/projects/tinyify-crash/node_modules/transform-ast/index.js:~33] [pc=0x292a09e5713a](this=0x2f...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
1: 0x8c02c0 node::Abort() [node]
2: 0x8c030c [node]
3: 0xad15de v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
4: 0xad1814 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
5: 0xebe752 [node]
6: 0xebe858 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [node]
7: 0xeca982 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node]
8: 0xecb2b4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
9: 0xecdf21 v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [node]
10: 0xe96236 [node]
11: 0xea8a87 v8::internal::Factory::NewLoadHandler(int) [node]
12: 0xf2828e v8::internal::LoadHandler::LoadFullChain(v8::internal::Isolate*, v8::internal::Handle, v8::internal::Handle, v8::internal::Handle)
[node]
13: 0xf3663d v8::internal::LoadIC::UpdateCaches(v8::internal::LookupIterator*) [node]
14: 0xf36b6c v8::internal::LoadIC::Load(v8::internal::Handle, v8::internal::Handle) [node]
15: 0xf3b4a5 v8::internal::Runtime_LoadIC_Miss(int, v8::internal::Object**, v8::internal::Isolate*) [node]
16: 0x292a09adc01d
Aborted (core dumped)
```

When I omit the plugin, I can bundle things just fine. I also can pipe the bundle through `uglifyjs --mangle` just fine.

I created a repo with an example case here: https://github.com/m90/tinyify-crash

As for Node internals, I am running the following on Ubuntu 16:

```
➜ ~ node -v
v10.9.0
➜ ~ npm -v
6.4.0
```

贡献指南

这个仓库没有索引到贡献指南

调研方向

首先,使用报告中的 Node v10.9.0 配置运行 https://github.com/m90/tinyify-crash 中的示例仓库,然后检查 addHelpers 附近的 node_modules/transform-ast/index.js,并将 tinyify 与正常工作的 uglifyjs 流程进行比较。当 Plotly.js bundle 使用 tinyify 完成,且没有挂起或耗尽 Node 的堆时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript, nodejs
领域
build-system, tooling
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
30/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。