1

Dans le but de m'entrainer dans les technos web j'ai envie de tenter pour le fun de faire un site axé sur un gros contenu en utilisant AJAX. Mettons que je veuille faire un forum mais dont le contenu cette fois serait parsé et affiché par le client à partir d'un document XML fourni par le serveur, afin de décharger celui-ci du tiers présentation (c'est purement académique hein ^^).
Tout ça pose évidemment des problèmes au niveau de l'indexation, le document étant envoyé par après via une requête XMLHTTP puis traité avant d'être affiché. Est-ce qu'une telle idée paraît saugrenue ou pourrait être réalisée? Par exemple, y aurait-il moyen, en restant sur un serveur standard genre LAMP, de fournir aux google-bots une version aplatie du fameux document XML avec juste le texte, et aux clients la page complète avec le parsing derrière? hehe
(Ou est-ce qu'il y a une autre techno que j'oublie?)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

2

Ouais, AJAX ne fait pas bon ménage avec l'indexation hélas sad
Le meilleur moyen que j'ai pu imaginer jusqu'à présent c'est de fournir un site rétro-compatible « 0 javascript ». Sans même aller chercher à identifier les clients du site web d'une quelconque manière, tu balance le même document à tout le monde, et le script (non éxécuté par les bots) se chargera de rendre le tout interactif.
Ça a également un autre intérêt, c'est que tu peux associer des URL réelles à des pages de ton site, bien que pendant une navigation normale (avec javascript), celles-ci sont chargées en AJAX.
Par exemple, tu peux considérer qu'un utilisateur sans javascript n'a que droit de lecture, et que toutes les fonctions avancées sont accessibles via javascript, du coup tu balance une page bidon avec juste le texte, et le reste, c'est le navigateur qui s'en charge.
Après, il y a un nombre incroyable de façons de procéder pour réaliser ça, donc à toi de voir pour les détails (sachant que ça ne va pas influencer que l'implémentation, mais aussi les fonctionnalités et la souplesse du truc). Je te suggérerais juste de regarder si un format comme JSON ou YAML (mais plutôt JSON quand même) ne te conviendrait pas plus que du XML. (Si tu ne veux pas utiliser de XSL(T), le XML me semble moins intéressant… à toi de voir)

Autre chose, de ce que j'ai compris, les bots n'aiment pas (du tout ?) le xml… Je ne sais pas si les choses ont évolué depuis le temps, mais il est probable que s'en tenir à du (X)HTML valide et accessible soit encore la meilleure façon de s'en sortir.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

le plus simple est de faire comme suit :

sur chacun de tes liens, tu mets le HREF normalement, qui t'afficherait la page classiquement. ainsi, si quelqu'un n'a pas de JavaScript, ou si un bot vient, ils pourront naviguer normalement.

en plus, tu rajoutes sur le lien onclick="return naviguer(this)" et dans cette fonction, tu fais récupérer le href de l'objet passé en paramètre, et tu balances cette URL à un framework Javascript style jQuery avec les traitements que tu veux faire après, et surtout tu fais un return false à la fin de ta fonction naviguer.

ainsi, si le javascript est activé, c'est la fonction naviguer qui va prendre le relais et faire de l'ajax, puis annuler le vrai lien grace au return false.

il ne reste plus qu'à modifier côté PHP pour que si l'header HTTP_REQUEST est envoyé au serveur, ca fasse un retour différent de l'HTML.

c'est ce que j'ai fais par exemple sur le site http://2s-creation.com/
Ancien pseudo : lolo

4

Je n'arrive pas à voir l'intérêt d'utiliser de l'Ajax si on peut avoir le contenu de façon statique, en fait ?! C'est sûr que l'Ajax est le bon outil utilisé, dans ce cas ?
(Perso, je n'utilise l'Ajax que pour le développement d'applications Web, donc dans des cas où il n'y a pas de besoin d'indexation)
avatar

5

Voir oui, mais peut-être pas intéragir de la même manière…
L'AJAX ça te permet de ne rafraîchir qu'un bout de la page (celui que tu veux et/ou qu'on te dit de modifier), la navigation normale, c'est une action = une page.
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

6

1. Ça allège la charge du serveur
2. Ça rend la navigation plus agréable pour l’utilisateur
3. Voir le contenu de façon statique est surtout une roue de secours pour ceux qui n’ont pas de JS ou pour justement pouvoir se faire indexer correctement.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

7

C'est pas trop le débat, mais je ne comprends pas ce point...
Sasume (./6) :
1. Ça allège la charge du serveur

Au contraire, on a plus de connexions, et c'est ce qui est le plus coûteux à gérer (il vaut mieux une seule connexion un peu grosse que plusieurs connexions à négocier pour de petits bouts de données).

Sinon, je ne sais pas, je n'arrive pas à trouver fondamentalement intéressant de l'Ajax pour des contenus à indexer (surtout que bon, si c'est indexé et qu'on se retrouve sur une page dynamique en Ajax, on a toutes les chances de ne pas se retrouver avec la donnée correspondant à ce qui a été indexé). Avec les contenus dynamiques en iframe, on répond déjà à une partie du problème...
Enfin, c'est aussi très probablement parce que je n'ai pas rencontré de problématique réelle, hein, mais je m'interroge encore... (et pourtant, j'utilise énormément l'Ajax pour le dev d'applis Web).
avatar

8

Nil (./4) :
Je n'arrive pas à voir l'intérêt d'utiliser de l'Ajax si on peut avoir le contenu de façon statique, en fait ?! C'est sûr que l'Ajax est le bon outil utilisé, dans ce cas ?

Si l'accessibilité fait partie des pré-requis, il faut que tout le contenu soit disponible de façon statique, de toute façon.

Cependant, ajouter une couche d'Ajax permet d'avoir une navigation bien plus agréable pour l'utilisateur : pourquoi lui faire recharger l'intégralité de la page alors qu'il pourrait n'avoir quasiment rien à recharger, et sans interruption de la navigation ?
Par exemple, une galerie photo sera beaucoup plus agréable à consulter si tu peux faire défiler l'intégralité des photos sans changer de page, ce qui implique un chargement progressif des images à venir, un peu comme Bing.
En statique, tu aurais à changer régulièrement de page, ce qui rend la navigation beaucoup plus désagréable... Pourtant, tu as accès au même contenu en Ajax ou en statique...
Et pour le coup, tu peux très bien vouloir que tes images soient indexées par Google tongue
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

9

Flanker (./8) :
Par exemple, une galerie photo sera beaucoup plus agréable à consulter si tu peux faire défiler l'intégralité des photos sans changer de page, ce qui implique un chargement progressif des images à venir

(il dit ça il dit rien cheeky)

10

?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

11

Hmmm, mouais, tu vas arriver à me convaincre tongue... (à vrai dire, comme tout ce qui est vers l'extérieur a des pré-requis d'accessibilité pour nous, fonction publique oblige, je ne me pose pas trop la question : le site doit être 100% fonctionnel sans js).
Cela dit, un tel site uniquement en ajax, c'est souvent pourri pour l'utilisateur (typiquement pas la possibilité de télécharger en lot toutes les images avec un outil, pas de possibilité de générer un site offline...).
avatar

12

Nil (./11) :
Hmmm, mouais, tu vas arriver à me convaincre tongue... (à vrai dire, comme tout ce qui est vers l'extérieur a des pré-requis d'accessibilité pour nous, fonction publique oblige, je ne me pose pas trop la question : le site doit être 100% fonctionnel sans js).

Mais tu peux faire un truc 100% fonctionnel sans JS, et tout de même utiliser Ajax tongue

Cela dit, un tel site uniquement en ajax, c'est souvent pourri pour l'utilisateur (typiquement pas la possibilité de télécharger en lot toutes les images avec un outil, pas de possibilité de générer un site offline...).

Le mot important est *souvent* ^^ Si tout est accessible sans ajax, alors les outils classiques n'auront pas de problème cheeky
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

13

Flanker (./10) :
?

Je pense à ton site ("faites comme moi, c'est parfait" grin)

14

Non, c'est plutôt « c'est mieux comme ça, alors j'essaie de faire pareil » grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

15

exemple d'ajax hyper utile : une liste d'évènements, chaque évènement possède un switch activé/désactivé. quand tu cliques dessus, tu ne recharge en ajax que l'affichage du switch concerné => bcp plus rapide pour l'utilisateur en terme de bande passante, et côté serveur, il ne fait que les requêtes utiles à ce switch, il ne regénère pas toute la liste avec tout ce que ca implique de sous requetes et d'enormes tableaux à générés.
Ancien pseudo : lolo

16

Nil (./7) :
C'est pas trop le débat, mais je ne comprends pas ce point...
Sasume (./6) :
1. Ça allège la charge du serveur
Au contraire, on a plus de connexions, et c'est ce qui est le plus coûteux à gérer (il vaut mieux une seule connexion un peu grosse que plusieurs connexions à négocier pour de petits bouts de données).
Hm, en fait je n’ai aucun chiffre là-dessus, mais intuitivement j’ai tendance à penser que c’est plus cool pour le serveur quand on utilise de l’AJAX : il n’y a pas plus de connexions puisque sur un site statique équivalent à un site AJAXé tu cliques aussi sur chaque lien pour avancer dans la navigation. La différence en AJAX c’est qu’au lieu de recharger une page entière on ne calcule qu’un fragment, d’où l’idée que c’est plus léger pour le serveur. J’ai faux ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

17

Sasume (./16) :
Hm, en fait je n’ai aucun chiffre là-dessus, mais intuitivement j’ai tendance à penser que c’est plus cool pour le serveur quand on utilise de l’AJAX : il n’y a pas plus de connexions puisque sur un site statique équivalent à un site AJAXé tu cliques aussi sur chaque lien pour avancer dans la navigation. La différence en AJAX c’est qu’au lieu de recharger une page entière on ne calcule qu’un fragment, d’où l’idée que c’est plus léger pour le serveur. J’ai faux ?

En fait, je pense que ça dépend vraiment de la façon dont l'Ajax est utilisé (dans le cas que tu décris, effectivement, ça doit être moins demandeur ; dans les cas où on fait des enchaînements de requêtes, ça doit être l'inverse... typiquement, quand tu as un formulaire dont certains éléments vont pouvoir changer dynamiquement en fonction d'autres éléments : il suffit que l'utilisateur change un seul point pour relancer une requête).
avatar

18

Ah oui effectivement, les vérifications de formulaire en AJAX, si elles sont faites champ par champ, sont effectivement probablement plus coûteuses.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

19

Mais c'est tellement plus pratique pour l'utilisateur \o/
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

20

pas forcement, tu peux très bien vérifier l'intégralité du formulaire en Ajax, lors du submit. et ca revient au meme pour l'utilisateur, sauf que c'est moins couteux pour le serveur
Ancien pseudo : lolo

21

pencil Je pense que c’est la meilleure solution.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

22

Le problème, c'est que ça duplique le code de vérification (parce que tu dois forcément revérifier du côté serveur, tu ne peux pas faire confiance au client).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

23

Et en quoi est-ce un problème ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

24

Merci pour les conseils. Je vais essayer de répondre dans l'ordre grin
./2> XML ou JSON en RESTful j'ai pas trop réfléchi en fait. Mais pourquoi pas ^^
./3> Pas mal, je savais pas qu'on pouvait faire comme ça avec le header smile Il faudrait que je fasse un truc du genre. Bon dans l'idéal il faudrait que la barre d'adresse soit mise à jour quand on passe d'une page à l'autre, ça serait plus sympa pour l'utilisateur wink
./4> Le but dans ce cas c'est de décharger le serveur. Je sais c'est pas super pertinent, mais c'est un peu académique aussi wink Je cherche une appli où je pourrai me perfectionner ^^
./14> Un lien vers ton site? smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

25

avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

26

(wow, v9 grin)

[edit] ah non c'est plutôt 0.9 d'après le titre de la page ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

27

Zerosquare (./25) :
http://www.19pouces.net/

non, échec tongue
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

28

Ah c'est pas celui-là ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

29

Oulah, non tongue
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

30

Et tu ne veux pas le poster?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741