I've been doing some profiling and element_sort came up as a minorly problematic function executed > 1100 times on this particular page taking 3.57% of total self cost. My first glance at the code and I thought "that slow is_array() isn't necessary" and removed it only to discover that yes it is necessary because sometimes the arguments are objects. So I thought I'd try something really stupid and cast the arguments to arrays first. Low and behold it was much faster. Self cost dropped to .57%. I switched back and forth a few times to confirm.

Comments

dalin’s picture

StatusFileSize
new806 bytes
damien tournoud’s picture

... because sometimes the arguments are objects.

Hm. That should definitely not be. In what case have you bumped into this?

dalin’s picture

Forgot to mention that I'm profiling a D5 site, so things might be a bit different, but I think the general gist applies.

dalin’s picture

Status: Active » Needs review

Status: Needs review » Needs work

The last submitted patch, 872680.patch, failed testing.

dalin’s picture

Status: Needs work » Needs review
StatusFileSize
new1.62 KB

Further investigation tells me that on D5 the node form had a node element that was the object that caused the error plus some object from Panels 1.x.

In D7 this doesn't seem to be a problem. I've removed the casting, plus done the same for drupal_sort_weight() and a similar thing in element_children().

Here's my performance stats - total self cost on node/add/page. I switched back-and-forth to confirm:

element_sort()
with patch: .11%
without: 1.26%

element_children()
with patch: 1.89%
without: 2.86%

drupal_sort_weight()
with patch: .13%
without: 1.42

I ran through a bunch of tests on my dev site and all worked good, lets see what the test bot tells us.

moshe weitzman’s picture

Status: Needs review » Reviewed & tested by the community

Nice catch.

webchick’s picture

Curious. Does it make sense to explicitly specify the datatype of these function arguments now that we're not checking if they're arrays?

