Aller au contenu

Quel langage utiliser ?


Alonnka

Sujets conseillés

Bonjour à tous,

Je vais tenter de vous expliquer au mieux mon problème.

J'ai actuellement un outils de gestion (web) en PHP pour gérer les livres empruntés dans une bibliothèque. Loutil fonctionnait bien au début mais maintenant que le nombre de livre emprunté simultanément a énormément augmenté loutil rencontre des problèmes de lenteur.

En effet, il dois à chaque action faite sur la page (ex : livre rentré, livre, sorti, retard prévu, ...) la recharger complètement. Donc requête SQL puis affichage des 150 livres sortis (ou pas) avec des informations diverses et variées et ceci prend un temps considérable (la base de donnée n'est pas forcement super bien structurée non plus mais ça je n'ai pas la main dessus). Bref je cherche un moyen de réduire ce temps d'exécution.

La solution de refaire complètement l'outil a été acceptée mais ma question c'est le faire avec quoi. Si je le refais en PHP je risque d'avoir à nouveau des problèmes de lenteur (même en programmant objet). On m'impose un outil web pour des raisons d'utilisation multi-plateforme.

Le top ça serais un langage capable de ne pas recharger la page, juste modifier la ligne à l'écran (et dans la BDD) et avec un rafraîchissement des "différences" toute les minutes par exemple (oui car plusieurs personne travail sur l'outil en même temps).

Je me suis documenté sur le langage PERL mais jai peur davoir le même problème quavec PHP.

Quelqu'un aurait-il un langage à me conseiller ?

Lien vers le commentaire
Partager sur d’autres sites

Le langage n'a rien a voir avec la lenteur que tu constates (car je fait tourne mes gros sites sur des machines antédiluviennes et les perfs sont tres bonnes). D'autant plus que 150 references c'est vraiment peu.

Pour moi tu as 2 problemes :

  • design generale de l'application : tu devrais commence par te demande si oui ou non tu dois vraiment affiche toutes les references a chaque fois ... paske meme si tu solutionnes tes problemes actuels, c'est reculer pour mieux sauter car un jour ou l'autre, tu rajoutera des references et tu tombera dans le meme travers. Verifie par la meme si tes pages sont bien construites et ne contiennent pas du code inutile.
  • Struturation des donnees : si ta bdd rame avec si peut de donner, c'est qu'elle est mal configuree, mal penser (par exemple au niveau des relations entre tables), et qu'il y manque probablement des indexes. Dans le meme genre, verifie les infos qui sont dedans (une image de couverture par exemple, n'a strictement rien a faire dans une BDD).

Pour ta question concernant la mise a jour d'une seul partie de la page, ca ce fait facilement en javascript (recherche autour d'AJAX).

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, je suis assez d'accord avec destroyedlolo. PHP n'est pas la cause de tes ralentissements.

Il va falloir que tu optimise ta structure de base données (architecture et utilise des index) et tes appels au serveur MySQL dans ton code PHP : Ouvre la connexion, execute tes requêtes en utilisant des LIMIT et ferme ta connexion. Ensuite tu peux traiter les données et les afficher.

Peut-être aussi que tout simplement ton serveur n'est plus assez puissant...

Modifié par blman
Lien vers le commentaire
Partager sur d’autres sites

design generale de l'application : tu devrais commence par te demande si oui ou non tu dois vraiment affiche toutes les references a chaque fois ... paske meme si tu solutionnes tes problemes actuels, c'est reculer pour mieux sauter car un jour ou l'autre, tu rajoutera des references et tu tombera dans le meme travers. Verifie par la meme si tes pages sont bien construites et ne contiennent pas du code inutile.

Alors actuellement le code des pages est en effet extrêmement lourd (surtout à cause d'une utilisation plus qu'abusive du javascript) mais cela n'intervient pas sur le temps de génération de la page mais sur son affichage et son interprétation par le client. Or, mon problème intervient aussi bien sur un vieux PC que sur une machine de course.

Struturation des donnees : si ta bdd rame avec si peut de donner, c'est qu'elle est mal configuree, mal penser (par exemple au niveau des relations entre tables), et qu'il y manque probablement des indexes. Dans le meme genre, verifie les infos qui sont dedans (une image de couverture par exemple, n'a strictement rien a faire dans une BDD).

Ca je ne m'en suis pas caché la BDD est en effet une véritable catastrophe mais j'ai aussi dit que malheureusement pour le moment je ne peu rien y faire.

Pour ta question concernant la mise a jour d'une seul partie de la page, ca ce fait facilement en javascript (recherche autour d'AJAX).

Ce n'est pas une partie de la page mais en faite les nouvelles information de la BDD. Exemple : un livre viens de revenir et il a été rentré par quelqu'un d'autre, je voudrais que la ligne du livre s'enlève chez les autres et ce sans avoir à recharger toute la page. Je me doute bien que je ne peux pas le faire automatiquement mais faire en sorte que les différences se mettent à jour automatiquement une fois par minute.

Lien vers le commentaire
Partager sur d’autres sites

Alors :

1- Allège ton javascript. Personnellement, j'ais déjà travaillé sur des projets nécéssitant beaucoup l'utilisation de javascript, mais jamais de là à faire ramer une machine. Attention, tu a des fonctions JS qui consomment énormément de ressources, voire si tu ne peux pas les remplacer par du code plus léger.

