WordPress.org

Make WordPress Core

Opened 9 years ago

Closed 8 years ago

Last modified 8 years ago

#17129 closed enhancement (fixed)

Speed up is_serialized_string()

Reported by: markjaquith Owned by: markjaquith
Milestone: 3.2 Priority: normal
Severity: minor Version:
Component: Performance Keywords: reporter-feedback
Focuses: Cc:
PR Number:

Description

is_serialized_string() uses an expensive regular expression. It should use substring peeking like is_serialized() does. In my tests, this offers a time reduction of about 26%.

Attachments (2)

17129.diff (699 bytes) - added by markjaquith 9 years ago.
17129.patch (756 bytes) - added by hakre 8 years ago.
Review

Download all attachments as: .zip

Change History (9)

@markjaquith
9 years ago

#1 @greuben
9 years ago

Edit: Oops, Ignore What I've said...

the last elseif can be changed to

elseif ( '"' !== $data[4] || '"' !== $data[$length-2] )
    return false;
Last edited 9 years ago by greuben (previous) (diff)

#2 @markjaquith
8 years ago

  • Owner set to markjaquith
  • Resolution set to fixed
  • Status changed from new to closed

In [17779]:

Speed optimizations for is_serialized_string(). fixes #17129

#3 @nacin
8 years ago

  • Milestone changed from Awaiting Review to 3.2

@hakre
8 years ago

Review

#4 @hakre
8 years ago

  • Keywords reporter-feedback added

When I reviewed the changeset this is what came into my mind. I have not benchmarked so far if it's actually faster than the if / else approach.

#5 @hakre
8 years ago

Related: #14429

#6 @hakre
8 years ago

A note of caution: is_serialized_string() will return true for cases is_serialized() will return false. So both functions are not compatible with each other.

Related: #17375

As is_serialized_string() is used in core only after if(is_serialized()) has been true, and it's not same stage compatible, it could be even written much smaller by just checking for s/S as the first letter.

Last edited 8 years ago by hakre (previous) (diff)

#7 @hakre
8 years ago

Related: #17445

Note: See TracTickets for help on using tickets.