SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
25
-2
13
14
16
16
14
11
13
7
9
15
8
25
25
34
AUJOURD’HUI
APRÈS-MIDI
19 JUIN 2020
@FredBouchery
Structure de données
?
array[]
32 768 (215
)
65 536 (216
)
131 072 (217
)
262 144 (218
)
524 288 (219
)
Ordre croissant Ordre décroissant array_fill
46 ms
61 ms
25ms
Remplissage x 1M
2009 (PHP 5.3)
SPL Structures des données
SplFixedArray
Array SplFixedArray
33Mo
16Mo
Temps lecture/écriture :
Peu de différence
1 million d’entiers
SplDoublyLinkedList
● push/pop
● shift/unshift
● ArrayAccess
● Iterator (+ prev)
● top/bottom
● add ?!
array SplDoublyLinkedList (10 millions d’entiers)
push Itération get pop shift
459 ms
565 ms
80 ms
181 ms
145 ms
252 ms
211 ms
21 minutes 9 heures
212 ms
SplStack
Array SplStack
587 ms 705 ms
536 Mo
400 Mo
Push x 10M
Array SplStack
281 ms
241 ms
536 Mo
0 Mo
Pop x 10M
SplQueue
Array SplQueue
587 ms
702 ms536 Mo
400 Mo
Push x 10M
Array SplQueue
13 s
3 ms
4,2 Mo
0 Mo
Pop x 100K
3 ms
SplHeap
Array SplMinHeap
2448 ms
2851 ms
537 Mo
268 Mo
insert x 10M
Array SplMinHeap
288 ms
4481 ms
Itération x 10M
Itération = pop
SplPriorityQueue
SplMaxHeap
Juillet 2016 :
PHP Data Structures
« PHP-DS »
Rudi Theunissen
DsVector
DsDeque
DsMap
DsSet
DsStack
DsQueue
DsPriorityQueue
> pecl install ds
DsVector
Array DsVector
684 ms
612 ms
536 Mo
183 Mo
Push x 10M
Itération x 10M
Array DsVector
85 ms
135 ms
Array DsVector DsStack
256 ms
183 ms
(pop x 10M)
182 ms
DsStack
DsDeque
Array DsVector DsDeque
684 ms
612 ms
536 Mo
183 Mo
Push x 10M
680 ms
268 Mo
Itération x 10M
Array DsVector DsDeque
84 ms
146 ms
136 ms
shift x 100k
Array DsVector DsDeque
13 s
2 ms
2,3 s
Array DsDeque DsQueue
13 s
2 ms2 ms
DsQueue
(pop x 100k)
SplPriorityQueue DsPriorityQueue SplPriorityQueue DsPriorityQueue
249 ms
460 ms
200 ms
583 ms
push pop
DsPriorityQueue
(x10M)
array DsMap array DsMap
1186 ms
467 ms
1203 ms
603 ms
(x10M)
set get
DsMap
DsSet
Array DsSet
774 ms
8 ms
Add x 100K
100x plus rapide !
SPL
vs
PHP-DS
(vs array)
DsVector (2x moins de mémoire)
Iterable, countable,
ArrayAccess,
push/pop,
shift/unshift, map,
merge, reduce, sort,
sum, copy, join, etc.
SplStack
Iterable, countable,
push/pop, ArrayAccess,
shift/unshift.
DsStack
traversable,
countable,
push/pop,
clear,
copy,
peek
DsStack - DsQueue
Mêmes méthodes :
push/pop
DsMap et DsSet
Perf pas mieux qu’un array !
→ Type de clef
→ Méthodes
Doc sur php.net
https://php.net/ds
https://github.com/php-ds/polyfill
Polyfill
> composer require php-ds/php-ds
Doit-on installer PHP-DS ?
SPL DS→
Créditsphotos :pexels.com,pixabay.com,DreamWorks
@FredBouchery

Mais conteúdo relacionado

Mais de Frederic Bouchery

On a tué mon agilité. Phptour 2016
On a tué mon agilité. Phptour 2016On a tué mon agilité. Phptour 2016
On a tué mon agilité. Phptour 2016Frederic Bouchery
 
Breizhcamp 2015 : Pourquoi PHP ?
Breizhcamp 2015 : Pourquoi PHP ?Breizhcamp 2015 : Pourquoi PHP ?
Breizhcamp 2015 : Pourquoi PHP ?Frederic Bouchery
 
Sauf erreur-je-ne-me-trompe-jamais
Sauf erreur-je-ne-me-trompe-jamaisSauf erreur-je-ne-me-trompe-jamais
Sauf erreur-je-ne-me-trompe-jamaisFrederic Bouchery
 
Breizhcamp 2014 : Une partie de Cache-Cache
Breizhcamp 2014 : Une partie de Cache-CacheBreizhcamp 2014 : Une partie de Cache-Cache
Breizhcamp 2014 : Une partie de Cache-CacheFrederic Bouchery
 

Mais de Frederic Bouchery (6)

On a tué mon agilité. Phptour 2016
On a tué mon agilité. Phptour 2016On a tué mon agilité. Phptour 2016
On a tué mon agilité. Phptour 2016
 
Pattern IBP
Pattern IBPPattern IBP
Pattern IBP
 
Classes anonymes
Classes anonymesClasses anonymes
Classes anonymes
 
Breizhcamp 2015 : Pourquoi PHP ?
Breizhcamp 2015 : Pourquoi PHP ?Breizhcamp 2015 : Pourquoi PHP ?
Breizhcamp 2015 : Pourquoi PHP ?
 
Sauf erreur-je-ne-me-trompe-jamais
Sauf erreur-je-ne-me-trompe-jamaisSauf erreur-je-ne-me-trompe-jamais
Sauf erreur-je-ne-me-trompe-jamais
 
Breizhcamp 2014 : Une partie de Cache-Cache
Breizhcamp 2014 : Une partie de Cache-CacheBreizhcamp 2014 : Une partie de Cache-Cache
Breizhcamp 2014 : Une partie de Cache-Cache
 

Afup Day 2020 en linge: Les structures de données en PHP