Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

HAML doesn't work with HTTP streaming. #436

Open
juliosantos opened this Issue · 34 comments

29 participants

Júlio Santos Arthur Gunn Christian Peters Timo Rößner Michael Franzkowiak Alexander Logvinov Jason Garber Natalie Weizenbaum Danny Tran Jonas Bruun Nielsen Mikael Henriksson Ryan Alyea Колесников Андрей snothegg Кирилл Tim Olsen Mario Visic Jakob Hilden Todd Tyree Sebastian Korfmann Bert Goethals Aidan Feldman Norman Clarke Bart ten Brinke and others
Júlio Santos

There appears to be an issue with using HTTP streaming with HAML projects in rails. It works perfectly if I use ERB instead.

It doesn't work with placing stream at the top of the controller, or with using render :stream => true in the action.

Arthur Gunn

Would really love to see this.

Christian Peters

+1

This is definitely a show stopper.

Timo Rößner

Any updates on this? This is kind of a critical issue - any way we can assist?

Michael Franzkowiak

+1

This would be awesome.

Alexander Logvinov

+1

Jason Garber

+1

Timo Rößner

@nex3 we need you..:-/

Natalie Weizenbaum
Owner

HTTP streaming is the sort of thing that would require a substantial set of modifications to the core Haml engine. It's only moderately tricky to get it working even in basic cases, but when you factor in things like the whitespace-eating operators it gets much more difficult.

This isn't something I'm opposed to in theory, but it's also not something that's high on my priority list given the difficulty of implementing it.

Mikael Henriksson

+1 what would be required for this to work?

Arthur Gunn

@nex3 would it be easier to support just for ugly mode then?

Ryan Alyea

+1

Natalie Weizenbaum
Owner

@mhenrixon There would need to be some abstraction over the current output buffer that figured out when it was safe to flush the stream, taking into account all possible manipulations that may be done in the Haml code. This would also need to avoid negatively affecting the performance of non-streaming mode, as well as not being too much slower in streaming mode.

@gunn No; the whitespace nuke operators still need to work on user-generated strings, which aren't necessarily controlled by the :ugly flag.

Mikael Henriksson

@nex3 I don't have an issue with switching over to ERB for when I have really large views with a lot of content though. Might as well keep this bugfree and simple and use the right tool (ERB) for the job (when it's needed). Thanks for the explanation.

Колесников Андрей
zak commented

+1

snothegg

+1 , would love to have it

Кирилл

+1

Tim Olsen

+1

Jakob Hilden

+1

Todd Tyree

+1

Bert Goethals

I wonder if there is a way for this to be possible:

  • Use a ERB layout
  • Use haml template when streaming is not needed
  • Use erb template when streaming (allow non-streaming HAML partials inside)

This would allow us to still do streaming when needed, and have HAML for most partials.

Would this be difficult to implement? Would it work if HAML just pretend to be streaming compatible?

EDIT:

  • if both the layout and template are ERB then streaming will happen, even with HAML partials
  • Forcing the usage of streaming with a HAML template in an ERB layout works
Aidan Feldman

@Bertg We use ERB for our layout and main view but HAML for some partials, and streaming works fine up until they are reached. I think it may even send HAML partials as a full chunk but then resume streaming afterwards.

Norman Clarke
Owner

This is on the roadmap for Haml 4.0, which I hope to release by the end of the year.

Bart ten Brinke

I've swapped haml for slim. This does have streaming support and also renders all my templates 6 times as fast (yes 6 times!). Automated converting can be done using the haml2slim gem, but that is a bit wonky atm. You should be able to use the slim gem to render the haml templates without converting, but then you'll have to write some rails magic to glue the two together.

Marc-André Lafortune

Goodbye haml, hello slim.

Norman Clarke
Owner

Just a quick FYI, we've decided to change the 3.2 release's number to 4.0 because it included breaking changes, so this feature will now be on the map for version 5.0. 4.0 will be out tomorrow.

Leighton Wallace

:+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.