mailbox/listing: Make server response for large mailbox listing faster when using threaded view

Symptom
=======
When using roundcube with mailboxes with over 60k messages, list
view was way faster than viewing in threaded view.

Mailbox index view timing:    ~360 ms
Mailbox threaded view timing: ~800 ms

Resolution
==========
Use native PHP array manipulation functions instead of rolling custom
string data reversal implementation using strpos() and substr() in a
'while' loop.

This optimization is already present in index view handler, but was missing
from threaded view.

Results after optimization
==========================
Both average out around ~360 ms response time.
pull/5330/head
Bostjan Skufca 8 years ago committed by Aleksander Machniak
parent e1ae200201
commit 55d90b2f62

@ -252,22 +252,10 @@ class rcube_result_thread
return;
}
$this->meta['pos'] = array();
$datalen = strlen($this->raw_data);
$result = '';
$start = 0;
while (($pos = @strpos($this->raw_data, self::SEPARATOR_ELEMENT, $start))
|| ($start < $datalen && ($pos = $datalen))
) {
$len = $pos - $start;
$elem = substr($this->raw_data, $start, $len);
$start = $pos + 1;
$raw_data_reverse = implode(self::SEPARATOR_ELEMENT, array_reverse(explode(self::SEPARATOR_ELEMENT, $this->raw_data)));
$this->raw_data = $raw_data_reverse;
$result = $elem . self::SEPARATOR_ELEMENT . $result;
}
$this->raw_data = rtrim($result, self::SEPARATOR_ELEMENT);
$this->meta['pos'] = array();
}

Loading…
Cancel
Save