compression_algorithms.pl 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/usr/bin/perl
  2. # Rough performance comparison of some compression modules on a given file given as an argument.
  3. use 5.010;
  4. use strict;
  5. use warnings;
  6. use Time::HiRes qw(gettimeofday tv_interval);
  7. my $data_str = do {
  8. open(my $fh, '<:raw', $ARGV[0] // $0)
  9. or die "Can't open file <<$ARGV[0]>> for reading: $!";
  10. local $/;
  11. <$fh>;
  12. };
  13. say "Raw : ", length($data_str);
  14. say '';
  15. eval {
  16. my $t0 = [gettimeofday];
  17. require IO::Compress::Gzip;
  18. IO::Compress::Gzip::gzip(\$data_str, \my $data_gzip);
  19. say "Gzip: ", length($data_gzip);
  20. say "Time: ", tv_interval($t0, [gettimeofday]);
  21. say '';
  22. };
  23. eval {
  24. my $t0 = [gettimeofday];
  25. require IO::Compress::Bzip2;
  26. IO::Compress::Bzip2::bzip2(\$data_str, \my $data_bzip2);
  27. say "Bzip: ", length($data_bzip2);
  28. say "Time: ", tv_interval($t0, [gettimeofday]);
  29. say '';
  30. };
  31. eval {
  32. my $t0 = [gettimeofday];
  33. require IO::Compress::RawDeflate;
  34. IO::Compress::RawDeflate::rawdeflate(\$data_str, \my $data_raw_deflate);
  35. say "RDef: ", length($data_raw_deflate);
  36. say "Time: ", tv_interval($t0, [gettimeofday]);
  37. say '';
  38. };
  39. eval {
  40. my $t0 = [gettimeofday];
  41. require IO::Compress::Deflate;
  42. IO::Compress::Deflate::deflate(\$data_str, \my $data_deflate);
  43. say "Defl: ", length($data_deflate);
  44. say "Time: ", tv_interval($t0, [gettimeofday]);
  45. say '';
  46. };
  47. eval {
  48. my $t0 = [gettimeofday];
  49. require IO::Compress::Zip;
  50. IO::Compress::Zip::zip(\$data_str, \my $data_zip);
  51. say "Zip : ", length($data_zip);
  52. say "Time: ", tv_interval($t0, [gettimeofday]);
  53. say '';
  54. };
  55. eval {
  56. my $t0 = [gettimeofday];
  57. require IO::Compress::Lzf;
  58. IO::Compress::Lzf::lzf(\$data_str, \my $data_lzf);
  59. say "Lzf : ", length($data_lzf);
  60. say "Time: ", tv_interval($t0, [gettimeofday]);
  61. say '';
  62. };
  63. eval {
  64. my $t0 = [gettimeofday];
  65. require IO::Compress::Lzip;
  66. IO::Compress::Lzip::lzip(\$data_str, \my $data_lzip);
  67. say "Lzip: ", length($data_lzip);
  68. say "Time: ", tv_interval($t0, [gettimeofday]);
  69. say '';
  70. };
  71. eval {
  72. my $t0 = [gettimeofday];
  73. require IO::Compress::Lzop;
  74. IO::Compress::Lzop::lzop(\$data_str, \my $data_lzop);
  75. say "Lzop: ", length($data_lzop);
  76. say "Time: ", tv_interval($t0, [gettimeofday]);
  77. say '';
  78. };
  79. eval {
  80. my $t0 = [gettimeofday];
  81. require IO::Compress::Zstd;
  82. IO::Compress::Zstd::zstd(\$data_str, \my $data_zstd);
  83. say "Zstd: ", length($data_zstd);
  84. say "Time: ", tv_interval($t0, [gettimeofday]);
  85. say '';
  86. };
  87. 0 && eval {
  88. my $t0 = [gettimeofday];
  89. require IO::Compress::Brotli;
  90. my $data_bro = IO::Compress::Brotli::bro($data_str);
  91. say "Brot: ", length($data_bro);
  92. say "Time: ", tv_interval($t0, [gettimeofday]);
  93. say '';
  94. };