trypurescript icon indicating copy to clipboard operation
trypurescript copied to clipboard

Enable faster development loop

Open milesfrain opened this issue 5 years ago • 15 comments

The current development workflow with spago bundle-app adds a 15-second delay (on my system) between making changes and seeing the results in your browser.

There are other strategies to achieve near-instant page refreshes with saved changes, such as with webpack in #187 and #192.

milesfrain avatar Aug 22 '20 19:08 milesfrain

A few things to consider:

  • Most of bundle time is going to be spent in DCE. There should be a compiler option to skip DCE, which would make it much faster.
  • Is it 15-seconds on master, or 15-seconds against Halogen (which transitively pulls in most of the universe)? Do we need to prioritize dependency sizes and final bundle size?
  • I think that trypurs should always be buildable and shippable with stock-tooling, but I don't think it's necessarily bad that there's an alternative workflow for development if you want it.

natefaubion avatar Aug 23 '20 20:08 natefaubion

Could someone point me to the compiler option to skip DCE? I'm not seeing it under purs compile --help or purs bundle --help.

This is 15 seconds on master (technically on #198, but that's close to equivalent and halogen-free).

milesfrain avatar Aug 23 '20 20:08 milesfrain

Could someone point me to the compiler option to skip DCE? I'm not seeing it under purs compile --help or purs bundle --help.

Maybe I'm remembering a bygone era, or maybe I'm remembering a pulp option. If it's not in the help for purs bundle then it does not exist.

natefaubion avatar Aug 23 '20 20:08 natefaubion

I think you might be thinking of a pulp option; purs bundle doesn't have an option to run without DCE, but pulp does give you the ability to make a bundle without performing DCE via browserify, by running pulp browserify without the --optimise flag.

hdgarrood avatar Aug 23 '20 20:08 hdgarrood

I think that trypurs should always be buildable and shippable with stock-tooling, but I don't think it's necessarily bad that there's an alternative workflow for development if you want it.

I agree. I think it's acceptable to use Webpack for the development workflow -- as far as bundlers go it's damn near standard and it's not going anywhere. We can still build and ship via stock tooling.

thomashoneyman avatar Aug 23 '20 22:08 thomashoneyman

Webpack is damn near standard, but at the same time it's the source of a huge amount of grief. I'm still not sure how I feel about this.

hdgarrood avatar Aug 23 '20 22:08 hdgarrood

What about adding that option for purs bundle to skip DCE? That would be useful for everyone else developing an app in a similar way who has this problem.

hdgarrood avatar Aug 23 '20 22:08 hdgarrood

@milesfrain Do you have an opinion? Would that enable the faster development loop you're envisioning?

thomashoneyman avatar Aug 23 '20 23:08 thomashoneyman

The options:

  1. ES Modules with Snowpack.
    • My favorite.
    • Least amount of throw-away work.
    • Farthest-away option, but I can wait.
  2. Skip DCE with purs bundle
    • Unknown how much faster this will be.
    • Requires additional tinkering for automatic refresh and incorponating non-purs changes.
    • Not available today. Requires compiler changes and another release.
    • Doesn't seem like there's much demand for this.
  3. Webpack
    • Available now.
    • I don't like webpack either, and it caused me a lot of grief with this project too.
    • Dues are already paid for setting it up in this project though, so it should be smooth sailing to use.

milesfrain avatar Aug 23 '20 23:08 milesfrain

I would really love ES modules with no bundler at all, although we can discuss the merits of that approach versus ES modules with Snowpack when that's closer to being a reality. I suppose that since we do have a clear path to getting rid of Webpack (i.e. wait until ES modules are a thing) and that the initial work has already been done, using Webpack in the meantime should probably be fine.

hdgarrood avatar Aug 24 '20 11:08 hdgarrood

That sounds like a good plan: use Webpack for now, with an issue and the understanding that we will remove it when the compiler supports ES Modules.

thomashoneyman avatar Aug 24 '20 16:08 thomashoneyman

Is this still an issue? Running npm run serve:dev starts a web browser in ~6 seconds.

JordanMartinez avatar Jun 18 '22 11:06 JordanMartinez

I think Miles was looking for something more like hot module replacement while doing development, supported by webpack, vite, etc.

thomashoneyman avatar Jun 18 '22 14:06 thomashoneyman

Now that ES modules have shipped, maybe it’d be worth looking into snowpack?

hdgarrood avatar Jun 18 '22 16:06 hdgarrood

Snowpack is no longer maintained and they recommend Vite as an alternative

thomashoneyman avatar Jun 18 '22 19:06 thomashoneyman