Przeglądaj źródła

optimisation de la mise à jour des flux --> attention, modification de la BDD nécessaire

Marien Fressinaud 13 lat temu
rodzic
commit
ba37c6e06f

+ 60 - 32
app/controllers/feedController.php

@@ -23,6 +23,7 @@ class feedController extends ActionController {
 						'name' => $feed->name (),
 						'website' => $feed->website (),
 						'description' => $feed->description (),
+						'lastUpdate' => time ()
 					);
 					$feedDAO->addFeed ($values);
 				
@@ -68,30 +69,44 @@ class feedController extends ActionController {
 		$feedDAO = new FeedDAO ();
 		$entryDAO = new EntryDAO ();
 		
-		$feeds = $feedDAO->listFeeds ();
+		$feeds = $feedDAO->listFeedsOrderUpdate ();
 		
+		// pour ne pas ajouter des entrées trop anciennes
+		$nb_month_old = $this->view->conf->oldEntries ();
+		$date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old);
+		
+		$i = 0;
 		foreach ($feeds as $feed) {
 			$feed->load ();
 			$entries = $feed->entries ();
 			
 			foreach ($entries as $entry) {
-				$values = array (
-					'id' => $entry->id (),
-					'guid' => $entry->guid (),
-					'title' => $entry->title (),
-					'author' => $entry->author (),
-					'content' => $entry->content (),
-					'link' => $entry->link (),
-					'date' => $entry->date (true),
-					'is_read' => $entry->isRead (),
-					'is_favorite' => $entry->isFavorite (),
-					'id_feed' => $feed->id ()
-				);
-				$entryDAO->addEntry ($values);
+				if ($entry->date (true) >= $date_min) {
+					$values = array (
+						'id' => $entry->id (),
+						'guid' => $entry->guid (),
+						'title' => $entry->title (),
+						'author' => $entry->author (),
+						'content' => $entry->content (),
+						'link' => $entry->link (),
+						'date' => $entry->date (true),
+						'is_read' => $entry->isRead (),
+						'is_favorite' => $entry->isFavorite (),
+						'id_feed' => $feed->id ()
+					);
+					$entryDAO->addEntry ($values);
+				}
+			}
+			
+			$feedDAO->updateLastUpdate ($feed->id ());
+			
+			$i++;
+			if ($i >= 10) {
+				break;
 			}
 		}
 		
-		$entryDAO->cleanOldEntries ($this->view->conf->oldEntries ());
+		$entryDAO->cleanOldEntries ($nb_month_old);
 		
 		// notif
 		$notif = array (
@@ -125,26 +140,38 @@ class feedController extends ActionController {
 				);
 				$catDAO->addCategory ($values);
 			}
+			
+			$nb_month_old = $this->view->conf->oldEntries ();
+			$date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old);
 		
