Posted to tcl by de at Thu Jan 21 14:00:43 GMT 2021view raw

  1. #load ./libtdom0.9.3.so
  2. package require tdom 0.9.3
  3. set nrNoise 10
  4. set noiseElement "elementNoise"
  5. set nrMeat 40
  6. set meatPrefix "element"
  7. set size 1000000
  8. proc generateInput {nrNoise noiseElement nrMeat meatPrefix size} {
  9. set xml "<doc>"
  10. set names [list]
  11. for {set i 0} {$i < $nrMeat} {incr i} {
  12. lappend names $meatPrefix$i
  13. }
  14. while {[string length $xml] < $size} {
  15. for {set i 0} {$i < $nrMeat} {incr i} {
  16. append xml [string repeat "<$noiseElement/>" $nrNoise]
  17. append xml "<$meatPrefix$i/>\n"
  18. }
  19. }
  20. append xml "</doc>"
  21. return [list $xml $names]
  22. }
  23. proc testnames {xml names} {
  24. tdom::pullparser pp
  25. pp input $xml
  26. set result [list]
  27. pp next
  28. puts "-names [time {
  29. while {[pp state] ne "END_DOCUMENT"} {
  30. lappend result [pp tag]
  31. pp find-element -names $names
  32. }
  33. }]"
  34. pp delete
  35. }
  36. proc testnameshashed {xml names} {
  37. tdom::pullparser pp
  38. pp input $xml
  39. set result [list]
  40. pp next
  41. puts "-names hashed [time {
  42. while {[pp state] ne "END_DOCUMENT"} {
  43. lappend result [pp tag]
  44. pp find-element -names $names -hash
  45. }
  46. }]"
  47. pp delete
  48. }
  49. proc testnameshashednext {xml names} {
  50. tdom::pullparser pp
  51. pp input $xml
  52. set result [list]
  53. pp next
  54. puts "-next [time {
  55. pp find-element -names $names
  56. while {[pp state] ne "END_DOCUMENT"} {
  57. lappend result [pp tag]
  58. pp find-element -next
  59. }
  60. }]"
  61. pp delete
  62. }
  63. foreach {nrNoise noiseElement nrMeat meatPrefix size} {
  64. 10 "elementNoise" 40 "element" 1000000
  65. 5 "elementNoise" 5 "element" 1000000
  66. 5 "elementNoise" 5 "e" 1000000
  67. 2 "elementNoise" 5 "element" 1000000
  68. 2 "elementNoise" 100 "element" 1000000
  69. 20 "elementNoise" 100 "element" 1000000
  70. 20 "earlydistinct" 100 "element" 1000000
  71. 100 "elementNoise" 20 "element" 1000000
  72. } {
  73. puts "$nrNoise $noiseElement $nrMeat $meatPrefix $size"
  74. lassign [generateInput $nrNoise $noiseElement $nrMeat $meatPrefix $size] xml names
  75. testnames $xml $names
  76. testnameshashed $xml $names
  77. testnameshashednext $xml $names
  78. puts ""
  79. }

AltStyle によって変換されたページ (->オリジナル) /