Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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
21...
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
(x1...
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, c...
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
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Afup Day 2020 en linge: Les structures de données en PHP
Prochain SlideShare
Chargement dans…5
×

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

Quand on débute en PHP, on tombe très vite dans l’usage intensif des tableaux associatifs, puis on s’oriente progressivement vers des hiérarchies de classes, value objects, itérateurs. Pourtant, il existe tout un ensemble de classes dans la bibliothèque standard PHP (SPL) qui semble être boudé par les développeurs, pourquoi ? Peut-être parce que ces classes ne sont pas très pratiques à utiliser ou apporte peu de chose. C’est de ce constat qu’est née l’extension PHP-DS pour PHP 7. Petit tour d’horizon.

  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

  1. 1. 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
  2. 2. Structure de données ?
  3. 3. array[]
  4. 4. 32 768 (215 ) 65 536 (216 ) 131 072 (217 ) 262 144 (218 ) 524 288 (219 )
  5. 5. Ordre croissant Ordre décroissant array_fill 46 ms 61 ms 25ms Remplissage x 1M
  6. 6. 2009 (PHP 5.3) SPL Structures des données
  7. 7. SplFixedArray
  8. 8. Array SplFixedArray 33Mo 16Mo Temps lecture/écriture : Peu de différence 1 million d’entiers
  9. 9. SplDoublyLinkedList ● push/pop ● shift/unshift ● ArrayAccess ● Iterator (+ prev) ● top/bottom ● add ?!
  10. 10. 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
  11. 11. SplStack
  12. 12. Array SplStack 587 ms 705 ms 536 Mo 400 Mo Push x 10M
  13. 13. Array SplStack 281 ms 241 ms 536 Mo 0 Mo Pop x 10M
  14. 14. SplQueue
  15. 15. Array SplQueue 587 ms 702 ms536 Mo 400 Mo Push x 10M
  16. 16. Array SplQueue 13 s 3 ms 4,2 Mo 0 Mo Pop x 100K 3 ms
  17. 17. SplHeap
  18. 18. Array SplMinHeap 2448 ms 2851 ms 537 Mo 268 Mo insert x 10M
  19. 19. Array SplMinHeap 288 ms 4481 ms Itération x 10M Itération = pop
  20. 20. SplPriorityQueue SplMaxHeap
  21. 21. Juillet 2016 : PHP Data Structures « PHP-DS » Rudi Theunissen
  22. 22. DsVector DsDeque DsMap DsSet DsStack DsQueue DsPriorityQueue > pecl install ds
  23. 23. DsVector
  24. 24. Array DsVector 684 ms 612 ms 536 Mo 183 Mo Push x 10M
  25. 25. Itération x 10M Array DsVector 85 ms 135 ms
  26. 26. Array DsVector DsStack 256 ms 183 ms (pop x 10M) 182 ms DsStack
  27. 27. DsDeque
  28. 28. Array DsVector DsDeque 684 ms 612 ms 536 Mo 183 Mo Push x 10M 680 ms 268 Mo
  29. 29. Itération x 10M Array DsVector DsDeque 84 ms 146 ms 136 ms
  30. 30. shift x 100k Array DsVector DsDeque 13 s 2 ms 2,3 s
  31. 31. Array DsDeque DsQueue 13 s 2 ms2 ms DsQueue (pop x 100k)
  32. 32. SplPriorityQueue DsPriorityQueue SplPriorityQueue DsPriorityQueue 249 ms 460 ms 200 ms 583 ms push pop DsPriorityQueue (x10M)
  33. 33. array DsMap array DsMap 1186 ms 467 ms 1203 ms 603 ms (x10M) set get DsMap
  34. 34. DsSet
  35. 35. Array DsSet 774 ms 8 ms Add x 100K 100x plus rapide !
  36. 36. SPL vs PHP-DS (vs array)
  37. 37. DsVector (2x moins de mémoire) Iterable, countable, ArrayAccess, push/pop, shift/unshift, map, merge, reduce, sort, sum, copy, join, etc.
  38. 38. SplStack Iterable, countable, push/pop, ArrayAccess, shift/unshift.
  39. 39. DsStack traversable, countable, push/pop, clear, copy, peek
  40. 40. DsStack - DsQueue Mêmes méthodes : push/pop
  41. 41. DsMap et DsSet Perf pas mieux qu’un array ! → Type de clef → Méthodes
  42. 42. Doc sur php.net https://php.net/ds
  43. 43. https://github.com/php-ds/polyfill Polyfill > composer require php-ds/php-ds
  44. 44. Doit-on installer PHP-DS ?
  45. 45. SPL DS→
  46. 46. Créditsphotos :pexels.com,pixabay.com,DreamWorks @FredBouchery

×