+			$i = 0;
 			foreach ($feeds as $feed) {
 				$feed->load ();
-				$entries = $feed->entries ();
-			
-				// Chargement du flux
-				foreach ($entries as $entry) {
-					$values = array (
-						'id' => $entry->id (),
-						'guid' => $entry->guid (),
-						'title' => $entry->title (),
-						'author' => $entry->author (),
-						'content' => $entry->content (),
-						'link' => $entry->link (),
-						'date' => $entry->date (true),
-						'is_read' => $entry->isRead (),
-						'is_favorite' => $entry->isFavorite (),
-						'id_feed' => $feed->id ()
-					);
-					$entryDAO->addEntry ($values);
+				
+				// on ajoute les entrées que de 10 flux pour limiter un peu la charge
+				// si on ajoute pas les entrées du flux, alors on met la date du dernier update à 0
+				$update = 0;
+				$i++;
+				if ($i < 10) {
+					$update = time ();
+					$entries = $feed->entries ();
+					foreach ($entries as $entry) {
+						if ($entry->date (true) >= $date_min) {
+							$values = array (
+								'id' => $entry->id (),
+								'guid' => $entry->guid (),
+								'title' => $entry->title (),
+								'author' => $entry->author (),
+								'content' => $entry->content (),
+								'link' => $entry->link (),
+								'date' => $entry->date (true),
+								'is_read' => $entry->isRead (),
+								'is_favorite' => $entry->isFavorite (),
+								'id_feed' => $feed->id ()
+							);
+							$entryDAO->addEntry ($values);
+						}
+					}
 				}
 			
 				// Enregistrement du flux
@@ -155,6 +182,7 @@ class feedController extends ActionController {
 					'name' => $feed->name (),
 					'website' => $feed->website (),
 					'description' => $feed->description (),
+					'lastUpdate' => $update
 				);
 				$feedDAO->addFeed ($values);
 			}

+ 34 - 1
app/models/Feed.php

@@ -7,6 +7,7 @@ class Feed extends Model {
 	private $name = '';
 	private $website = '';
 	private $description = '';
+	private $lastUpdate = 0;
 	
 	public function __construct ($url) {
 		$this->_url ($url);
@@ -37,6 +38,9 @@ class Feed extends Model {
 	public function description () {
 		return $this->description;
 	}
+	public function lastUpdate () {
+		return $this->lastUpdate;
+	}
 	public function nbEntries () {
 		$feedDAO = new FeedDAO ();
 		return $feedDAO->countEntries ($this->id ());
@@ -74,6 +78,9 @@ class Feed extends Model {
 		}
 		$this->description = $value;
 	}
+	public function _lastUpdate ($value) {
+		$this->lastUpdate = $value;
+	}
 	
 	public function load () {
 		if (!is_null ($this->url)) {
@@ -130,7 +137,7 @@ class Feed extends Model {
 
 class FeedDAO extends Model_pdo {
 	public function addFeed ($valuesTmp) {
-		$sql = 'INSERT INTO feed (id, url, category, name, website, description) VALUES(?, ?, ?, ?, ?, ?)';
+		$sql = 'INSERT INTO feed (id, url, category, name, website, description, lastUpdate) VALUES(?, ?, ?, ?, ?, ?, ?)';
 		$stm = $this->bd->prepare ($sql);
 
 		$values = array (
@@ -140,6 +147,7 @@ class FeedDAO extends Model_pdo {
 			$valuesTmp['name'],
 			$valuesTmp['website'],
 			$valuesTmp['description'],
+			$valuesTmp['lastUpdate'],
 		);
 
 		if ($stm && $stm->execute ($values)) {
@@ -171,6 +179,22 @@ class FeedDAO extends Model_pdo {
 		}
 	}
 	
+	public function updateLastUpdate ($id) {
+		$sql = 'UPDATE feed SET lastUpdate=? WHERE id=?';
+		$stm = $this->bd->prepare ($sql);
+
+		$values = array (
+			time (),
+			$id
+		);
+
+		if ($stm && $stm->execute ($values)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+	
 	public function deleteFeed ($id) {
 		$sql = 'DELETE FROM feed WHERE id=?';
 		$stm = $this->bd->prepare ($sql);
@@ -209,6 +233,14 @@ class FeedDAO extends Model_pdo {
 		return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
 	}
 	
+	public function listFeedsOrderUpdate () {
+		$sql = 'SELECT * FROM feed ORDER BY lastUpdate';
+		$stm = $this->bd->prepare ($sql);
+		$stm->execute ();
+
+		return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
+	}
+	
 	public function listByCategory ($cat) {
 		$sql = 'SELECT * FROM feed WHERE category=? ORDER BY name';
 		$stm = $this->bd->prepare ($sql);
@@ -254,6 +286,7 @@ class HelperFeed {
 			$list[$key]->_name ($dao['name']);
 			$list[$key]->_website ($dao['website']);
 			$list[$key]->_description ($dao['description']);
+			$list[$key]->_lastUpdate ($dao['lastUpdate']);
 		}
 
 		return $list;

+ 4 - 4
app/views/javascript/main.phtml

@@ -21,15 +21,15 @@ function slide (new_active, old_active) {
 	new_active.addClass ("active");
 	
 	if (hide_posts) {
-		old_active.children (".content").slideUp (200);
-		new_active.children (".content").slideDown (200, function () {
+		old_active.children (".content").slideUp (500);
+		new_active.children (".content").slideDown (500, function () {
 			$.smoothScroll({
-				offset: new_active.position ().top
+				offset: new_active.position ().top - 50
 			});
 		});
 	} else {
 		$.smoothScroll({
-			offset: new_active.position ().top + 25
+			offset: new_active.position ().top - 50
 		});
 	}
 }

+ 6 - 2
public/theme/base.css

@@ -184,6 +184,7 @@ form {
 				}
 		#main_aside {
 			position: fixed;
+			z-index: 10;
 		}
 		#categories {
 			height: 69%;
@@ -200,11 +201,14 @@ form {
 		vertical-align: top;
 	}
 		#top {
-			width: 100%;
+			position: fixed;
+			top: 0;
+			width: 85%;
 			background: #eee;
 			border-bottom: 1px solid #aaa;
 			box-shadow: 0 1px 3px #aaa;
 			text-align: center;
+			z-index: 0;
 		}
 			#top a {
 				display: inline-block;
@@ -218,7 +222,7 @@ form {
 					text-decoration: none;
 				}
 		#stream {
-			padding: 0;
+			padding: 50px 0 0;
 		}
 		#main .table {
 			display: table;