Problem/Motivation
Since Drupal 8.1, the following BigPipe changes were committed:
- Some very minor issues:
- A minor performance improvement: #2723705: Reduce the 200ms BigPipe placeholder interval to 50ms and make it overridable
- A minor robustness improvement: #2678662: Ensure BigPipe does not break when HTML document contains CDATA sections or inline scripts matching certain patterns
- A single normal bug:
- An edge case which was a mere oversight, trivial fix: #2698811: BigPipe unnecessarily renders and sends multiple-occurrence placeholders multiple times when using JS — can cause JS errors
- Two major bugs:
- A bug in the render system that then also piggybacked into BigPipe's rendering: #2702609: Disable placeholdering (and BigPipe) on unsafe requests to help find forms as fast as possible (to allow EnforcedResponses to work)
- Another bug in the render system that then also piggybacked into BigPipe's rendering: #2712935: Messages are not rendered last, meaning those messages set within placeholders only appear on the next request
And we only have a single remaining open bug: #2738685: BigPipe leaves wrapper <div>s in place, because AJAX system leaves them — this can cause some CSS to break, which is actually a duplicate of #736066: ajax.js insert command sometimes wraps content in a div, potentially producing invalid HTML and other bugs, which has been open for >6 years, and is probably the oldest bug in the AJAX system.
I think this is a clear signal of stability.
Proposed resolution
- Mark BigPipe as having beta-level stability in 8.2's beta + RC phases.
- Consider marking BigPipe as non-experimental before 8.2.0.
There is only one significant feature that is IMO a must-have before making BigPipe stable: #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits.
Remaining tasks
TBD
User interface changes
None.
API changes
None.
Data model changes
None.
Comments
Comment #2
wim leersManual HTML writing fail.
Comment #3
wim leersComment #4
wim leersAlso note that it'd be splendid if d.o DB admins could query https://www.drupal.org/project/usage/drupal's DB tables, because I understand that in there they can see which exact core modules are enabled. i.e. if only 100 D8 sites ever used BigPipe, then we shouldn't do this. But if 2,000 or 5,000 sites use BigPipe, then that's a strong signal of stability.
Comment #5
xjm+1 from me!
One question though. If Big Pipe is considered beta, RC, or stable, that would probably mean adding #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits in 8.3.x rather than 8.2.1 or something. Do you think that makes sense?
Comment #6
xjm(Unless it's ready during 8.2.x beta i.e. August, in which case I'd be fine with marking the whole module beta at that point once that feature is added.)
Comment #7
wim leersI will work as hard as I can to have it RTBC by next Friday at the latest (August 5, 2016).
I think this feature is very important, because it makes BigPipe valuable for *every* site, rather than only those with sessions (authenticated users, or anonymous users that have sessions such as in the case of online shops).
Comment #8
fabianx commented+1 to beta stability during beta and potentially stable for 8.2.0
+1 to getting #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits in before beta deadline (I can also help this week if needed, but road is pretty straightforward now)
Comment #10
webchickI may be mistaken, but I believe if all the parts were to come together prior to rc1 (Sep. 7, so really more like Sep. 5), this could still happen in 8.2. This isn't adding new functionality, it's simply stabilizing the existing functionality and asking for a stability change in response.
Comment #11
wim leersSince August 1, not a single new bug report. Not against https://drupal.org/project/issues/drupal?component=big_pipe.module, nor against https://www.drupal.org/project/big_pipe. So that is further support for this gaining beta-level stability: as far as we know, it's bug free (famous last words, I know).
However, it'd be great to land #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits before marking it beta-level stable. It's a pure feature addition, but it'd make BigPipe truly feature-complete. The patch has been ready for 26 days now.
Comment #12
catch#2792817: BigPipe decorates html_response.attachments_processor, but uses an inner name based on the decorated service, which can cause problems just came in. It's an incompatibility with another module extending the same service.
Comment #13
wim leersThat's not a bug in BigPipe's functionality though; it's an implementation detail that causes problems because Symfony designed the mechanism for decorating services poorly. Anyway, it's an easy fix, and there's a patch there already.
If it's this kind of bug that gets reported, then YAY, let them come!
Comment #14
dawehnerYeah, software has bugs. This is IMHO not at all a reason to not mark some specific modules as experimental. Just imagine if we would mark system module as experimental :P
Comment #15
wim leersHeh :)
Comment #16
fabianx commented#14: Agree, it is at least beta level stability.
Only if we also integrate it directly with systemd :D.
Comment #17
xjm#2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits looks like it is running into a sticky testbot issue. In case that doesn't land before 8.2.0-rc1 (release window freeze starts 1200 UTC Tuesday), I think we have two options:
We don't need to decide now; I just wanted to lay out the options as I see them since there's a good chance this might be the first experimental module to graduate out of alpha. :)
Comment #18
catch@Wim yeah wasn't saying it makes big pipe unstable, just pointing out it existed ;)
Both options in #17 seem reasonable. For me it seems easier to commit #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits either before or at beta for bigpipe, and then move bigpipe to RC, rather than do RC first and have to worry about bc layers for the patch given it's close already.
Comment #19
xjmIt turns out that #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits relied on adding some functionality to stable core, which is now (correctly) in a separate issue at #2795209: Allow streamed responses to be cached by Page Cache. As of right now I'm pretty sure that issue will need to be 8.3.x only, which makes me thing option 1 in #17 is probably what we should consider doing.
Comment #20
wim leersIndeed.
Pinged Fabian, to ask whether he still stands by what he wrote 1 month ago in #8:
We think it's best to mark BigPipe as beta-level stability. Because #2657684: Refactor BigPipe internals to allow a contrib module to extend BigPipe with the ability to stream anonymous responses and prime Page Cache for subsequent visits would introduce a change in behavior for anonymous users, and if BigPipe remains experimental (but beta-level stability), then we aren't required to opt in new sites but opt out existing sites (which would require either a container parameter or configuration, BigPipe currently has neither, and preferably we'd keep it that way, because it simplifies long-term maintenance).
In any case, beta-level stability (instead of marking BigPipe non-experimental) leaves us with necessary freedom in that regard.
Comment #21
xjmThanks @Wim Leers! I updated https://www.drupal.org/core/experimental, and we will also make sure this is reflected in the 8.2.0 release notes.
Comment #22
wim leersWOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOT!
(I'd use emoji, but
drupal.orgdoesn't support those :P)Comment #23
wim leersThis was for 8.2. For 8.3, we now have #2797169: Mark BigPipe as stable/non-experimental.