2- Si tu ne peux rien faire pour ta BDD, avec n'importe quel langage, ton temps d'éxécution des pages sera long. Mais je doute que tu ne puisse rien y faire, déjà essai de rajouter des INDEX sur tes champs qui sont souvent utilisés dans les clauses WHERE, utilise des LIMIT pour limiter la charge de mémoire vive et diminue des temps de connexion au serveur de BDD en faisant tes requêtes en début de script et en fermant ta connexion le plus tôt possible; Tu gagnera énormément en performance.

3- Justement AJAX est très bien adapté pour recharger une partie de la page ou pour recharger les infos toutes les n minutes.

Lien vers le commentaire
Partager sur d’autres sites

1- Allège ton javascript. Personnellement, j'ais déjà travaillé sur des projets nécéssitant beaucoup l'utilisation de javascript, mais jamais de là à faire ramer une machine. Attention, tu a des fonctions JS qui consomment énormément de ressources, voire si tu ne peux pas les remplacer par du code plus léger.

Le javascript en question n'est malheureusement pas de moi et je dois avoué qu'il me dépasse un peu, de ce que j'ai compris de son utilité il gère toute la page ; la page est actuellement qu'une immense fonction javascript (près de 100Ko) qui ne s'arrête jamais d'où certainement une des cause des problèmes de lenteur.

2- Si tu ne peux rien faire pour ta BDD, avec n'importe quel langage, ton temps d'éxécution des pages sera long. Mais je doute que tu ne puisse rien y faire, déjà essai de rajouter des INDEX sur tes champs qui sont souvent utilisés dans les clauses WHERE, utilise des LIMIT pour limiter la charge de mémoire vive et diminue des temps de connexion au serveur de BDD en faisant tes requêtes en début de script et en fermant ta connexion le plus tôt possible; Tu gagnera énormément en performance.

Là je vois 3 suggestion :1) indexé les champ : J'ai déjà fait cette demande à la personne qui gère le système et elle a refusé (je vous passe les détails mais vous comprendrez que la personne nest pas forcement très maline), 2) LIMIT, là c'est tout vu le serveur est un serveur MSSQL donc le paramètre LIMIT on l'oublis ^^, 3) Faire les requête en début de script : j'ai toujours fais ça :).

3- Justement AJAX est très bien adapté pour recharger une partie de la page ou pour recharger les infos toutes les n minutes.

Je vais potasser ça un peu mais je ne suis pas un fan de javascript.

Lien vers le commentaire
Partager sur d’autres sites

Le javascript en question n'est malheureusement pas de moi et je dois avoué qu'il me dépasse un peu, de ce que j'ai compris de son utilité il gère toute la page ; la page est actuellement qu'une immense fonction javascript (près de 100Ko) qui ne s'arrête jamais d'où certainement une des cause des problèmes de lenteur.

Tu as vraiment besoin d'avoir la totalité des livres sous les yeux ?

Je gère une "centrale" d'achat pour des pharmacies, pour des commandes groupées avec remise selon qté, on a 7000 produits tu imagines bien que je ne peux pas tout afficher !

Une case de recherche (par libellé, labo, ean...) avec submit à chaque caractère m'affiche en dessous tous les produits correspondants (attention les <table> contenant pleins de lignes sont super lents à afficher, d'où peut-être aussi tes lenteurs). Ensuite sur chaque ligne tu peux avoir ta dispo par exemple, emprunté par telle personne telle jour...

Pour sortir ou rentrer un bouquin, tu retapes la réf dans la zone de recherche (ou un double clic sur la ligne si elle est déjà l'écran).

Si tu veux vraiment palier au fait que les utilisateurs restent sur le page et donc n'ont pas forcément l'info à jour, tu peux là utiliser AJAX mais idem, si un jour il y a 3000 réf, pas sûr que ça fonctionne.

Même si la base est mal conçue, mal indexée, avec des images, c'est pas une recherche sur 150 lignes qui va prendre 2 secondes... ou alors avec des tonnes de jointures inutiles et sans champs.

Lien vers le commentaire
Partager sur d’autres sites

Tu as vraiment besoin d'avoir la totalité des livres sous les yeux ?

Je gère une "centrale" d'achat pour des pharmacies, pour des commandes groupées avec remise selon qté, on a 7000 produits tu imagines bien que je ne peux pas tout afficher !

Une case de recherche (par libellé, labo, ean...) avec submit à chaque caractère m'affiche en dessous tous les produits correspondants (attention les <table> contenant pleins de lignes sont super lents à afficher, d'où peut-être aussi tes lenteurs). Ensuite sur chaque ligne tu peux avoir ta dispo par exemple, emprunté par telle personne telle jour...

Pour sortir ou rentrer un bouquin, tu retapes la réf dans la zone de recherche (ou un double clic sur la ligne si elle est déjà l'écran).

Ca a été mon premier reflex de dire qu'il serait plus simple de ne pas afficher tous les livres mais on me demande d'avoir une visualisation global, sur plusieurs jours et pour plusieurs livres (pas tous mais souvent toute une catégorie). Sur cette visualisation global j'ai des liens vers une fiche de retour de livre (là je part de la page de visualisation et ça va tout de suite mieux).

Merci en tout cas à tous pour votre aide, je vais voir ce que je peux faire.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...