FastRSS

Parse RSS feeds very quickly

Speed

Currently this is already much faster than most of the pure elixir/erlang packages out there. In benchmarks there are speed improvements anywhere between 5.94x - 49.03x over the next fastest package ([feeder_ex])(https://github.com/manukall/feeder_ex) that was tested.

Compared to the slowest elixir options tested (feed_raptor, elixir_feed_parser), FastRSS was sometimes 255.53x faster and used 5,412,308.17x less memory (0.00156 MB vs 8423.70 MB).

Installation

This package is available on hex.

It can be installed by adding fast_rss to your list of dependencies in mix.exs:

def deps do
  [
    {:fast_rss, "~> 0.2.0"}
  ]
end

You also need the rust compiler installed: https://www.rust-lang.org/tools/install

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Usage

There is only one function it takes an RSS string and outputs an {:ok, map()} with string keys.

iex(1)>  {:ok, map_of_rss} = FastRSS.parse("...rss_feed_string...")
iex(2)> Map.keys(map_of_rss)
["categories", "cloud", "copyright", "description", "docs", "dublin_core_ext",
 "extensions", "generator", "image", "items", "itunes_ext", "language",
 "last_build_date", "link", "managing_editor", "namespaces", "pub_date",
 "rating", "skip_days", "skip_hours", "syndication_ext", "text_input", "title",
 "ttl", "webmaster"]

The docs can be found at https://hexdocs.pm/fast_rss.

Benchmark

Benchmark run from 2020-02-22 05:23:47.524699Z UTC

System

Benchmark suite executing on the following system:

Operating SystemmacOS
CPU InformationIntel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Number of Available Cores16
Available Memory32 GB
Elixir Version1.10.1
Erlang Version22.2.6

Configuration

Benchmark suite executing with the following configuration:

:time30 s
:parallel1
:warmup5 s

Statistics

Input: anxiety

Run Time

NameIPSAverageDevitationMedian99th %
fast_rss187.875.32 ms±7.77%5.50 ms6.07 ms
feeder_ex3.83260.98 ms±4.31%257.94 ms292.82 ms
feed_raptor3.01331.82 ms±1.68%329.61 ms354.81 ms
elixir_feed_parser1.95512.96 ms±2.63%511.14 ms560.28 ms

Comparison

NameIPSSlower
fast_rss187.87 
feeder_ex3.8349.03x
feed_raptor3.0162.34x
elixir_feed_parser1.9596.37x

Memory Usage

NameMemoryFactor
fast_rss0.00153 MB 
feeder_ex17.21 MB11223.73x
feed_raptor268.63 MB175173.81x
elixir_feed_parser313.30 MB204302.48x

Input: ben

Run Time

NameIPSAverageDevitationMedian99th %
fast_rss83.8811.92 ms±9.92%12.32 ms14.95 ms
feeder_ex13.3375.04 ms±3.23%74.61 ms80.51 ms
elixir_feed_parser3.58279.04 ms±2.68%279.29 ms301.63 ms
feed_raptor0.482073.09 ms±0.63%2071.30 ms2099.29 ms

Comparison

NameIPSSlower
fast_rss83.88 
feeder_ex13.336.29x
elixir_feed_parser3.5823.41x
feed_raptor0.48173.9x

Memory Usage

NameMemoryFactor
fast_rss0.00153 MB 
feeder_ex27.86 MB18169.98x
elixir_feed_parser163.88 MB106864.74x
feed_raptor1577.38 MB1028611.82x

Input: daily

Run Time

NameIPSAverageDevitationMedian99th %
fast_rss32.520.0308 s±8.07%0.0317 s0.0349 s
feeder_ex5.030.199 s±1.38%0.198 s0.22 s
elixir_feed_parser0.641.57 s±1.03%1.57 s1.60 s
feed_raptor0.1277.86 s±0.28%7.85 s7.89 s

Comparison

NameIPSSlower
fast_rss32.52 
feeder_ex5.036.47x
elixir_feed_parser0.6451.0x
feed_raptor0.127255.53x

Memory Usage

NameMemoryFactor
fast_rss0.00154 MB 
feeder_ex109.73 MB71201.54x
elixir_feed_parser880.51 MB571336.48x
feed_raptor6386.15 MB4143790.06x

Input: dave

Run Time

NameIPSAverageDevitationMedian99th %
fast_rss399.652.50 ms±11.60%2.48 ms3.39 ms
feeder_ex57.1817.49 ms±2.15%17.44 ms18.48 ms
elixir_feed_parser9.06110.43 ms±4.61%109.65 ms134.74 ms
feed_raptor1.57636.73 ms±1.49%637.79 ms664.67 ms

Comparison

NameIPSSlower
fast_rss399.65 
feeder_ex57.186.99x
elixir_feed_parser9.0644.13x
feed_raptor1.57254.47x

Memory Usage

NameMemoryFactor
fast_rss0.00155 MB 
feeder_ex9.25 MB5973.16x
elixir_feed_parser80.42 MB51926.44x
feed_raptor571.15 MB368775.6x

Input: sleepy

Run Time

NameIPSAverageDevitationMedian99th %
fast_rss740.801.35 ms±17.51%1.27 ms2.19 ms
feeder_ex124.758.02 ms±4.67%8.05 ms8.68 ms
elixir_feed_parser26.8337.27 ms±5.23%36.94 ms44.24 ms
feed_raptor3.12320.34 ms±5.17%313.72 ms368.94 ms

Comparison

NameIPSSlower
fast_rss740.80 
feeder_ex124.755.94x
elixir_feed_parser26.8327.61x
feed_raptor3.12237.31x

Memory Usage

NameMemoryFactor
fast_rss0.00154 MB 
feeder_ex4.28 MB2780.17x
elixir_feed_parser35.88 MB23282.0x
feed_raptor274.98 MB178428.65x

Input: stuff

Run Time

NameIPSAverageDevitationMedian99th %
fast_rss18.950.0528 s±9.87%0.0550 s0.0644 s
feeder_ex0.971.04 s±1.40%1.04 s1.07 s
elixir_feed_parser0.531.88 s±1.49%1.88 s1.91 s
feed_raptor0.081212.32 s±0.15%12.32 s12.33 s

Comparison

NameIPSSlower
fast_rss18.95 
feeder_ex0.9719.63x
elixir_feed_parser0.5335.54x
feed_raptor0.0812233.47x

Memory Usage

NameMemoryFactor
fast_rss0.00156 MB 
feeder_ex140.58 MB90326.23x
elixir_feed_parser1018.78 MB654577.31x
feed_raptor8423.70 MB5412308.17x