aboutsummaryrefslogtreecommitdiff
path: root/app/controllers/feedController.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-05 18:37:41 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2013-11-05 18:37:41 +0100
commitfdb2b7588e2326dc36823d7fac5f88ff8ebee2ec (patch)
tree5b0e7de61a71ce785ac41f198e76c38de9d793ef /app/controllers/feedController.php
parentfb0c0868a44ee10a43703c27f18aa6fcde0f4211 (diff)
Actualize : évite d'ajouter les articles déjà connus
Dans la plupart des cas, évite d'ajouter les articles déjà présents dans la base de données, en faisant une pré-requête (une par flux, pas une par article). Par exemple, si un flux RSS fournit 20 articles, alors la pré-requête charge une liste d'exclusion de 20+2 identifiants d'articles. Ce patch réduit considérablement le nombre de requêtes et la charge de la base de données durant les mises à jour, et en particulier le trafic réseau entre PHP et la base de données. Les mises à jour sont du coup aussi plus rapides.
Diffstat (limited to 'app/controllers/feedController.php')
-rwxr-xr-xapp/controllers/feedController.php8
1 files changed, 6 insertions, 2 deletions
diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php
index 1131c3a7a..f14ed7997 100755
--- a/app/controllers/feedController.php
+++ b/app/controllers/feedController.php
@@ -150,14 +150,18 @@ class feedController extends ActionController {
$feed->load ();
$entries = $feed->entries ();
+ //For this feed, check last n entry IDs already in database
+ $existingIds = array_fill_keys ($entryDAO->listLastIdsByFeed ($feed->id (), count($entries) + 2), 1);
+
// ajout des articles en masse sans se soucier des erreurs
// On ne vérifie pas que l'article n'est pas déjà en BDD
// car demanderait plus de ressources
// La BDD refusera l'ajout de son côté car l'id doit être
// unique
foreach ($entries as $entry) {
- if ($entry->date (true) >= $date_min ||
- $feed->keepHistory ()) {
+ if ((!isset ($existingIds[$entry->id ()])) &&
+ ($entry->date (true) >= $date_min ||
+ $feed->keepHistory ())) {
$values = $entry->toArray ();
$entryDAO->addEntry ($values);
}