web-dev-qa-db-fra.com

Comptage des pages vues sur des sites en cache à fort trafic

Notre site a un trafic assez important et nous utilisons les caches total nginx et w3 pour gérer la charge. Nous utilisions précédemment wp-postviews pour compter les pages vues, mais il semble que la table postmeta soit maintenant verrouillée et ne compte souvent pas du tout. Au mieux, ce n'est pas fiable.

Quelqu'un peut-il nous suggérer un moyen de compter les pages vues et de les intégrer à la base de données ou à des solutions spécifiques exploitables?

Mon objectif initial est de faire en sorte que le nombre de vues soit effectué via javascript pour mettre à jour une base de données distincte, puis un travail cron à la fin de chaque journée pour fusionner les résultats, mais je ne sais pas par où commencer.

Merci d'avance

2
James Bruce

Cela dépend vraiment de la raison pour laquelle vous devez afficher les chiffres: s'il s'agit uniquement de consulter les statistiques du trafic, utilisez Google Analytics ou un nombre quelconque d'outils d'analyse basés sur le suivi javascript.

Si vous avez besoin d’intégrer le nombre de pages vues et de pouvoir effectuer des tâches telles que l’affichage des commandes par vues, vous pouvez soit:

  • passez du temps à optimiser votre base de données - quelques options et éléments à prendre en compte
    • plus de mémoire pour MySQL
    • changer la table postmeta pour être InnoDB
    • obtenir un serveur de base de données séparé
    • assurez-vous que vous avez bien réglé vos paramètres MySQL (utilisez mysqltuner comme point de départ)

OR

  • Utilisez quelque chose comme Piwik et passez du temps à l’intégrer (il a une API décente) avec WordPress.
1
anu

Voici comment procéder, en supposant que vous ayez une extension de mise en cache mémoire active:

(je vais utiliser APC comme exemple ici car il sera fourni avec PHP 6)

// set this to the current post id
$post_id = get_the_ID();

// this will attempt to get the post view count from cache (the memory)
$page_views = apc_fetch("post_{$post_id}_views");

// if it exists, increase the counter (again, only in memory)
if($page_views !== false){
  $page_views = apc_inc("post_{$post_id}_views");

  // write the data to the database every ...let's say 100 views
  if(($page_views % 10) == 100)
    update_your_database_here();
}

// doesn't exist; most likely this is the first view, so create the cache entry
else{
  apc_store("post_{$post_id}_views", 1);
  $page_views = 1;
}

// show it
printf('This post has %d views', $page_views);

Vous pouvez choisir d'utiliser les fonctions de WP - wp_cache_incr () ou wp_cache_decr () + W3TC avec APC sélectionné. Personnellement, j’éviterais d’utiliser des plug-ins de cache et créerais mon propre gestionnaire de cache d’objets que je pourrais déposer dans le répertoire wp-content.

Vous pouvez également utiliser xcache pour cela aussi, cela n'a pas d'importance - L'idée est que vous devez stocker le compte en mémoire jusqu'à un certain point, afin d'éviter toute écriture sur le disque. Étant donné que votre site est très fréquenté, je suppose que vous possédez un serveur dédié sur lequel vous pouvez installer vos propres extensions PHP, etc.

2
onetrickpony

Il suffit d'utiliser Google Analytics ou wp.com stats.

Cela ne vaut pas la peine de perdre du temps sur quelque chose qui est déjà résolu.

0
scribu