Please tone it down a bit. Even if you are frustrated, noone here has outright said that this is not something that is open for discussion. If that was the case, @Daphne had not offered to have a 1:1 talk to discuss this, which is pretty much the opposite of what you wrote above.
Please, ditch the frustration for now, coordinate with @Daphne to have a serious discussion where you can much easier explain your thoughts about how this could be done.
@Daphne Can this be done? I presume the offer still stands? Someone just has to coordinate it so that the right parties are involved (e.g. someone who knows the core a bit).
Itās obvious that everyone just needs to chill, have a nice chat and take it from there
Everything aside, Iām sorry if Iāve been unpleasant (I know I have). It is very frustrating when I try to offer my help and it gets ignored with no good explanation (whatever explanation I have received is not good enough for me; I admit thatās subjective). Letās remember that I had literally nothing to gain here except some satisfaction, at the cost of potentially hundreds of working hours. Nextcloud on the other hand had a lot of potential to make $$$ with a better and improved product. I wasnāt going to get any of that. I understand that this is true for contributing to FOSS in general, but thereās a difference in expectations when trying to contribute to any open source project maintained by someone during their vacation vs contributing to an open core product that a company actually sells for profit. With this background, it is frustrating to get no real feedback or discussion. I admit I couldāve handled it more tactfully, but after all Iām human and Iāve a day job to do before coming to this.
@christianlupus thank you for your post. I do agree with most things. On the topic of how much I expect this to help: from my preliminary profiling (I could be very wrong), almost ~75% of a request time is spent in bootstrapping (10ms is just for the core app bootstrapping; thereās a lot more). Very little time is needed for the actual controller logic. This figure goes up if you can include booting the apps, parts of which are also redundant on each request. This figure is variable, e.g. if all the controller is doing is serve a favicon, then >90% time is bootstrapping, since basically nothing happens after that. That said, the user is not going to notice much directly, since it might bring response times down from, say, 50ms to 5ms at best. But the admin is going to notice this a lot in terms of scalability, since each request needs a much smaller CPU time. So indirectly, the user may have noticeable improvements in performance when there are multiple users, and the cost of running everything goes down by a lot.
Keeping aside performance, my personal opinion (happy to agree to disagree) is that PHPās model of starting each request with a clean slate is both outdated and wrong. Think of it this way ā if this was the ācorrectā model of execution, we wouldnāt have newer frameworks / languages like node / golang in the first place, that everyone almost universally agrees are ābetterā if youāre building a new application. The fact that these exist and are widely used (and growing daily) indicates something is wrong with the classic request model. So the question in my view is more about applicability to a specific application ā and I believe these improvements are very applicable to Nextcloud.
Tl;dr itās as much about correctness as about performance. Of course, Iām an academician; the corporates might not care about correctness as much as me, which I fully understand.
Iāve been discussing and @Daphne has been helpful. Unfortunately, it hasnāt really led anywhere, and even after all this, not a single engineer from Nextcloud has come up to discuss this and be willing to listen. Further, from the discussions I had, it looks like the burden is on me to prove that this is worth the time to discuss, with some red tape like making a proposal and coordination and timelines etc etc. Let me say this out loud: I donāt need this to happen. Nextcloud will definitely benefit if it happens. I really shoudnāt need to do all this, definitely not to just have a discussion. Especially considering the points in #1. Seriously, I understand people are very busy. So am I. I donāt have time to pursue someone so that they let me do volunteer work that theyāre going to monetarily benefit from. There are others I need to pursue where my time would be better spent, for instance the insurance company of the lady that crashed into my car last week.
Another reason I am not going to make any proposals is because Iām not going to argue with someone who has made up their mind that something isnāt a good idea. Itās a fruitless discussion and wastes everyoneās time. Fact remains, the NC engineers that communicated with @Daphne have a strong opinion that this is either undoable or not worth the effort. If there was any wiggle room in their opinion, I expect to have heard about it by now. So Iāll say itās okay ā we can agree to disagree, and I disagree on both counts. I just want to point out that the idea was dismissed without fully hearing it out first.
Itās fine. Letās stop wasting everyoneās time right now. Clearly thereās a lot of disagreement here and I donāt see a resolution anywhere in sight. By now, all the motivation I had for improving Nextcloud has largely evaporated. I donāt want to contribute to a project that doesnāt take my opinion or time seriously enough to warrant some response / discussion from the engineers despite pursuing this point for long enough. And asking me to make proposals first doesnāt cut it.
If someone disagrees with something I said, Iām happy to agree to disagree. Letās end the conversation here. Iāll update the thread if I ever make any progress on this.
Sorry I did not answer before, but I was not familiar with the subject at the time.
Iāve been looking a bit into performance and booting time lately and I see what you mean about this problem, and what good it would do to keep the state alive in-between requests.
The problem here is that the booting process is depending a lot on which user is in the session. This will change which apps are enabled, which workflows are active, and so on and so on.
So Iām not even sure this would be doable without rewriting too many stuff.
A nice in-between would be to be able to cache the booted state for a few mins for a user, to at least be able to reuse-it for requests triggered by the same page load. But Iāve never seen this kind of solution.