Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimize Symbol Propagation (propagateSymbolsUp) #9337

Merged
merged 15 commits into from
Nov 27, 2023

Conversation

gorakong
Copy link
Member

↪️ Pull Request

This PR includes a post-order implementation of dfsFast (an iterative DFS), and is used in propagateSymbolsUp.

Note: skipChildren() is not included in postOrderDfsFast since it doesn't make sense to skip children in a traversal where we visit children before its parents.

These changes result in ~2% performance increase in symbol propagation.

@parcel-benchmark
Copy link

parcel-benchmark commented Oct 23, 2023

Benchmark Results

Kitchen Sink ✅

Timings

Description Time Difference
Cold 2.08s +32.00ms
Cached 391.00ms +71.00ms ⚠️

Cold Bundles

Bundle Size Difference Time Difference
dist/legacy/parcel.7cdb0fad.webp 102.94kb +0.00b 388.00ms +24.00ms ⚠️
dist/legacy/index.ff03421b.js 1.48kb +0.00b 566.00ms +35.00ms ⚠️
dist/legacy/index.e9bb1616.js 1.06kb +0.00b 565.00ms +34.00ms ⚠️
dist/modern/index.4a29d309.js 921.00b +0.00b 565.00ms +35.00ms ⚠️
dist/legacy/index.html 826.00b +0.00b 597.00ms +32.00ms ⚠️
dist/modern/index.html 749.00b +0.00b 596.00ms +32.00ms ⚠️
dist/legacy/index.b8ae99ba.css 94.00b +0.00b 401.00ms +27.00ms ⚠️
dist/modern/index.31cedca9.css 94.00b +0.00b 400.00ms +26.00ms ⚠️

Cached Bundles

No bundle changes detected.

React HackerNews ✅

Timings

Description Time Difference
Cold 5.22s -169.00ms
Cached 579.00ms +56.00ms ⚠️

Cold Bundles

Bundle Size Difference Time Difference
dist/index.js 459.11kb +0.00b 1.20s -216.00ms 🚀
dist/PermalinkedComment.e9dc4a75.js 3.92kb +0.00b 445.00ms -59.00ms 🚀
dist/UserProfile.8945a243.js 1.38kb +0.00b 445.00ms -59.00ms 🚀
dist/NotFound.8b44a81d.js 269.00b +0.00b 445.00ms -59.00ms 🚀
dist/logo.8dd07848.png 244.00b +0.00b 306.00ms -26.00ms 🚀

Cached Bundles

No bundle changes detected.

AtlasKit Editor ✅

Timings

Description Time Difference
Cold 44.74s -1.23s
Cached 2.77s -84.00ms

Cold Bundles

