Optimiser ce bout de plugin qui me fait passer de 40 a 101 requetes !

  • Statut : non résolu
12 sujets de 1 à 12 (sur un total de 12)
  • Auteur
    Messages
  • #449962
    Rod
    Membre
    Maître WordPress
    744 contributions

    [c]function show_pop_posts() {
    global $wpdb, $siteurl, $tableposts;
    $results = $wpdb->get_results(« select postnumber, cntaccess from mostAccessed ORDER BY cntaccess DESC LIMIT 20 »);
    foreach ($results as $result) {
    $postnumber = $result->postnumber;
    $post = @$wpdb->get_row(« SELECT ID, post_title FROM $tableposts WHERE ‘$postnumber’ = ID »);
    $post_title = substr($post->post_title, 0, 80);
    $urlperma = get_permalink($post->ID);
    // echo « 

  • ID. »&more=1&c=1″ title= »$text »>$post_title($result->cntaccess)
  • « ;
    /* Use the line below if you use permalinks in your blog */
    echo « 

  • $post_title ($result->cntaccess)
  • « ;
    }
    }[/c]

    Voila, ce petit bout de code me fait passer de 40 a 101 requetes … rien que ca … il s’agit du plugin issu de ce site http://weblogtoolscollection.com/archives/2005/03/14/top-10-plugin/

    qui me permet d’avoir un top 10 (que j’ai changé en top 20 …) … et donc voila le massacre.

    Qui pourrait m’aider à faire en sorte que ca pete pas mon serveur ? 🙂

#588040
xavier
Gestionnaire du forum
Maître WordPress
2126 contributions

$wpdb->get_results : 1 requête
$wpdb->get_row : 1 requête x 20
get_permalink : 1 requête x 20
$result->cntaccess (suis pas sûr) : 1 requête x 20

Voilà tes 61 requêtes. Tu peux les passer en 31 en te limitant à un top 10. Ou tu peux tout réécrire, bien sûr… 🙂

#588041
Rod
Membre
Maître WordPress
744 contributions

