Performances: reorder links when they're written instead of read

relates to 
This commit is contained in:
ArthurHoaro 2017-09-02 15:10:44 +02:00
parent 96a1c79456
commit 9ec0a61156
4 changed files with 51 additions and 10 deletions

View file

@ -7,6 +7,10 @@ require_once 'application/LinkFilter.php';
*/
class LinkFilterTest extends PHPUnit_Framework_TestCase
{
/**
* @var string Test datastore path.
*/
protected static $testDatastore = 'sandbox/datastore.php';
/**
* @var LinkFilter instance.
*/
@ -17,13 +21,20 @@ class LinkFilterTest extends PHPUnit_Framework_TestCase
*/
protected static $refDB;
/**
* @var LinkDB instance
*/
protected static $linkDB;
/**
* Instanciate linkFilter with ReferenceLinkDB data.
*/
public static function setUpBeforeClass()
{
self::$refDB = new ReferenceLinkDB();
self::$linkFilter = new LinkFilter(self::$refDB->getLinks());
self::$refDB->write(self::$testDatastore);
self::$linkDB = new LinkDB(self::$testDatastore, true, false);
self::$linkFilter = new LinkFilter(self::$linkDB);
}
/**

View file

@ -141,12 +141,34 @@ class ReferenceLinkDB
*/
public function write($filename)
{
$this->reorder();
file_put_contents(
$filename,
'<?php /* '.base64_encode(gzdeflate(serialize($this->_links))).' */ ?>'
);
}
/**
* Reorder links by creation date (newest first).
*
* Also update the urls and ids mapping arrays.
*
* @param string $order ASC|DESC
*/
public function reorder($order = 'DESC')
{
// backward compatibility: ignore reorder if the the `created` field doesn't exist
if (! isset(array_values($this->_links)[0]['created'])) {
return;
}
$order = $order === 'ASC' ? -1 : 1;
// Reorder array by dates.
usort($this->_links, function($a, $b) use ($order) {
return $a['created'] < $b['created'] ? 1 * $order : -1 * $order;
});
}
/**
* Returns the number of links in the reference data
*/
@ -187,6 +209,7 @@ class ReferenceLinkDB
public function getLinks()
{
$this->reorder();
return $this->_links;
}