Bundle Size Difference Time Difference
dist/index.7ba584cd.js 3.78mb +0.00b 20.63s -1.78s 🚀
dist/pdfRenderer.ba28cccc.js 1.11mb +0.00b 15.94s -1.42s 🚀
dist/refractor.3e0cc31b.js 598.96kb +0.00b 14.53s -1.22s 🚀
dist/media-viewer.e993d1a1.js 536.13kb +0.00b 14.53s -1.22s 🚀
dist/popup.a77286c1.js 321.45kb +0.00b 14.53s -1.22s 🚀
dist/ConfigPanelFieldsLoader.182d39bc.js 303.43kb +0.00b 10.31s -3.78s 🚀
dist/EmojiPickerComponent.1e4c5464.js 188.61kb +0.00b 14.53s -1.22s 🚀
dist/card.d06de810.js 138.91kb +0.00b 10.31s -3.78s 🚀
dist/ConfigPanelFieldsLoader.3b50a158.js 82.73kb +0.00b 14.53s -1.22s 🚀
dist/mobile-upload.63ab2b72.js 66.34kb +0.00b 6.54s -413.00ms 🚀
dist/esm.34897092.js 62.95kb +0.00b 14.53s -1.25s 🚀
dist/ElementBrowser.e8f01080.js 61.94kb +0.00b 10.31s -3.78s 🚀
dist/archive.c374f622.js 59.90kb +0.00b 14.53s -1.22s 🚀
dist/esm.271a6e34.js 59.30kb +0.00b 10.31s -3.78s 🚀
dist/component-lazy.51d1dec9.js 58.94kb +0.00b 7.67s -424.00ms 🚀
dist/component.ea8ea9a2.js 57.16kb +0.00b 6.54s -406.00ms 🚀
dist/esm.cb0d3833.js 39.11kb +0.00b 14.53s -1.25s 🚀
dist/Modal.fa93d531.js 27.83kb +0.00b 6.54s -408.00ms 🚀
dist/smartMediaEditor.efa59853.js 21.68kb +0.00b 14.53s -1.25s 🚀
dist/esm.fedda0d0.js 20.43kb +0.00b 14.53s -1.25s 🚀
dist/component.f7f8c338.js 18.68kb +0.00b 6.54s -409.00ms 🚀
dist/js.e1035d4d.js 17.15kb +0.00b 6.54s -397.00ms 🚀
dist/ConfigPanelFieldsLoader.3384e28b.js 15.74kb +0.00b 10.31s -3.78s 🚀
dist/ui.8c117104.js 14.48kb +0.00b 10.31s -3.78s 🚀
dist/ConfigPanelFieldsLoader.aa7dd375.js 13.63kb +0.00b 10.31s -3.78s 🚀
dist/dropzone.464b3150.js 13.40kb +0.00b 14.53s -1.25s 🚀
dist/pdfRenderer.a0700f46.js 11.90kb +0.00b 10.31s -4.73s 🚀
dist/dropzone.1c15cdc1.js 11.48kb +0.00b 14.53s -1.25s 🚀
dist/Toolbar.4d256e97.js 9.36kb +0.00b 14.53s -1.25s 🚀
dist/clipboard.400013a2.js 7.92kb +0.00b 14.53s -1.24s 🚀
dist/mobile-upload.3747b689.js 7.79kb +0.00b 6.54s -390.00ms 🚀
dist/mobile-upload.3baad8e4.js 7.79kb +0.00b 10.31s -3.78s 🚀
dist/mobile-upload.7a892a37.js 7.79kb +0.00b 10.31s -3.78s 🚀
dist/mobile-upload.2102debb.js 7.79kb +0.00b 14.53s -1.25s 🚀
dist/index.runtime.144e916b.js 7.29kb +0.00b 14.57s -1.22s 🚀
dist/browser.0009c8b4.js 7.19kb +0.00b 14.53s -1.26s 🚀
dist/index.b16227d6.css 4.08kb +0.00b 14.59s -1.25s 🚀
dist/Modal.850345b4.js 3.86kb +0.00b 6.54s -408.00ms 🚀
dist/component.360dba95.js 3.20kb +0.00b 6.54s -409.00ms 🚀
dist/media-viewer-analytics-error-boundary.60bdaa4c.js 3.18kb +0.00b 14.53s -1.22s 🚀
dist/media-picker-analytics-error-boundary.c493f011.js 3.18kb +0.00b 14.53s -1.26s 🚀
dist/media-card-analytics-error-boundary.74e0c7f9.js 3.18kb +0.00b 14.53s -1.22s 🚀
dist/png-chunks-extract.92497b2d.js 3.06kb +0.00b 6.54s -389.00ms 🚀
dist/ru.0cf3f40e.js 2.81kb +0.00b 10.31s -573.00ms 🚀
dist/uk.282f23b1.js 2.76kb +0.00b 10.31s -573.00ms 🚀
dist/codeViewerRenderer.51140ec8.js 2.61kb +0.00b 10.31s -4.73s 🚀
dist/th.137e1013.js 2.60kb +0.00b 10.31s -572.00ms 🚀
dist/vi.b46097db.js 2.09kb +0.00b 10.31s -572.00ms 🚀
dist/tr.c85d90a9.js 2.03kb +0.00b 10.31s -573.00ms 🚀
dist/sv.1c06c95c.js 1.98kb +0.00b 10.31s -573.00ms 🚀
dist/date.139a08b0.js 1.95kb +0.00b 6.88s -514.00ms 🚀
dist/images.774ef3be.js 1.90kb +0.00b 6.88s -514.00ms 🚀
dist/zh_TW.b7c55aa6.js 1.86kb +0.00b 10.31s -3.78s 🚀
dist/zh.b01fe721.js 1.84kb +0.00b 10.31s -3.78s 🚀
dist/status.20808f9b.js 1.67kb +0.00b 6.88s -514.00ms 🚀
dist/code.3ce450f8.js 1.56kb +0.00b 6.88s -514.00ms 🚀
dist/workerHasher.4f6584da.js 1.56kb +0.00b 6.54s -390.00ms 🚀
dist/workerHasher.540c9790.js 1.56kb +0.00b 10.31s -3.78s 🚀
dist/workerHasher.c840c607.js 1.56kb +0.00b 10.31s -3.78s 🚀
dist/workerHasher.730f3766.js 1.56kb +0.00b 14.53s -1.25s 🚀
dist/workerHasher.9b1fcdbf.js 1.56kb +0.00b 14.53s -1.25s 🚀
dist/workerHasher.02b63a21.js 1.56kb +0.00b 14.53s -1.25s 🚀
dist/list-number.fdc97a50.js 1.47kb +0.00b 6.88s -514.00ms 🚀
dist/16.4998f52b.js 1.35kb +0.00b 6.54s -408.00ms 🚀
dist/heading3.73972e33.js 1.35kb +0.00b 6.88s -513.00ms 🚀
dist/16.330880f6.js 1.29kb +0.00b 6.54s -408.00ms 🚀
dist/link.71e06c5e.js 1.28kb +0.00b 6.88s -514.00ms 🚀
dist/emoji.8f9f45dc.js 1.25kb +0.00b 6.88s -513.00ms 🚀
dist/heading2.c27d912d.js 1.17kb +0.00b 6.88s -513.00ms 🚀
dist/heading4.be08fc9e.js 1.12kb +0.00b 7.67s -422.00ms 🚀
dist/mention.f4723418.js 1.09kb +0.00b 6.88s -514.00ms 🚀
dist/layout.b5e3a7ef.js 1.05kb +0.00b 6.88s -514.00ms 🚀
dist/divider.7bb33712.js 1.04kb +0.00b 6.88s -514.00ms 🚀
dist/action.c407ac14.js 1.02kb +0.00b 6.88s -515.00ms 🚀
dist/heading1.d7caae19.js 1.02kb +0.00b 6.88s -513.00ms 🚀
dist/16.371e251f.js 1.00kb +0.00b 6.54s -409.00ms 🚀
dist/list.bd698aa0.js 1011.00b +0.00b 6.88s -514.00ms 🚀
dist/quote.d6bda47a.js 1011.00b +0.00b 6.88s -514.00ms 🚀
dist/decision.a17a0d00.js 992.00b +0.00b 6.88s -514.00ms 🚀
dist/16.8adad466.js 980.00b +0.00b 6.54s -407.00ms 🚀
dist/16.71432140.js 980.00b +0.00b 6.54s -409.00ms 🚀
dist/panel-warning.772e8569.js 968.00b +0.00b 6.88s -514.00ms 🚀
dist/16.e5f05248.js 960.00b +0.00b 6.54s -408.00ms 🚀
dist/16.549c63e3.js 955.00b +0.00b 6.88s -516.00ms 🚀
dist/table.e0e68580.js 946.00b +0.00b 6.88s -514.00ms 🚀
dist/16.79864de1.js 920.00b +0.00b 6.54s -409.00ms 🚀
dist/panel.45c00b08.js 887.00b +0.00b 6.88s -514.00ms 🚀
dist/panel-error.bfda44fb.js 864.00b +0.00b 6.88s -513.00ms 🚀
dist/16.7d7d7930.js 862.00b +0.00b 6.54s -408.00ms 🚀
dist/16.4556c00f.js 834.00b +0.00b 6.54s -408.00ms 🚀
dist/16.a44bb474.js 827.00b +0.00b 6.54s -407.00ms 🚀
dist/16.bf9fb66d.js 821.00b +0.00b 6.88s -516.00ms 🚀
dist/panel-success.4afcba7a.js 805.00b +0.00b 6.88s -513.00ms 🚀
dist/panel-note.58ef2b52.js 795.00b +0.00b 6.88s -513.00ms 🚀
dist/16.dffb58fe.js 782.00b +0.00b 6.54s -408.00ms 🚀
dist/16.0118b1f8.js 776.00b +0.00b 6.54s -409.00ms 🚀
dist/16.9a311f76.js 776.00b +0.00b 6.54s -409.00ms 🚀
dist/16.edf70d70.js 775.00b +0.00b 6.54s -409.00ms 🚀
dist/16.4af9f37f.js 774.00b +0.00b 6.54s -407.00ms 🚀
dist/16.aa70dcce.js 773.00b +0.00b 6.54s -406.00ms 🚀
dist/16.c715b7e1.js 746.00b +0.00b 6.88s -517.00ms 🚀
dist/16.54ffa2b2.js 725.00b +0.00b 6.54s -407.00ms 🚀
dist/16.d7c3881b.js 697.00b +0.00b 6.54s -407.00ms 🚀
dist/sk.4be9c93f.js 656.00b +0.00b 10.31s -574.00ms 🚀
dist/pt_PT.e211e609.js 635.00b +0.00b 7.77s -2.91s 🚀
dist/simpleHasher.09765db3.js 589.00b +0.00b 6.54s -390.00ms 🚀
dist/simpleHasher.c14e20b4.js 589.00b +0.00b 10.31s -3.78s 🚀
dist/simpleHasher.23db7a52.js 589.00b +0.00b 10.31s -3.78s 🚀
dist/simpleHasher.eefc98b4.js 589.00b +0.00b 14.53s -1.25s 🚀
dist/simpleHasher.47b9c809.js 589.00b +0.00b 14.53s -1.25s 🚀
dist/simpleHasher.cadc19c6.js 589.00b +0.00b 14.53s -1.25s 🚀
dist/ro.8d5b380a.js 482.00b +0.00b 7.78s -2.90s 🚀
dist/index.html 248.00b +0.00b 14.63s -1.25s 🚀