Bahhh euh … merci hein 🙂 si je savais reecrire un bout de code php, ce qui sous entendrait ke PHP n’ait aucun mystere pour moi, je l’aurais meme fait sans poster ici 🙂 … mais en effet … c nul :( et deja 31 requetes pour un top 10 … non hein !

#588042
Qwindoo
Modérateur
Maître WordPress
2866 contributions

Salut 🙂

Codé comme les pieds en deux secondes :

function show_pop_posts()
{
  global $wpdb, $siteurl, $tableposts;
  $results = $wpdb->get_results(« SELECT postnumber, cntaccess,
                                        P.ID, P.post_title
                                 FROM mostAccessed
                                 LEFT JOIN $tableposts P ON P.ID = postnumber
                                 ORDER BY cntaccess DESC
                                 LIMIT 20
                                « );
  foreach ($results as $result)
  {
    $postnumber = $result->postnumber;
    $post_title = substr($result->post_title, 0, 80);
    $urlperma = get_permalink($result->ID);
    // echo « <li><a>ID. »&more=1&c=1″ title= »$text »>$post_title</a><strong>($result->cntaccess)</strong></li>« ;
    /* Use the line below if you use permalinks in your blog */               
    echo ‘<li><a title="',$post_title,' : ',$urlperma,'" href="',$urlperma,'">‘,$post_title,’</a> <strong>(‘,$result->cntaccess,’)</strong></li>‘;
  }
}

Tiens-nous au courant 😉

edit: corrigé 🙂

#588043
Rod
Membre
Maître WordPress
744 contributions

je teste de suite 🙂

#588044
Qwindoo
Modérateur
Maître WordPress
2866 contributions

Arf je vois déjà une erreur 😕

Il faut remplacer $post par $result dans mon code 😉

#588045
Qwindoo
Modérateur
Maître WordPress
2866 contributions

Tu n’as déjà plus que 62 requêtes sur ta page d’accueil 😉

#588046
Rod
Membre
Maître WordPress
744 contributions

C’est mieux, mais c’est pas encore ca :( (peut etre kon peut pas faire mieux hein)

>> avant
>> après.

Merci quand meme 🙂

#588047
Rod
Membre
Maître WordPress
744 contributions

Arf … bon je reteste 🙂

(mais l’accueil du hibOO actuel n’est pas celui que je teste actuellement 🙂 mais un autre accueil … ou j’ai deja moins de requetes sur l’accueil …)

Donc question (parce ke peut etre ke je me fais du souci pour rien)

81 requetes, c’est beaucoup, ou pas ?

#588048
Qwindoo
Modérateur
Maître WordPress
2866 contributions

81 requêtes, c’est effectivement pas mal 😕

Il y a un get_permalink dans la boucle (* 20 donc) qui plombe l’ensemble 😕

Je vais voir si on peut le virer 😉

#588049
Qwindoo
Modérateur
Maître WordPress
2866 contributions

Bon après vérification, la fonction get_permalink fait obligatoirement une requête à chaque appel 😕

Avec ce code-ci, tu économiseras 20 requêtes mais tu obtiendras des adresses un peu moins belles (sans les permalinks en fait) :

function show_pop_posts()
{
  global $wpdb, $siteurl, $tableposts;
  $results = $wpdb->get_results(« SELECT postnumber, cntaccess,
                                        P.ID, P.post_title
                                 FROM mostAccessed
                                 LEFT JOIN $tableposts P ON P.ID = postnumber
                                 ORDER BY cntaccess DESC
                                 LIMIT 20
                                « );
  foreach ($results as $result)
  {
    $postnumber = $result->postnumber;
    $post_title = substr($result->post_title, 0, 80);
    echo ‘<li><a>ID,’&more=1&c=1″>’,$post_title,’</a>‘, ‘<strong>(‘,$result->cntaccess,’)</strong></li>‘;
  }
}

A mon avis, c’est déjà pas mal, sachant que tu peux certainement optimiser d’autres parties de ce script (et éventuellement d’autres) et gagner une vingtaine de requête encore 😉

#588050
Rod
Membre
Maître WordPress
744 contributions

Je te poste le plugin, avec tes corrections (qu’il faudra proposer du coup limite … car le site de l’auteur n’existe plus, il ne le met plus à jour … mais je trouve qu’il fonctionne plutot tres bien). Pour le permalink, impossible, grosse confusion sinon pour Google … et g pas envie de me faire bann en faisant croire que je fais plusieurs urls = 1 seul article 🙂

<?php
/*
Plugin Name: Top10
Plugin URI: http://weblogtoolscollection.com/archives/2005/03/14/top-10-plugin/
Description: Top 10 Posts/Views
Author: Laughing Lizard
Author URI: http://www.weblogtoolscollection.com
Port Author: Jon Dingman 
Examples: http://www.bleakgeek.com/archives/2005/04/08/wordpress-top10view-count-plugin/
Version: 1.5
*/

/*
## USAGE ##

This plugin uses a table in MySQL.  You may either open up phpMyAdmin and insert this SQL or you may do it via command line.  
Either way, it needs to be there to track the stats.

use ;
create table mostAccessed
(
postnumber int not null,
cntaccess int not null,
primary key(postnumber),
unique id(postnumber)
);

## HTML INSTRUCTIONS ##

Open your index.php and find this line:


And place this line just above that:
no permalinks:
 0) { add_count($p);}?>

using permalinks:
 0) { add_count($id);} ?>

Now place this code where you want your top10 posts to show up (outside the wp-loop):


## UPDATE ##
Want to see how many times a post has been viewed?  Follow the instructions below:

Then find this line to your index.php:


And add this line right below it (or anywhere around it):
ID, $before= »(Visited « , $after= » times) »); ?>

*/

function add_count($p_number) {
	$result = mysql_query(« select postnumber, cntaccess from mostAccessed where postnumber = ‘$p_number' »);
	$test = 0;
	while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
		$row[1] += 1;
		@mysql_query(« update mostAccessed set cntaccess = ‘$row[1]’ where postnumber = ‘$row[0]' »);
		$test = 1;
		}
	if ($test == 0) {
		@mysql_query(« insert into mostAccessed(postnumber, cntaccess) values(‘$p_number’, ‘1’) »);
		}
	}

// New Code added by MS-DOS_1991 – Wordpress-fr.net
 function show_pop_posts()  {
global $wpdb, $siteurl, $tableposts;
 $results = $wpdb->get_results(« SELECT postnumber, cntaccess,
											P.ID, P.post_title
											FROM mostAccessed
											LEFT JOIN $tableposts P ON P.ID = postnumber
											ORDER BY cntaccess DESC
											LIMIT 20 »);
foreach ($results as $result) {
	$postnumber = $result->postnumber;
	$post_title = substr($result->post_title, 0, 50);
	$urlperma = get_permalink($result->ID);
	echo ‘<li><a title="',$post_title,' : ',$urlperma,'" href="',$urlperma,'">‘,$post_title,’</a> (‘,$result->cntaccess,’)</li>‘;
	}
}

function show_post_count($postcountID, $before= »(Visited « , $after= » times) ») {
	global $wpdb, $tableposts;
	$resultscount = $wpdb->get_results(« select postnumber, cntaccess from mostAccessed WHERE postnumber = $postcountID »);
	if (isset($resultscount)) {
		foreach ($resultscount as $resultcount) {
			$postcount = $resultcount->cntaccess;
			echo $before.$postcount.$after;
			}
		}
	}

?>

Merci encore !

12 sujets de 1 à 12 (sur un total de 12)
  • Vous devez être connecté pour répondre à ce sujet.