e.g. change:

 function element_sort($a, $b) {

to:

 function element_sort(array $a, array $b) {

?

dmitrig01’s picture

StatusFileSize
new3.01 KB
new1.16 KB

According to my testing it doens't make a difference - here are my results (test script is attached):

Test 1: 33.6663048267
Test 2: 17.7335600853
Test 3: 17.4855830669

Also attached is a patch which adds the array parameters

dalin’s picture

Hmm interesting conclusion dmitrig01. I would've thought that internally it would be doing the same thing as is_array(). This seems to be the best of all worlds.

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 872680.patch, failed testing.

dmitrig01’s picture

Status: Needs work » Needs review
StatusFileSize
new2.77 KB

woah i have no idea what happened here:


@@ -5941,7 +5941,7 @@ function drupal_write_record($table, &$o
   }
 
   // Convert to an object if needed.
-  if (is_array($object)) {
+  if ($arrayName = array('' => , );array($object)) {
     $object = (object) $object;
     $array = TRUE;
   }

New patch should work.

Status: Needs review » Needs work
Issue tags: -Performance

The last submitted patch, 872680.patch, failed testing.

dhthwy’s picture

Status: Needs work » Needs review
Issue tags: +Performance

#12: 872680.patch queued for re-testing.

dhthwy’s picture

Removing those array checks is a good idea if they aren't needed. Internally they result in multiple function calls > 4, none expensive by themselves but they add up quickly.

Status: Needs review » Needs work

The last submitted patch, 872680.patch, failed testing.

dalin’s picture

I don't quite understand why the patch keeps failing. Test bot says that it can't even start up SimpleTest. It works on my dev install. The SimpleTest tests run as expected on my local install. And reinstalling SimpleTest works on my local.

Though it does appears that there are a plethora of places where we do have strings in the render arrays, for example in toolbar module:

  $build['toolbar_drawer_classes'] = implode(' ', $toolbar_drawer_classes);

These result in recoverable PHP errors.

I haven't really done much core development. What's the way to fix these: include fixes in this patch? Open one new cleanup issue? File individual cleanup issues?

I've also included a new version of this patch that removes a redundant array casting.

dalin’s picture

Status: Needs work » Needs review
StatusFileSize
new4.05 KB

Err, here's the patch.

Status: Needs review » Needs work

The last submitted patch, 872680.patch, failed testing.

catch’s picture

Subscribing, unlikely to be able to look at this until next week though due to travelling.

c960657’s picture

dalin’s picture

StatusFileSize
new2.14 KB

So we're not going to be able to do everything that we want in this patch. The proposed changes to element_property(), and element_child() will require all properties to start with # which is currently is not the case. Making that happen will require changes throughout the entire codebase which should probably wait till D8.

So the included patch is basically everything that we've talked about this in this issue, but only working with element_sort(), drupal_sort_weight(), element_properties(), and element_children().

dalin’s picture

Status: Needs work » Needs review

Status: Needs review » Needs work
Issue tags: -Performance

The last submitted patch, 872680.diff, failed testing.

dalin’s picture

Status: Needs work » Needs review
Issue tags: +Performance

#22: 872680.diff queued for re-testing.

dalin’s picture

Testbot gives a different result every time I tell it to re-test the same patch. Running cvs up on my local doesn't show any code changes so I'm not quite sure what the deal is.

Status: Needs review » Needs work
Issue tags: -Performance

The last submitted patch, 872680.diff, failed testing.

aspilicious’s picture

Status: Needs work » Needs review

#22: 872680.diff queued for re-testing.

Status: Needs review » Needs work

The last submitted patch, 872680.diff, failed testing.

moshe weitzman’s picture

Status: Needs work » Needs review

#22: 872680.diff queued for re-testing.

Status: Needs review » Needs work
Issue tags: +Performance

The last submitted patch, 872680.diff, failed testing.

moshe weitzman’s picture

Status: Needs work » Needs review

WTF does this patch have to do with simpletest getting enabled. bot is on some extended bender i think.

moshe weitzman’s picture

Status: Needs review » Reviewed & tested by the community
webchick’s picture

#22: 872680.diff queued for re-testing.

webchick’s picture

Well, bender or not, we can't put this in if it breaks testbot. Maybe ping boombatower, DamZ, or rfay and see if they can take a look.

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 872680.diff, failed testing.

damien tournoud’s picture

This patch does fail (at least on PHP 5.3). At the end of the installation, I get:

Recoverable fatal error: Argument 1 passed to element_sort() must be an array, string given in element_sort() (line 5743 of /var/lib/drupaltestbot/sites/default/files/checkout/includes/common.inc).

On mostly every page, including on the modules page. That prevents the test bot from enabling the testing module.

dalin’s picture

Assigned: Unassigned » dalin

Weird. I ran a handful of simpletests locally before uploading the patch without issue. I'll look deeper into this today.

dalin’s picture

StatusFileSize
new2.09 KB

So it looks like there's some incompatibilities in modules that are included in the "standard", but not the "minimal" installation. Basically it's the "properties not prepended with #" problem.

This means that we won't be able to specify the datatype of the function arguments for element_sort() which is fine. We still have the basic performance gain, but without the gain in api consistency (and the smaller performance gain of not having to sort values that are really custom properties).

Lets see if this patch works.

dalin’s picture

Status: Needs work » Needs review

Status: Needs review » Needs work

The last submitted patch, 872680.diff, failed testing.

dalin’s picture

Status: Needs work » Needs review
StatusFileSize
new5.92 KB

This one fixes issues with the taxonomy admin form and drupal_sort_weight().

dalin’s picture

StatusFileSize
new5.25 KB

Whoops, lets keep the debugging code out.

damien tournoud’s picture

Frankly, I would rather fix those "properties used without #", which is basically a bug.

Status: Needs review » Needs work
Issue tags: -Performance

The last submitted patch, 872680.diff, failed testing.

dalin’s picture

Status: Needs work » Needs review
Issue tags: +Performance

#43: 872680.diff queued for re-testing.

dalin’s picture

@Damien agreed, adding # to all properties would be ideal. But we're talking 2598 tests failing in core (see #18). Plus it would be an API change, and so would affect contrib as well. I don't have a lot of experience with core development, but I don't think that would be an acceptable change, let alone doable before we're out of beta.

dalin’s picture

Anyone else think we should fix all "properties used without #", or is this RTBC?

moshe weitzman’s picture

Last patch has lots of taxo changes. They are needed here?

dalin’s picture

The taxo changes are needed because we changed

-function drupal_sort_weight($a, $b) {
+function drupal_sort_weight(array $a, array $b) {

And taxonomy.module was trying to do a drupal_sort_weight on an entire $form_state['values'] array. It looks like a lot of lines changed, but for the most part it's just indentation. We moved if (isset($form[$tid]['#term'])) { earlier so that we only do drupal_sort_weight on the terms.

moshe weitzman’s picture

Status: Needs review » Reviewed & tested by the community

Makes sense.

dries’s picture

I just committed #839556: Fix isset regression in tablesort, add tests, and cleanup theme_process_registry() which might conflict with this patch. Asking for a re-test.

dries’s picture

#43: 872680.diff queued for re-testing.

giorgio79’s picture

Status: Reviewed & tested by the community » Needs review

What's up with the testbot?

dalin’s picture

Status: Needs review » Reviewed & tested by the community

Testbot was broken when Dries re-queued the patch, but it has since been fixed and the patch was tested and passed.

sun’s picture

+++ includes/common.inc	25 Oct 2010 09:29:57 -0000
@@ -5741,8 +5741,9 @@ function drupal_render_cid_create($eleme
-  $a_weight = (is_array($a) && isset($a['#weight'])) ? $a['#weight'] : 0;
...
+  $a_weight = isset($a['#weight']) ? $a['#weight'] : 0;

What happened to the regression that

isset($a['#weight'])

is TRUE, if $a is a string?

Powered by Dreditor.

dalin’s picture

Status: Reviewed & tested by the community » Needs review
StatusFileSize
new5.3 KB

Ah, good catch Sun. Array casting was in my original patch, but got lost somewhere along the way. This one adds that back in.

dalin’s picture

I see that there's a function called element_sort_by_title() that is almost identical to element_sort() that we should be giving the same treatment to for consistencies sake.

dalin’s picture

StatusFileSize
new5.78 KB

Err, here's the patch.

sun’s picture

I skimmed the issue, but I don't see benchmarks, which prove that casting everything to an array is faster than is_array() - which would be a surprise to me. Sorry if I missed it.

dalin’s picture

StatusFileSize
new1.27 KB
new1.27 KB

@sun in #0 I showed how the patch decreases the self-cost of element_sort(). Also attached is a benchmark using ab of the patch in #59 compared with head (all modules and blocks enabled, 10 nodes on the front page, page and block caches off, anon has all permissions). Benchmarks show ~2.3% improvement.

Also see #961908: Make drupal_attributes() faster where I used the same technique.

dalin’s picture

StatusFileSize
new5.78 KB

And from what I learned in #961908: Make drupal_attributes() faster, we're supposed to have a space after a casting. This patch is the same as #59, but with that small formatting change.

dalin’s picture

I believe this patch would get a benchmark of D6 vs. a benchmark of D7 to be equally performant. Would be nice to get this in before D7 ships (but we all know that a real world D7 site will be faster than an equivalent real world D6 site).

This patch has been RTBC before and only isn't now because testbot was momentarily broken. But I don't want to RTBC my own patch.

dalin’s picture

Assigned: dalin » Unassigned
pounard’s picture

StatusFileSize
new2.45 KB

Actually, I found some inconsistencies in common.inc.

First, element_sort() and drupal_sort_weight() are duplicate functions.
The same form element_sort_title() and drupal_sort_title().

I did a really faster implementation of element_sort(), and merged all the duplicates functions.

I also did a lot of benchmarking (using xdebug, the best tool I think for) and it tells that element_children() is really a bottleneck for performances.

I did all this on my side, I did not known this issue exits.

See my patch for faster element_sort() implementation and functions merge (working on rc2 version actually).

EDIT: Sorry I did not do a patch using CVS because I had not a CVS on my box while doing this, I may redo it later if you really need to, thus this is not hard to read and merge there are really a few lines.

Status: Needs review » Needs work

The last submitted patch, faster-weight-sorting.patch, failed testing.

pounard’s picture

Status: Needs work » Needs review

Now that I read the full thread, I have some notes:

  • #8 no you shouldn't specify datatypes, because the function signature is already given by the PHP function uasort() and must accept anything. You should respect the given API.
  • #9 These tests may be irrevelant, because CLI and HTTPd execution context are really not the same. I think that only a profiler comparaison using percentage of execution time between executions could tell you if it's a benefit or not. This remains a good idea to do this test because it will show you true if there is a really big difference.
  • #61 On my environment it was actually something almost 10% performance gain on some pages, using my patch.
  • @all You should look at the uasort() callback signature, nowhere it's said that you have to return 0, -1, or 1, using two int cast and a substraction should be more efficient than doing five or six if() comparisons.
pounard’s picture

StatusFileSize
new409 bytes

Here is an even faster implementation for weight sorting:

function drupal_sort_weight($a, $b) {
  $a_weight = isset($a['#weight']) ? (int) $a['#weight'] : 0;
  $b_weight = isset($b['#weight']) ? (int) $b['#weight'] : 0;
  return $a_weight - $b_weight;
}

This method does less tests than the previous. whatever is the type of $a, whatever the isset() returns true or not, the int cast will filter inconsistent types and return 0.
Then, this function, in best case, will do 2 if(isset()) and a int sub, in worst case will do 2 if(isset()), 2 int cast, and one int sub, without errors (untested on php 5.3, please tell me), which is quite fast.

I did some CLI tests, see attached file, it gave absolutely no errors on PHP 5.2.14 with default error handling set (so all notice should normally appear on the ouptut).

EDIT: This may not be revelant, but on let's say about 10 hits on my dev box on the same page (just displayying 10 nodes, no blocks), with RC2 implementation it gaves me PHP generation time scores between 550 and 700ms, with my patch it gaves me scores between 470 and 630ms approximatively, removing the lowest and the hightest scores which can be considered as statistic accidents and should not be taken into account. This leads to approximatively between 15% to 10% performance gain for a really simple and small page.

pounard’s picture

#6 I would be pleased to know what tools did you use for benchmarking, I actually uses CLI scripts as a start, but then I already use xdebug profiles and kcachegrind time display to ensure my results, throught multiple hits, sometimes doing some statistics manually using dozens of hits on the same page. This is a method, but it's fastidious, any helper would be great to know.

dalin’s picture

Version: 7.x-dev » 8.x-dev
Status: Needs review » Needs work
StatusFileSize
new1.32 KB

My first thought was that @pounard's approach will cause different results than my patch. However closer examination reveals that none of the proposed solutions gives the same results as the current implementation. The attached test reveals this.

Therefore this issue has to get bumped to D8.

However the good news is that there must've been some other performance improvement gone into core that reduced the number of times per page that element_sort() is getting called. It's now only about .26-.5% of the page.

Also note that drupal_sort_weight() and element_sort() are *not* identical. One is looking for $a['weight'] the other for $a['#weight']. Kinda sketchy yes, but we can't fix that in D7 either.

Yes @pounard my workflow for benchamarking is quite manual:

- cvs_revert (my own little script to do the cvs equivalent of svn revert)
- refresh the URL in the browser with ?XDEBUG_PROFILE=1
- refresh webgrind and write down the total self cost of the function in question
- patch -p0 < 872680.diff
- refresh the URL in the browser with ?XDEBUG_PROFILE=1
- refresh webgrind and write down the total self cost of the function in question
- repeat

pounard’s picture

StatusFileSize
new982 bytes

Your test includes floats as weights, as I can remember weights are int, right? If not, my own patch can easily be fixed, either by casting as float (which then may be longer) either by not casting at all hoping the current form or elements array was not written by an idiot :) This should do the trick the revert to the original behavior. I think the second solution is better, developers will have notices or errors caused by their own code, which is kinda right here?

I didn't notice the slight difference between drupal_sort_weight and element_sort, this is my error here. If the difference is only a '#' char, then the same algorithm should be applied on both, and a strong comment should be added to both documentation functions to highlight that.

Whatever are the differences between all algorithmes, the fastest solution should be kept, even if the behavior changes slightly, it won't in most cases (usage of pure ints). Remember when you do your tests that elements array are all differents, and the results will vary among pages, so any kind of test should may be done over a random computed element array, I did that, see the code attached.

EDIT: Oh and I forgot, a test on only one page is not sufficient, it should be done on at least two very different profiles of page (a big form, a "normal" frontend page), with at least douzens of hit, using some average numbers as proof.

dalin’s picture

@pounard D7 is frozen and no patches that modify the input or output of an API will be accepted unless they fix an honest to goodness bug. This issue is just about small performance tweak so it doesn't qualify.

But D8 is another matter. For D8 by all means, lets choose the fastest implementation and clean up any mess that it creates.

As for the specifics, yes weight can be a float.

either by not casting at all hoping the current form or elements array was not written by an idiot

Unfortunately it's not that simple. If you read back in this issue you'll see that we tried that approach very early on. But many places (even in core) do not properly use element arrays and so $a or $b may be a string instead of an array. See #951734 for more details.

EDIT: Oh and I forgot, a test on only one page is not sufficient, it should be done on at least two very different profiles of page (a big form, a "normal" frontend page), with at least douzens of hit, using some average numbers as proof.

If a proposed change is causing a performance increase so small that it requires benchmarking to that level of detail to prove, then your efforts are likely better spent elsewhere. Your proposed patch is clearly faster with just a few back-and-forths using a profiler on a few different URLs.

P.S. Don't edit your comments, no one will get email updates.

pounard’s picture

@dalin: Ok for comment edition.

I must admin, I'm playing with D7 since beta3, and on all my testing environments, it's a lot slower than D6, and doing a lot of profiling, it this seems to be architectural because there is major bottleneck I could spot. I really think that 500ms to build a page, where the exact same site took 100ms using D6 is not acceptable.

IMHO this kind of performance improvement can easily gain up to 50ms on my environment, this is I think really *huge* and it worth the shot.

If you don't want to apply on core, I would understand, this is a reasonable choice, but I admit that I'll really apply this patch on any D7 install I will made because I can't neglect 50ms per page hit.

If a proposed change is causing a performance increase so small that it requires benchmarking to that level of detail to prove, then your efforts are likely better spent elsewhere. Your proposed patch is clearly faster with just a few back-and-forths using a profiler on a few different URLs.

Not sure about that, what I meant is the real web environment has so much factors that can alter its behavior and speed, among all the layers a single page hit goes through that real benchmarking cannot be done in one hit, you'll always have many surprises if you stick to that, whatever the patch is.

pounard’s picture

Unfortunately it's not that simple. If you read back in this issue you'll see that we tried that approach very early on. But many places (even in core) do not properly use element arrays and so $a or $b may be a string instead of an array. See #951734 for more details.

So, you are telling me the real issue is that the core itself is buggy. If some code parts in core don't respect its own API, then it should be fixed, frozen or not. I'm an external developer, I tell you I can't rely on something I cannot trust.

pounard’s picture

Ok maybe my last comment was a little harsh, but that's the feeling it gaves me when I read something like this. I sincerely apologize for the reaction though.

dalin’s picture

Yeah fixing every single little bug before the product is shipped would be nice, however there will always be bugs. At some point you've just got to decide that the remaining bugs are known and small, freeze the API, and ship D7.

pounard’s picture

This is not only a bug, but a good performance improvement, however I understand your opinion and know this is the core way to deal with these kind of issues at RC phase. I respect that. I will still maintain some patches of my own an use them because I really can't neglect those 50ms.

kurund’s picture

Status: Needs work » Needs review

#62: 872680.diff queued for re-testing.

oriol_e9g’s picture

Title: Faster sorting of render arrays » Drupal sorting clean-up
Issue tags: +API clean-up
StatusFileSize
new4.1 KB
  • API simplification (remove two functions): 4 files changed, 7 insertions(+), 49 deletions(-)
  • Faster sorting for drupal_sort_weight()
  • Removed element_sort() and replaced all occurrences by drupal_sort_weight()
  • Removed element_sort_by_title() and replaced all occurrences by drupal_sort_title()

We still need some additional benchmarking and testing.

NR to see who thinks testbot.

sun’s picture

Status: Needs review » Needs work
+++ b/core/includes/common.inc
@@ -6188,45 +6188,6 @@ function drupal_render_cid_create($elements) {
-function element_sort($a, $b) {
-  $a_weight = (is_array($a) && isset($a['#weight'])) ? $a['#weight'] : 0;
...
-function element_sort_by_title($a, $b) {

@@ -6284,12 +6245,9 @@ function element_info_property($type, $property_name, $default = NULL) {
 function drupal_sort_weight($a, $b) {
-  $a_weight = (is_array($a) && isset($a['weight'])) ? $a['weight'] : 0;

The difference between element_ and drupal_ ua_sort() helper functions is that the former checks a '#property' and the latter checks 'property'.

The drupal_ helpers need to be retained separately, as they're used in many places (not only in core).

oriol_e9g’s picture

Title: Faster sorting of render arrays » Drupal faster sorting

So, I understand that we can only apply performance improvements.

oriol_e9g’s picture

Title: Drupal sorting clean-up » Faster sorting of render arrays
Issue tags: -API clean-up
jhedstrom’s picture

element_sort has moved to ArraySort::sortByWeightProperty(), and the code doesn't appear to have been much refactored in there, so this could still be an issue.

jeroent’s picture

Status: Needs work » Needs review
StatusFileSize
new2.29 KB

Created a new patch for D8.

Status: Needs review » Needs work

The last submitted patch, 84: drupal_faster_sorting-872680-84.patch, failed testing.

jeroent’s picture

Status: Needs work » Needs review
StatusFileSize
new0 bytes
new2.29 KB

This should fix a lot of the failed tests.

jeroent’s picture

StatusFileSize
new3.34 KB
new956 bytes

This is the right patch.

The last submitted patch, 86: drupal_faster_sorting-872680-86.patch, failed testing.

mgifford’s picture

StatusFileSize
new3.34 KB

Re-uploading prior patch for the bots.

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

borisson_’s picture

Issue tags: +needs profiling

I really like this, but it still needs those benchmarks.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

pameeela’s picture

Title: Drupal faster sorting » Improve speed of sorting
joachim’s picture

Status: Needs review » Needs work

> only to discover that yes it is necessary because sometimes the arguments are objects.

Is this still true?

If so, it looks like the patch will change the sort order of objects -- previously they would have been sorted as it the value was '' and now the value of the $key property is used.

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.