Cached Bundles

Bundle Size Difference Time Difference
dist/index.7ba584cd.js 3.78mb +0.00b 21.85s -1.36s 🚀
dist/pdfRenderer.ba28cccc.js 1.11mb +0.00b 16.45s -1.66s 🚀
dist/editorView.a0126b37.js 619.22kb +0.00b 18.04s -1.99s 🚀
dist/refractor.3e0cc31b.js 598.96kb +0.00b 15.24s -1.82s 🚀
dist/media-viewer.e993d1a1.js 536.13kb +0.00b 15.24s +3.09s ⚠️
dist/popup.a77286c1.js 321.45kb +0.00b 15.24s -1.82s 🚀
dist/ConfigPanelFieldsLoader.182d39bc.js 303.43kb +0.00b 10.70s -1.46s 🚀
dist/EmojiPickerComponent.1e4c5464.js 188.61kb +0.00b 15.19s -1.81s 🚀
dist/card.d06de810.js 138.91kb +0.00b 10.68s -1.47s 🚀
dist/ConfigPanelFieldsLoader.3b50a158.js 82.73kb +0.00b 15.19s -1.81s 🚀
dist/esm.34897092.js 62.95kb +0.00b 15.24s -1.81s 🚀
dist/ElementBrowser.e8f01080.js 61.94kb +0.00b 10.69s -1.47s 🚀
dist/archive.c374f622.js 59.90kb +0.00b 15.24s -1.82s 🚀
dist/esm.271a6e34.js 59.30kb +0.00b 10.70s -1.46s 🚀
dist/component-lazy.51d1dec9.js 58.94kb +0.00b 8.00s -596.00ms 🚀
dist/DatePicker.042aeb21.js 47.46kb +0.00b 8.00s -666.00ms 🚀
dist/esm.cb0d3833.js 39.11kb +0.00b 15.24s -1.81s 🚀
dist/DatePicker.e51a79b1.js 24.96kb +0.00b 8.00s -667.00ms 🚀
dist/smartMediaEditor.efa59853.js 21.68kb +0.00b 15.24s -1.81s 🚀
dist/esm.fedda0d0.js 20.43kb +0.00b 15.24s -1.81s 🚀
dist/ConfigPanelFieldsLoader.3384e28b.js 15.74kb +0.00b 10.69s -1.47s 🚀
dist/ui.8c117104.js 14.48kb +0.00b 10.69s -1.47s 🚀
dist/ConfigPanelFieldsLoader.aa7dd375.js 13.63kb +0.00b 10.69s -1.47s 🚀
dist/dropzone.464b3150.js 13.40kb +0.00b 15.24s -1.81s 🚀
dist/pdfRenderer.a0700f46.js 11.90kb +0.00b 14.92s +2.77s ⚠️
dist/dropzone.1c15cdc1.js 11.48kb +0.00b 15.24s -1.81s 🚀
dist/Toolbar.4d256e97.js 9.36kb +0.00b 15.25s -1.80s 🚀
dist/clipboard.400013a2.js 7.92kb +0.00b 15.24s -1.82s 🚀
dist/mobile-upload.3baad8e4.js 7.79kb +0.00b 10.70s -1.46s 🚀
dist/mobile-upload.7a892a37.js 7.79kb +0.00b 10.70s -1.46s 🚀
dist/mobile-upload.2102debb.js 7.79kb +0.00b 15.24s -1.81s 🚀
dist/index.runtime.144e916b.js 7.29kb +0.00b 15.26s -1.80s 🚀
dist/browser.0009c8b4.js 7.19kb +0.00b 15.24s -1.81s 🚀
dist/index.b16227d6.css 4.08kb +0.00b 15.26s -1.86s 🚀
dist/media-viewer-analytics-error-boundary.60bdaa4c.js 3.18kb +0.00b 15.24s -1.82s 🚀
dist/media-picker-analytics-error-boundary.c493f011.js 3.18kb +0.00b 15.24s -1.81s 🚀
dist/media-card-analytics-error-boundary.74e0c7f9.js 3.18kb +0.00b 15.24s -1.82s 🚀
dist/ru.0cf3f40e.js 2.81kb +0.00b 10.68s -1.47s 🚀
dist/uk.282f23b1.js 2.76kb +0.00b 10.68s -1.47s 🚀
dist/codeViewerRenderer.51140ec8.js 2.61kb +0.00b 15.24s +3.09s ⚠️
dist/th.137e1013.js 2.60kb +0.00b 10.68s -1.47s 🚀
dist/ResourcedEmojiComponent.9a253c26.js 2.47kb +0.00b 8.00s -667.00ms 🚀
dist/pl.bce591be.js 2.25kb +0.00b 8.00s -666.00ms 🚀
dist/cs.bf42283b.js 2.23kb +0.00b 8.00s -665.00ms 🚀
dist/de.90d5c4fa.js 2.17kb +0.00b 8.00s -666.00ms 🚀
dist/fr.ff5d335f.js 2.13kb +0.00b 8.00s -668.00ms 🚀
dist/es.80bf0476.js 2.12kb +0.00b 8.00s -667.00ms 🚀
dist/hu.223c2cde.js 2.10kb +0.00b 8.00s -666.00ms 🚀
dist/fi.98bb8fa8.js 2.09kb +0.00b 8.00s -666.00ms 🚀
dist/ja.7d4156df.js 2.09kb +0.00b 8.00s -668.00ms 🚀
dist/vi.b46097db.js 2.09kb +0.00b 10.68s -1.47s 🚀
dist/pt_BR.b9e37d37.js 2.06kb +0.00b 10.52s +1.85s ⚠️
dist/tr.c85d90a9.js 2.03kb +0.00b 10.68s -1.47s 🚀
dist/ko.9c6bf469.js 1.98kb +0.00b 8.00s -668.00ms 🚀
dist/sv.1c06c95c.js 1.98kb +0.00b 10.68s -1.47s 🚀
dist/it.04edb54a.js 1.97kb +0.00b 8.00s -668.00ms 🚀
dist/nb.9bd6db78.js 1.96kb +0.00b 8.00s -667.00ms 🚀
dist/da.d2d8303e.js 1.95kb +0.00b 8.00s -665.00ms 🚀
dist/nl.c4d12122.js 1.94kb +0.00b 8.00s -667.00ms 🚀
dist/zh_TW.b7c55aa6.js 1.86kb +0.00b 10.68s -1.47s 🚀
dist/zh.b01fe721.js 1.84kb +0.00b 10.68s -1.47s 🚀
dist/feedback.4b745631.js 1.76kb +0.00b 8.00s -666.00ms 🚀
dist/workerHasher.540c9790.js 1.56kb +0.00b 10.69s -1.47s 🚀
dist/workerHasher.c840c607.js 1.56kb +0.00b 10.70s -1.46s 🚀
dist/workerHasher.730f3766.js 1.56kb +0.00b 15.24s -1.81s 🚀
dist/workerHasher.9b1fcdbf.js 1.56kb +0.00b 15.24s -1.81s 🚀
dist/workerHasher.02b63a21.js 1.56kb +0.00b 15.24s -1.81s 🚀
dist/heading6.e6e03f52.js 1.36kb +0.00b 8.00s -666.00ms 🚀
dist/heading5.d2f94d9d.js 1.23kb +0.00b 8.00s -666.00ms 🚀
dist/expand.c983e90a.js 1.18kb +0.00b 8.00s -667.00ms 🚀
dist/sk.4be9c93f.js 656.00b +0.00b 10.68s -1.47s 🚀
dist/pt_PT.e211e609.js 635.00b +0.00b 8.00s -667.00ms 🚀
dist/et.88ef7cb4.js 633.00b +0.00b 8.00s -667.00ms 🚀
dist/simpleHasher.c14e20b4.js 589.00b +0.00b 10.69s -1.47s 🚀
dist/simpleHasher.23db7a52.js 589.00b +0.00b 10.70s -1.46s 🚀
dist/simpleHasher.eefc98b4.js 589.00b +0.00b 15.24s -1.81s 🚀
dist/simpleHasher.47b9c809.js 589.00b +0.00b 15.24s -1.81s 🚀
dist/simpleHasher.cadc19c6.js 589.00b +0.00b 15.24s -1.81s 🚀
dist/is.5f045a22.js 495.00b +0.00b 8.00s -666.00ms 🚀
dist/ro.8d5b380a.js 482.00b +0.00b 10.68s -870.00ms 🚀
dist/en_GB.4c40e6c6.js 472.00b +0.00b 8.00s -667.00ms 🚀
dist/en.e1d21f6d.js 469.00b +0.00b 8.00s -666.00ms 🚀
dist/index.html 248.00b +0.00b 15.30s +4.12s ⚠️

Three.js ✅

Timings

Description Time Difference
Cold 4.18s -54.00ms
Cached 401.00ms -20.00ms

Cold Bundles

No bundle changes detected.

Cached Bundles

Bundle Size Difference Time Difference
dist/Three.js 572.25kb +0.00b 1.36s -217.00ms 🚀

Click here to view a detailed benchmark overview.

@mischnic
Copy link
Member

mischnic commented Nov 6, 2023

Symbol propagation doesn't need the context part of the visitor, you could try to remove that (and have queue just be an array of NodeIds). Might be faster

@mischnic mischnic merged commit dc3d92b into v2 Nov 27, 2023
14 of 16 checks passed
@mischnic mischnic deleted the gkong/optimize-symbol-propagation branch November 27, 2023 18:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants