# First Pluto notebook launches are slower on Julia 1.9 beta 3

**URL:** <https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429>\
**Category:** Internals & Design\
**Tags:** performance, pluto, ttfx\
**Created:** [January 23, 2023, 8:46pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429 "2023-01-23T20:46:06Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 24, 2023, 5:33pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/41 "2023-01-24T17:33:27Z")

</div>

> [@tim.holy](#):
>
> Gotcha (I’ve not used Pluto in a while). But the solution does seem to be in the post above: the instructor can just ship a Manifest with the same package versions used in the previous assignment and/or master Manifest.

Or ship a system image with the packages you plan to use for the course. You’d have to make the binary on Windows, Mac, and Linux but it’s possible (and possible to do in CI, this would be interesting to test with SciMLDocs). But Pluto cannot make use of system images so that would be the issue if you wanted to use Pluto in the course.

---

<div class="post-metadata">

**Author:** ![t-bltg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/t-bltg/32/25526_2.png) [@t-bltg](https://discourse.julialang.org/u/t-bltg)\
**Post date:** [January 24, 2023, 5:34pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/42 "2023-01-24T17:34:13Z")

</div>

> [@davidanthoff](#):
>
> What are the prospects of precompiling and hosting (including native code) in the cloud, and then having those files downloaded at package install time?

This seems unlikely, given the amount of binary data increase in `.julia/compiled`: e.g. `1.8.5: 900Mb` vs `1.9.0-beta3: 6.5Gb` (storage costs ?).

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [January 24, 2023, 5:34pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/43 "2023-01-24T17:34:28Z")

</div>

btw it’s been years Pluto still doesn’t have a doc, but I thought this would be a good solution for class setting?:

> **[🎁 Package management](https://github.com/fonsp/Pluto.jl/wiki/%F0%9F%8E%81-Package-management#advanced-set-up-an-environment-with-pkgactivate)**
>
> 🎈 Simple reactive notebooks for Julia. Contribute to fonsp/Pluto.jl development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [January 24, 2023, 6:25pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/44 "2023-01-24T18:25:13Z")

</div>

BTW, if anyone wants to help reduce precompile times, this just landed:

> <https://github.com/JuliaLang/Pkg.jl/pull/3334>
>
> Closes #3328 
> 
> Uses the non-fancyprint mode to retain rows. It's still paralle…l, just doesn't show what's currently active, like in CI mode.
> 
> \`\`\`
> julia\> Pkg.precompile(timing=true)
> Precompiling project...
> 968.5 ms ✓ DataValueInterfaces
> 967.9 ms ✓ IteratorInterfaceExtensions
> 993.8 ms ✓ Zlib\_jll
> 1081.8 ms ✓ DataAPI
> 1132.7 ms ✓ WorkerUtilities
> 1173.0 ms ✓ Compat
> 1252.1 ms ✓ OrderedCollections
> 668.9 ms ✓ TableTraits
> 1675.4 ms ✓ TranscodingStreams
> 881.1 ms ✓ PooledArrays
> 670.3 ms ✓ CodecZlib
> 2687.1 ms ✓ SentinelArrays
> 1117.8 ms ✓ Tables
> 1628.8 ms ✓ FilePathsBase
> 5431.9 ms ✓ Preferences
> 519.7 ms ✓ SnoopPrecompile
> 31703.1 ms ✓ Parsers
> 1055.2 ms ✓ InlineStrings
> 997.5 ms ✓ WeakRefStrings
> 29869.7 ms ✓ CSV
> 20 dependencies successfully precompiled in 70 seconds
> \`\`\`
> 
> cc. @anandijain, @ChrisRackauckas

If you open up the CI to grab the artifacts you will find the binaries of the Julia build with that PR with the feature to time precompilation. It would be really nice for someone to run this on a few packages (OrdinaryDiffEq, Plots, Makie, etc.) and see if that can identify some common dependency hotspots.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [January 24, 2023, 6:29pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/45 "2023-01-24T18:29:17Z")

</div>

If I click on the html example of PlotoVista I get an error message:

```julia
ArgumentError: Package TetGen [c5d3f3f7-f850-59f6-8a2e-ffc6dc1317ea] is required but does not seem to be installed:

```

---

<div class="post-metadata">

**Author:** ![fonsp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fonsp/32/222349_2.png) [@fonsp](https://discourse.julialang.org/u/fonsp)\
**Post date:** [January 24, 2023, 8:13pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/46 "2023-01-24T20:13:17Z")

</div>

Sorry for the title! I really spent a lot of time tweaking my post to avoid an inflammatory tone, and to keep it positive-minded and constructive. But I did not think much about the title, and what it looks like to people outside of my bubble. Just updated!

---

<div class="post-metadata">

**Author:** ![fonsp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fonsp/32/222349_2.png) [@fonsp](https://discourse.julialang.org/u/fonsp)\
**Post date:** [January 24, 2023, 8:16pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/47 "2023-01-24T20:16:30Z")

</div>

Pluto precompiles in parallel just like the REPL, we call `Pkg.instantiate()`.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [January 24, 2023, 8:24pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/48 "2023-01-24T20:24:30Z")

</div>

Maybe Pluto have a “package depot” in the first page, where one can install a bunch of packages (with a proper progress bar), and the notebooks launched then searched on that depot for installing before downloading a new version.

That would uncouple a little the “installation” and “using” phases, and with current precompilation the usage of the notebook itself would be nicer.

That could sort of handle that situation of the instructor indicating which packages to install as a Pluto functionality.

---

<div class="post-metadata">

**Author:** ![j-fu](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/j-fu/32/11373_2.png) [@j-fu](https://discourse.julialang.org/u/j-fu)\
**Post date:** [January 24, 2023, 8:25pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/49 "2023-01-24T20:25:54Z")

</div>

Fixed.

---

<div class="post-metadata">

**Author:** ![fonsp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fonsp/32/222349_2.png) [@fonsp](https://discourse.julialang.org/u/fonsp)\
**Post date:** [January 24, 2023, 8:47pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/50 "2023-01-24T20:47:12Z")

</div>

**Thank you Tim!**  
Hearing about the experience in your class is exactly what I needed to hear to relieve my worries. I have recently worked a lot on making the launch process more transparent (like the new [Status tab](https://github.com/fonsp/Pluto.jl/pull/2399)), and we are planning to add automatic messages like your suggestion, when we see that a process is taking quite long.

After spending so much time improving the first launch experience, it was a frustrating setback to see the big increase in launch times, when you expect new Julia versions to always be faster. But on the other hand, this makes my current and future work feel more valuable 🙂

**Thanks everyone else for their suggestions!**  
Some suggested a bespoke setup, optimised for packages used in a course. I have avoided this in the past because of the added complexity, but perhaps Julia 1.9 means that I need to change my stance here, since the benefits are now much larger.

---

<div class="post-metadata">

**Author:** ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)\
**Post date:** [January 24, 2023, 9:01pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/51 "2023-01-24T21:01:37Z")

</div>

Sorry to hear that there were setbacks. If they can’t be easily addressed (I’m hoping they can be), then we should fix it!

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [January 24, 2023, 10:48pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/52 "2023-01-24T22:48:06Z")

</div>

> [@fonsp](#):
>
> **Thanks everyone else for their suggestions!**  
> Some suggested a bespoke setup, optimised for packages used in a course. I have avoided this in the past because of the added complexity, but perhaps Julia 1.9 means that I need to change my stance here, since the benefits are now much larger.

I’m always surprised in these kinds of threads why courses don’t seem to use a manifest where they’ve checked all versions work and then `]pin --all` the versions. That way, there are no accidental updates invalidating any caches and everything should still be ready for use after the first use. Is the option to pin versions just not well known? It’s pretty much required for reproducibility after all.

---

<div class="post-metadata">

**Author:** ![tim.holy](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim.holy/32/52_2.png) [@tim.holy](https://discourse.julialang.org/u/tim.holy)\
**Post date:** [January 24, 2023, 11:21pm UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/53 "2023-01-24T23:21:05Z")

</div>

From what I can tell, `pin --all` (I was not aware of this option) only pins the direct `deps`, not the indirect ones. So I’m not certain it’s sufficiently comprehensive to prevent all upgrades.

---

<div class="post-metadata">

**Author:** ![ianshmean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ianshmean/32/216042_2.png) [@ianshmean](https://discourse.julialang.org/u/ianshmean)\
**Post date:** [January 25, 2023, 3:37am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/54 "2023-01-25T03:37:54Z")

</div>

Good idea, I think. Here’s a PR for allowing `pkg> pin/free --all -m` to pin/free all indirect deps too

> <https://github.com/JuliaLang/Pkg.jl/pull/3336>
>
> The idea came up \[on discourse\](https://discourse.julialang.org/t/first-pluto-no…tebook-launches-are-slower-on-julia-1-9-beta-3/93429/53) to be able to pin/free all the indirect deps too, for distribution of a locked down manifest that is harder to upgrade, for classes etc.
> 
> \`\`\`
> (jl\_MRLBHQ) pkg\> st
> Status \`/tmp/jl\_MRLBHQ/Project.toml\`
> \[336ed68f\] CSV v0.10.9
> 
> (jl\_MRLBHQ) pkg\> pin --all
> Resolving package versions...
> Updating \`/tmp/jl\_MRLBHQ/Project.toml\`
> \[336ed68f\] ~ CSV v0.10.9 ⇒ v0.10.9 ⚲
> Updating \`/tmp/jl\_MRLBHQ/Manifest.toml\`
> \[336ed68f\] ~ CSV v0.10.9 ⇒ v0.10.9 ⚲
> 
> (jl\_MRLBHQ) pkg\> pin --all -m
> Resolving package versions...
> No Changes to \`/tmp/jl\_MRLBHQ/Project.toml\`
> Updating \`/tmp/jl\_MRLBHQ/Manifest.toml\`
> \[944b1d66\] ~ CodecZlib v0.7.1 ⇒ v0.7.1 ⚲
> \[34da2185\] ~ Compat v4.5.0 ⇒ v4.5.0 ⚲
> \[9a962f9c\] ~ DataAPI v1.14.0 ⇒ v1.14.0 ⚲
> \[e2d170a0\] ~ DataValueInterfaces v1.0.0 ⇒ v1.0.0 ⚲
> \[48062228\] ~ FilePathsBase v0.9.20 ⇒ v0.9.20 ⚲
> \[842dd82b\] ~ InlineStrings v1.3.2 ⇒ v1.3.2 ⚲
> \[82899510\] ~ IteratorInterfaceExtensions v1.0.0 ⇒ v1.0.0 ⚲
> \[bac558e1\] ~ OrderedCollections v1.4.1 ⇒ v1.4.1 ⚲
> \[69de0a69\] ~ Parsers v2.5.3 ⇒ v2.5.3 ⚲
> \[2dfb63ee\] ~ PooledArrays v1.4.2 ⇒ v1.4.2 ⚲
> \[21216c6a\] ~ Preferences v1.3.0 ⇒ v1.3.0 ⚲
> \[91c51154\] ~ SentinelArrays v1.3.17 ⇒ v1.3.17 ⚲
> \[66db9d55\] ~ SnoopPrecompile v1.0.3 ⇒ v1.0.3 ⚲
> \[3783bdb8\] ~ TableTraits v1.0.1 ⇒ v1.0.1 ⚲
> \[bd369af6\] ~ Tables v1.10.0 ⇒ v1.10.0 ⚲
> \[3bb67fe8\] ~ TranscodingStreams v0.9.11 ⇒ v0.9.11 ⚲
> \[ea10d353\] ~ WeakRefStrings v1.4.2 ⇒ v1.4.2 ⚲
> \[76eceee3\] ~ WorkerUtilities v1.6.1 ⇒ v1.6.1 ⚲
> \[56f22d72\] ~ Artifacts ⇒ ⚲
> \[2a0f44e3\] ~ Base64 ⇒ ⚲
> \[ade2ca70\] ~ Dates ⇒ ⚲
> \[9fa8497b\] ~ Future ⇒ ⚲
> \[b77e0a4c\] ~ InteractiveUtils ⇒ ⚲
> \[8f399da3\] ~ Libdl ⇒ ⚲
> \[37e2e46d\] ~ LinearAlgebra ⇒ ⚲
> \[56ddb016\] ~ Logging ⇒ ⚲
> \[d6f4376e\] ~ Markdown ⇒ ⚲
> \[a63ad114\] ~ Mmap ⇒ ⚲
> \[de0858da\] ~ Printf ⇒ ⚲
> \[9a3f8284\] ~ Random ⇒ ⚲
> \[ea8e919c\] ~ SHA v0.7.0 ⇒ v0.7.0 ⚲
> \[9e88b42a\] ~ Serialization ⇒ ⚲
> \[fa267f1f\] ~ TOML v1.0.3 ⇒ v1.0.3 ⚲
> \[8dfed614\] ~ Test ⇒ ⚲
> \[cf7118a7\] ~ UUIDs ⇒ ⚲
> \[4ec0a83e\] ~ Unicode ⇒ ⚲
> \[e66e0078\] ~ CompilerSupportLibraries\_jll v1.0.2+0 ⇒ v1.0.2+0 ⚲
> \[4536629a\] ~ OpenBLAS\_jll v0.3.21+0 ⇒ v0.3.21+0 ⚲
> \[83775a58\] ~ Zlib\_jll v1.2.13+0 ⇒ v1.2.13+0 ⚲
> \[8e850b90\] ~ libblastrampoline\_jll v5.2.0+0 ⇒ v5.2.0+0 ⚲
> 
> (jl\_MRLBHQ) pkg\> free --all -m
> Resolving package versions...
> Updating \`/tmp/jl\_MRLBHQ/Project.toml\`
> \[336ed68f\] ~ CSV v0.10.9 ⚲ ⇒ v0.10.9
> Updating \`/tmp/jl\_MRLBHQ/Manifest.toml\`
> \[336ed68f\] ~ CSV v0.10.9 ⚲ ⇒ v0.10.9
> \[944b1d66\] ~ CodecZlib v0.7.1 ⚲ ⇒ v0.7.1
> \[34da2185\] ~ Compat v4.5.0 ⚲ ⇒ v4.5.0
> \[9a962f9c\] ~ DataAPI v1.14.0 ⚲ ⇒ v1.14.0
> \[e2d170a0\] ~ DataValueInterfaces v1.0.0 ⚲ ⇒ v1.0.0
> \[48062228\] ~ FilePathsBase v0.9.20 ⚲ ⇒ v0.9.20
> \[842dd82b\] ~ InlineStrings v1.3.2 ⚲ ⇒ v1.3.2
> \[82899510\] ~ IteratorInterfaceExtensions v1.0.0 ⚲ ⇒ v1.0.0
> \[bac558e1\] ~ OrderedCollections v1.4.1 ⚲ ⇒ v1.4.1
> \[69de0a69\] ~ Parsers v2.5.3 ⚲ ⇒ v2.5.3
> \[2dfb63ee\] ~ PooledArrays v1.4.2 ⚲ ⇒ v1.4.2
> \[21216c6a\] ~ Preferences v1.3.0 ⚲ ⇒ v1.3.0
> \[91c51154\] ~ SentinelArrays v1.3.17 ⚲ ⇒ v1.3.17
> \[66db9d55\] ~ SnoopPrecompile v1.0.3 ⚲ ⇒ v1.0.3
> \[3783bdb8\] ~ TableTraits v1.0.1 ⚲ ⇒ v1.0.1
> \[bd369af6\] ~ Tables v1.10.0 ⚲ ⇒ v1.10.0
> \[3bb67fe8\] ~ TranscodingStreams v0.9.11 ⚲ ⇒ v0.9.11
> \[ea10d353\] ~ WeakRefStrings v1.4.2 ⚲ ⇒ v1.4.2
> \[76eceee3\] ~ WorkerUtilities v1.6.1 ⚲ ⇒ v1.6.1
> \[56f22d72\] ~ Artifacts ⚲ ⇒ 
> \[2a0f44e3\] ~ Base64 ⚲ ⇒ 
> \[ade2ca70\] ~ Dates ⚲ ⇒ 
> \[9fa8497b\] ~ Future ⚲ ⇒ 
> \[b77e0a4c\] ~ InteractiveUtils ⚲ ⇒ 
> \[8f399da3\] ~ Libdl ⚲ ⇒ 
> \[37e2e46d\] ~ LinearAlgebra ⚲ ⇒ 
> \[56ddb016\] ~ Logging ⚲ ⇒ 
> \[d6f4376e\] ~ Markdown ⚲ ⇒ 
> \[a63ad114\] ~ Mmap ⚲ ⇒ 
> \[de0858da\] ~ Printf ⚲ ⇒ 
> \[9a3f8284\] ~ Random ⚲ ⇒ 
> \[ea8e919c\] ~ SHA v0.7.0 ⚲ ⇒ v0.7.0
> \[9e88b42a\] ~ Serialization ⚲ ⇒ 
> \[fa267f1f\] ~ TOML v1.0.3 ⚲ ⇒ v1.0.3
> \[8dfed614\] ~ Test ⚲ ⇒ 
> \[cf7118a7\] ~ UUIDs ⚲ ⇒ 
> \[4ec0a83e\] ~ Unicode ⚲ ⇒ 
> \[e66e0078\] ~ CompilerSupportLibraries\_jll v1.0.2+0 ⚲ ⇒ v1.0.2+0
> \[4536629a\] ~ OpenBLAS\_jll v0.3.21+0 ⚲ ⇒ v0.3.21+0
> \[83775a58\] ~ Zlib\_jll v1.2.13+0 ⚲ ⇒ v1.2.13+0
> \[8e850b90\] ~ libblastrampoline\_jll v5.2.0+0 ⚲ ⇒ v5.2.0+0
> \`\`\`

---

<div class="post-metadata">

**Author:** ![suavesito](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/suavesito/32/34386_2.png) [@suavesito](https://discourse.julialang.org/u/suavesito)\
**Post date:** [January 25, 2023, 3:45am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/55 "2023-01-25T03:45:57Z")

</div>

Would a sh (Linux and macOS) or CMD (Windows) script be enough for you?  
I can offer myself to write it, with comment on how to tweak the default environment.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [January 25, 2023, 3:50am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/56 "2023-01-25T03:50:09Z")

</div>

The juliaup shell script can be downloaded from [https://install.julialang.org/](https://install.julialang.org/) .

I think we may need more utilities to manipulate and copy project environments and their manifests.

I wrote one at one point:

> **[GitHub - mkitti/EnvironmentMigrators.jl: Utility package to help migrate...](https://github.com/mkitti/EnvironmentMigrators.jl)**
>
> Utility package to help migrate environments by copying Project.toml and Manifest.toml - GitHub - mkitti/EnvironmentMigrators.jl: Utility package to help migrate environments by copying Project.tom...

---

<div class="post-metadata">

**Author:** ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)\
**Post date:** [January 25, 2023, 7:14am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/57 "2023-01-25T07:14:54Z")

</div>

> [@tim.holy](#):
>
> From what I can tell, `pin --all` (I was not aware of this option) only pins the direct `deps`, not the indirect ones.

Ah, that explains it then 😅 I always recommend the use of it if you want to enforce some set of versions and don’t want to change them, e.g. for reproducibility of a paper. In a class setting, this can also be used to make sure that students don’t inadvertently update dependencies and use a version that’s not “sanctified”/tested by lecturers and run into issues that shouldn’t happen in the first place. This can be implemented very easily by a `diff` of the `Manifest.toml` of the assignment and the `Manifest.toml` submitted by the student. The details come down to philosophy of teaching though, e.g. if you want to allow students to add new packages or don’t want as strict requirements, a different workflow may be required.

---

<div class="post-metadata">

**Author:** ![johnh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnh/32/3615_2.png) [@johnh](https://discourse.julialang.org/u/johnh)\
**Post date:** [January 25, 2023, 7:40am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/58 "2023-01-25T07:40:43Z")

</div>

Maybe not helpful comment. Why do we assume these first time students must run on their laptops?  
The instructor could use an on premise or cloud server with lots of cores and RAM.  
Start multiple Pluto notebooks.  
Give web based access to the students in the class at class start time.

---

<div class="post-metadata">

**Author:** ![johnh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/johnh/32/3615_2.png) [@johnh](https://discourse.julialang.org/u/johnh)\
**Post date:** [January 25, 2023, 7:42am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/59 "2023-01-25T07:42:46Z")

</div>

As an aside, the ideas to publish Time to First Pluto benchmarks are assuming that the same hardware is available over several years.  
I will venture to say that the change from spinning drives to solid state probably has had a huge effect on compilation time for many languages.  
Also caches in the newest generation of CPUs are getting larger.

---

<div class="post-metadata">

**Author:** ![davidanthoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/davidanthoff/32/223493_2.png) [@davidanthoff](https://discourse.julialang.org/u/davidanthoff)\
**Post date:** [January 26, 2023, 12:36am UTC](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429/60 "2023-01-26T00:36:52Z")

</div>

> [@ChrisRackauckas](#):
>
> > [@davidanthoff](#):
> >
> > What are the prospects of precompiling and hosting (including native code) in the cloud, and then having those files downloaded at package install time? I didn’t follow the details of the design, so not sure whether these native caches are per project (i.e. Manifest.toml) or per package. If precompile files were cached in the cloud, that could solve this problem, at least in the medium term?
> 
> Invalidations make it so you’d have to potentially consider every combination of other packages in the system. Unless there’s some function freezing functionality, that’s not possible.

I don’t fully understand that 🙂 Here is what I tried:

- activated a new project, added `DataFrames` to it. That generated one `ji` and one `dll` file in `.julia/compiled/v1.9/DataFrames`
- then activated a new project, added `DataFrames` and `CSV` to it. This did _not_ trigger creation of a new `ji` or `dll` file in `.julia/compiled/v1.9/DataFrames`, as far as I can tell in this new project it is just using the same `ji` and `dll` file that was created in the previous project.

So to me this looks like the `ji` and `dll` files are _not_ created per package/project combo, but rather just per package version, and if that package version is used in multiple projects then it is reused. If that is so, doesn’t that suggest that the content of this `ji` `dll` combo is not dependent on what other packages there are in the project whos precompile created these files? And if that is so, couldn’t we just store that exact version of `ji`/`dll` file in the cloud?

I’m probably missing something right now, but if there is only one precompile version stored on my system per package version, then I don’t understand why that can’t be cached somewhere other than my system.

[Previous page](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429.md?page=2)

[Next page](https://discourse.julialang.org/t/first-pluto-notebook-launches-are-slower-on-julia-1-9-beta-3/93429.md?page=4)
