J'ai implémenté une classe de sitemap simple en utilisant l'application sitemap par défaut de django. Comme il prenait beaucoup de temps pour exécuter, j'ai ajouté la mise en cache manuelle:Mise en cache de sitemaps dans django
class ShortReviewsSitemap(Sitemap):
changefreq = "hourly"
priority = 0.7
def items(self):
# try to retrieve from cache
result = get_cache(CACHE_SITEMAP_SHORT_REVIEWS, "sitemap_short_reviews")
if result!=None:
return result
result = ShortReview.objects.all().order_by("-created_at")
# store in cache
set_cache(CACHE_SITEMAP_SHORT_REVIEWS, "sitemap_short_reviews", result)
return result
def lastmod(self, obj):
return obj.updated_at
Le problème est que memcache permet seul objet max 1Mo. Celui-ci était plus grand que 1 Mo, pour le stockage dans le cache a échoué:
>7 SERVER_ERROR object too large for cache
Le problème est que django a un moyen automatisé de décider quand il doit diviser le fichier sitemap dans les smalled. Selon les docs (http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/):
Vous devez créer un fichier d'index si l'un de vos sitemaps a plus de 50.000 URL. Dans ce cas, Django paginera automatiquement le sitemap, et l'index reflétera cela.
Selon vous, quel serait le meilleur moyen d'activer les sitemaps de mise en cache? - Hacker dans le framework django sitemaps pour restreindre une taille de sitemap unique à, disons, 10 000 enregistrements semble être la meilleure idée. Pourquoi 50 000 personnes ont-elles été choisies en premier lieu? Conseil Google? nombre aléatoire? - Ou peut-être y a-t-il un moyen de permettre aux memcached de stocker de plus gros fichiers? - Ou peut-être sauvegardés, les sitemaps devraient être disponibles sous forme de fichiers statiques? Cela signifierait qu'au lieu de mettre en mémoire cache avec memcached, je devrais stocker manuellement les résultats dans le système de fichiers et les récupérer la prochaine fois que le sitemap est demandé (peut-être nettoyer le répertoire quotidiennement dans un travail cron).
Tous ceux qui semblent très bas niveau et je me demande si une solution évidente existe ...
Ne faites pas "résultat! = Aucun", faites toujours "le résultat n'est pas Aucun" – stefanw
pourquoi est-ce? quelle est la différence? – michuk
50 000 est donné dans le protocole Sitemaps. – webjunkie