8800 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai voulu faire un test sur les couleurs aujourd'hui.
Pour ce faire, j'ai pensé à jouer sur les codes RGB.

J'ai donc créé trois boucles imbriquées pour visualiser un peu moins de 17 millions de variantes colorées comme ceci :

for ($i=0;$i<256;$i++) {
	for($j=0;$j<256;$j++) {
		for($k=0;$k<256;$k++) {
			echo $i.','.$j.','.$k.'<br/>';
		}
	}
}


Il va sans dire que je fais planter le serveur web à l'exécution de ce code systématiquement Smiley lol

La question est : auriez-vous une idée de génie qui me permette de jongler malgré tout avec l'intégralité des couleurs disponibles sans faire tout planter ?

Merci pour vos idées Smiley cligne

Reka
Modifié par Reka (11 Mar 2016 - 21:03)
Ça se fait relativement rapidement en réalité


<?php

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime; 

for ($i=0;$i<256;$i++) {
	for($j=0;$j<256;$j++) {
		for($k=0;$k<256;$k++) {
			//echo $i.','.$j.','.$k.'<br/>';
		}
	}
}

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds"; 


This page was created in 0.60703492164612 seconds

Par contre afficher autant de valeurs ce n'est pas une bonne idée en effet.
Merci pour ta réponse rapide, Bzh !

Ok, d'accord, c'est donc "juste" l'affichage des données en masse qui le rend malade. C'est plutôt logique !
Mais but, c'est de pouvoir réutiliser ces codes, évidemment.

Supposons donc que je lui propose d'écrire ces 16,7 millions de données dans une DB (juste une fois), tu crois qu'il va supporter?

Et si je tente de les faire écrire dans un fichier txt, plantage ou pas? Quelle taille un fichier txt de 16,7 millions de lignes est-il susceptible de faire à l'arrivée (à supposer qu'un notepad ne compte pas de limites) ? Smiley rolleyes
Je pense pas que ça posera de soucis pour écrire dans un fichier texte.

Le plus simple c'est de faire un fichier .csv et de l'importer ensuite dans phpmyadmin si tu veux une base de donnée. J'ai jamais tester de faire une requête de 17 millions d'enregistrements, c'est pas évident que ça marche Smiley biggol
Modifié par bzh (10 Mar 2016 - 20:32)
Moyen faible Smiley ohwell

( ! ) Fatal error: Maximum execution time of 120 seconds exceeded in C:\wamp\www\_tests\couleur.php on line 55

Le fichier fait déjà 55Mo et ne présente que 3,5 millions de lignes Smiley decu

Bon, allez, j'augmente l'execution time à 720 seconds Smiley biggol

Problème 2 : la transformation du fichier en CSV pose à son tour problème : 1 millions de lignes autorisées par fichier avec libre office, et 65536 avec µ$ Excel Smiley fache
Modifié par Reka (10 Mar 2016 - 21:18)
Administrateur
Bonjour,

pour réduire la quantité de données, tu peux te contenter d'un échantillon en prenant 1 valeur sur 2 ou sur 4 : pas 256 (R, V, B) possibles mais 128^3 ou 64^3, soit 8 (=2^3) ou 64 (=4^3) fois moins !

Selon le calcul ou traitement que tu souhaites faire, il y a peut-être moyen de se passer entièrement de calcul et d'utiliser une image ou canvas de toutes les couleurs (façon "roue de couleur") recouverte par un filtre SVG ou CSS...
Ou si une fonction mathématique ayant pour paramètre R, V et B amène à un résultat après calcul, il est possible de gagner beaucoup de temps si elle est par exemple croissante (cas du contraste de couleurs où il faudrait calculer 16M de couleurs vs 16M de couleurs mais en fait non, aucun besoin)
16 millions d'enregistrements dans une base de donnée comme MySQL, normalement il n'y a aucun problème, ça se fait couramment.

Générer un fichier qui fera à la louche 200 Mo, par contre, ça ne devrait pas te prendre 120s à mon avis. Sinon je plains ceux qui font de la vidéo ou de la modélisation 3D.
Pense à la tamporisation poura ccélérer le processus.

Sinon, es-tu sûr que c'est vraiment le serveur web qui plante et pas tout simplement ton navigateur lors de l'affichage de toutes ces lignes ?
Etant donné qu'un firefox ou un chrome à vide occupe déjà 200 Mo, ça ne m'étonnerais pas que le chargement de cette « page » fasse juste exploser la mémoire disponible de ta machine.

Cependant, plus généralement, je m'interroge aussi sur le fond de ta démarche. Que ce soit question affichage, personne n'est capable de distinguer autant de variations, ou question données, il n'y a que peu d'intérêt à stocker autant de données si elles sont si facilement calculables.
QuentinC a écrit :
il n'y a que peu d'intérêt à stocker autant de données si elles sont si facilement calculables.


Je me faisais la même réflexion.

Sinon un csv, c'est juste un fichier de texte qu'il est facile de générer directement donc pas besoin d'aller l'ouvrir avec un tableur pour faire une conversion.
QuentinC a écrit :
Sinon, es-tu sûr que c'est vraiment le serveur web qui plante et pas tout simplement ton navigateur lors de l'affichage de toutes ces lignes ?
Etant donné qu'un firefox ou un chrome à vide occupe déjà 200 Mo, ça ne m'étonnerais pas que le chargement de cette « page » fasse juste exploser la mémoire disponible de ta machine.


Non, je ne suis pas sûre. Dans les faits, Firefox m'a envoyée blackbouler 10 x. J'ai fait mes tests en local (sous WAMP) aussi, il faut dire : c'est p-e plus fragile qu'un "vrai" serveur web.


QuentinC a écrit :
Cependant, plus généralement, je m'interroge aussi sur le fond de ta démarche. Que ce soit question affichage, personne n'est capable de distinguer autant de variations, ou question données, il n'y a que peu d'intérêt à stocker autant de données si elles sont si facilement calculables.


Sinon, bien vu, j'ai dormi dessus et ma démarche est complètement inutile, en fait. Je peux très bien jouer sur les 3 variables indépendamment (3x256) et créer un algorithme qui trie à la grosse louche les interactions entre ces 3 variables. Je pense donc pouvoir me passer d'une DB, d'autant que 16.7 millions de data, c'est vraiment inutilement trop par rapport à ce que je dois en faire, c'est vrai !

Les questions posées hier ne se posent donc plus ajd. Mes chipotages étaient très formatifs, je ne regrette pas d'avoir potassé 4h sur mon problème hier soir, mais quand même... la nuit porte conseil, je devrais apprendre à stopper l'acharnement thérapeutique, surtout quand il est aussi vide de sens Smiley biggol

Merci à vous trois pour avoir fait progresser ma réflexion !
Bon week-end Smiley smile
Modifié par Reka (11 Mar 2016 - 20:54)
a écrit :
J'ai fait mes tests en local (sous WAMP) aussi, il faut dire : c'est p-e plus fragile qu'un "vrai" serveur web.


Ah oui alors forcément... WAMP est assez fragile. Parfois il plante avec seulement 2 ou 3 warnings en boucle.

Mais sous linux avec un vrai apache, je suis sûr que les 200 Mo passent comme sur des roulettes.