JeuWeb - Crée ton jeu par navigateur
fichier function.php trop lourd [résolu] - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : fichier function.php trop lourd [résolu] (/showthread.php?tid=1869)

Pages : 1 2 3


fichier function.php trop lourd [résolu] - exopi - 10-10-2007

Bonjour,
Sur mon jeu ( exopia ), le fichier regroupant les fonctions tient pour l'instant 150ko, je l'aurais surmenet augmenté à 200ko dans 2 ou 3 semaines avec els prochaines majs.
Le problemme c'est que le chargement de ce fichier prend approximativement 0.5 sec, c'est vraiment trop.
J'ai donc 2 choix que j'ai imaginé pour 'linstant :

1- je créé un script qui separe chaque fonction dans un fichier separer dans un repertoire function, et qui parcour lesfichier du jeu pour inclure les fonctions nessecaires au chargement de la page
--> ca permettra un delai de chargement de la apge optimum
-/-> c'est lourd a mettre en place, et pour modifier des trucs, on seretrouve avec des centaines de fichiers c'est galere.

2- je ne sais pas si c'est possible, et c'est le but de ma demande, si on peux faire un index de fonctions comme pour les fonctions de bases de php
--> il n'y aurais pas de chargement des fonctions, pusiqu'elles seront deja précahrgées.
-/-> je ne sais pas comment faire, ni meme si c'est possible sous un mutualisé ( j'ai un 60GP ovh )


Merci d'avance.


RE: fichier function.php trop lourd - Shiwa - 10-10-2007

Tu as aussi la solution 1bis, qui consiste à répartir tes fonctions dans plusieurs blocs, les blocs étant prévus pour qu'une page quelconque du site ne fasse appel qu'à deux ou trois blocs maximum (par exemple en regroupant dans un fichier les fonctions d'affichage, dans un autre les fonctions liées aux pages d'administration etc.).
Ce sera un peu moins optimum mais aussi moins lourd à gérer qu'un fichier par fonction, et si un jour tu as envie de passer à la prog objet ce sera plus facile.

Pour ranger tes fonctions dans l'index par contre, je ne peux malheureusement pas t'aider.


RE: fichier function.php trop lourd - exopi - 10-10-2007

Oui, je comprends, mais quitte a sperarer, autant le faire automatiquement par script, ce sera plus efficace, et pusi si je prends l'habitude, ca me poser plus deproblemme.
Mais je suis intérréssé par la POO, en quoi pourrait-elle m'aider ?
Vu que je "classifie" mes données en tableau a n dimension a n variables:
dans la variable $sort j'ai uneconstance :
$sort['nb']
j'ai jsute a faire un
for ($i=1;$i<=$sort['nb'];$i++){
echo $sort[$i.'joueur'].'<br>'.$sort[$i.'pass'];
}

aprés je peux avoir $sort[$i.'nb'] avec $sort[$i.'/'.$j.'var1'] etc jusqu'a l'infini


RE: fichier function.php trop lourd - pascal - 10-10-2007

avec la POO en PHP5, tu peux utiliser l'autoload, en clair un chargement de classe à la volée, défini par toi même.

l'avantage de la POO, c'est de lier des fonctions et des données dans une même structure. on en parle ici ou là sur le forum.

A+

Pascal


RE: fichier function.php trop lourd - Cartoristal - 10-10-2007

La POO est très bien pour sa.

Une petite question qui risque de vous faire :hahahaha:
Faut obligatoirement des fonctions ? :ninga: ?
Parsque j'avourais que je code sans.
Enfin je tape tout dans la page voulue.
( Je copie colle au besoin si les modules reviennent ... Ce qui est raremement le cas ).


RE: fichier function.php trop lourd - Sephi-Chan - 10-10-2007

Moi je créer des fonctions de contrôle basique, qui contrôlent la taille des chaînes, sont formatage, etc. La plupart renvoient juste TRUE ou FALSE, elles servent donc essentiellement dans des conditions.

Voici quelques exemples :
Code PHP :
<?php 
checkLength
($str, 6, 20);
La fonction vérifie si chaîne $str comprend entre 6 et 20 caractères.

Code PHP :
<?php 
is_positive
($int);
Celle-la vérifie, comme son nom l'indique si la valeur de $int est positive.

Certaines sont un poil plus complexes, et j'en créer donc selon mes besoins, mais j'ai rarement plus d'une dizaine de fonctions personnalisées. Il y a généralement de quoi faire avec toutes les fonctions du langage PHP, dans mon cas les fonctions de caractères (ctype) et les fonctions de test (is).


Sephi-Chan


RE: fichier function.php trop lourd - pascal - 10-10-2007

CARTORISTAL a écrit :La POO est très bien pour sa.

Une petite question qui risque de vous faire :hahahaha:
Faut obligatoirement des fonctions ? :ninga: ?
Parsque j'avourais que je code sans.
Enfin je tape tout dans la page voulue.
( Je copie colle au besoin si les modules reviennent ... Ce qui est raremement le cas ).

rien n'est obligatoire, mais :
1. avec le copier/coller, si tu te trompes et le vois pas tout de suite, tu devras traquer l'erreur partout où elle est copiée.

avec une fonction / classe, le code est centralisé dans un seul fichier, à un seul endroit, et tu es sûr qu'il sera le même pour chaque utilisation.

2. pour les constantes de l'application, utilises tu un fichier de configuration ?
genre les données pour se connecter à la base de données ? oui ?

les fonctions, c'est le même principe : on les définit une seule fois dans le fichier de fonctions, et on les utilise une ou plusieurs fois dans les pages.
ça évite de tout devoir relire et modifier.

3. comment tester un code sans fonction ?

facile, on lance la page et ça marche ou pas et on corrige.
mais comment être sûr qu'un cas particulier ne nous a pas échappé ?
retester chaque page avec toutes les valeurs possibles est long et utopique.

avec une fonction, on peut se créer un fichier de test, utiliser différentes valeurs en entrée de la fonction et tester les résultats attendus. et en plus, on peut relancer les tests une semaine ou trois mois plus tard, lorsqu'on fera une modif de la fonction ( cf les tests unitaires )

voilà quelques avantages des fonctions. l'objet, c'est des fonctions et des données plus étroitement liées, avec des possibilités sympa offertes par le langage PHP.

A+

Pascal


RE: fichier function.php trop lourd - Shiwa - 10-10-2007

Pour revenir sur la POO, c'est surtout pratique pour la lisibilité, l'adaptation et la modularité du code.

Exemple concret : si des objets ont des méthodes et/ou des attributs en commun (par exemple un joueur et un PNJ ont tous les deux un nom, des points de vie, des caracs, du code pour aller chercher tout ça dans la bdd, etc.), tu les fait hériter d'une même classe qui contiendra ces points communs. Avantage : si tu modifie les élements communs (imaginons que tu ajoutes une nouvelle caractéristique ou une méthode pour mettre à jour automatiquement le mana après un lancer de sort), tu n'as à le faire qu'une fois, dans la classe mère, et toutes les classes filles sont modifiées automatiquement.

Autre exemple concret, pour la lisibilité. Compare sans POO :
//Récupération des infos sur le joueur 1
$requete_joueur1='SELECT ... FROM joueurs where pseudo=\''.$pseudo1.'\''
$sql=mysql_query($requeteJoueur1);
$carac_joueur1=mysql_fetcharray(...);
$PDV_joueur1=$resultat['PDV'];
$mana_joueur1=...
...
//Récupération des infos sur le joueur 2
$requete_joueur2=...
...
//Récupération du cout en mana de $sort
$requete_cout_sort_joueur1='SELECTcout FROM... WHERE nom=\''.$sort.'\''
$sql=...
...
//envoi du sort si possible
if ($cout_sort>$mana_joueur1){
//tout un code pour extraire les données sur le sort et appliquer ses effets au joueur 2
}
...

Avec POO:
//Initialisation
$joueur1=new Joueur($pseudo1);
$joueur2=new Joueur($pseudo2);
//envoi du sort si possible
if($joueur1->peutLancer($sort)){
$joueur1->Lancer($sort,$joueur2)
}
...

Certes le premier code n'utilise pas de fonctions, mais les appels de fonction en POO sont quand même plus élégants : beaucoup moins de paramètres à fournir (la plupart sont des attributs de la classe), choix des noms plus simples (pas de confusion entre $joueur->Lancer($sort) et $dé->Lancer() par exemple). Et puis supposons que l'efficacité du sort dépende tout à coup de la résistance du joueur 2 : le code de ta page reste strictement le même en POO, tandis qu'avec une fonction classique il aurait fallu lui rajouter ce paramètre ou rajouter tout un code dans la fonction pour aller le chercher dans la bdd.

En bref, la POO rend les gros projets (notamment en équipe) beaucoup plus lisibles et faciles à faire évoluer. Par contre, comme c'est un niveau d'abstraction supplémentaire, elle peut sembler inutile voire trop lourde pour les codes simples, courts, ou qui évoluent peu.


RE: fichier function.php trop lourd - exopi - 11-10-2007

euh, bah la fonction POO : newJoueur($pseudo1) et peutLancer($sort), j'ai exactement les meme en fonctions^^ en ferais-je sans le vouloir ?
et tout mon code est basé dessus, ce qui rend les pages trés lisibles : par exemple

if ( is_armee($x,$y)){
lancer_combat($x,$y,armee_att($x,$y),armee_def($x,$y));
ajouter_alerte('combat lancé');
}


RE: fichier function.php trop lourd - exopi - 11-10-2007

"( Je copie colle au besoin si les modules reviennent ... Ce qui est raremement le cas )." --> moi ca arrive tout le temps, et heureusement que je fais des fonctions, avec toutes lesmodifs que je faissuper souvent :O ( ca me rapelle mon acien jeu x-strange, qui avait coulé justement parceque le code étépas assez modulaire, du coup il y avait plein de bug partout, et de plus en plus ^^ )