Applying tinyify to plotly.js crashes Node
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 30/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- javascript, nodejs
- Domain
- build-system, tooling
Research direction
Start by running the example repository at https://github.com/m90/tinyify-crash with the reported Node v10.9.0 setup, then inspect node_modules/transform-ast/index.js around addHelpers and compare tinyify with the working uglifyjs pipeline. Done means the Plotly.js bundle completes with tinyify without hanging or exhausting Node's heap.
Written by the indexing model from the issue text.
Description
I'm trying to optimize a bundle that contains the (rather hefty) 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 <JSObject>
1: addHelpers [0x1401217d54e9] [/home/frederik/projects/tinyify-crash/node_modules/transform-ast/index.js:~87] [pc=0x292a0a5a7f5a](this=0x2f3e1e21aa09 <JSGlobal Object>,node=0x071fba8d11c1 <Node map $
0x213b1d12dc9>)
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::Map>, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Smi>)
[node]
13: 0xf3663d v8::internal::LoadIC::UpdateCaches(v8::internal::LookupIterator*) [node]
14: 0xf36b6c v8::internal::LoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>) [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
- Dominant language
- JavaScript
- Stars
- 405
- Forks
- 14
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from browserify/tinyify
-
Difficulty 4/5 3-5 days Newbie friendliness 25/100
browserify/tinyify#57 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 25/100
browserify/tinyify#56 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 35/100
browserify/tinyify#45 · 1 comment · 2 reactions ·
-
Shakeify issue? Open
Difficulty 4/5 3-5 days Newbie friendliness 25/100
browserify/tinyify#26 · 1 comment ·
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 35/100
browserify/tinyify#25 · 9 comments ·
All issues in browserify/tinyify
Similar issues
-
ai-observability bug team/ai-observability
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
AllTheMods/ATM-10-L#19 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
SignalK/n2k-signalk#345 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
Difficulty 1/5 1-3 hours Newbie friendliness 88/100
JuliaPluto/PlutoPlotly.jl#72 ·