FastRSS
Parse RSS feeds very quickly
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.1.4"}
]
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()}
iex(1)> FastRSS.parse("...rss_feed_string...")
iex(2)> {:ok, map_of_rss}
The docs can be found at https://hexdocs.pm/fast_rss.
Benchmark
HTML: https://avencera.github.io/fast_rss/
Benchmark run from 2020-02-21 18:07:35.376657Z UTC
System
Benchmark suite executing on the following system:
| Operating System | macOS |
|---|---|
| CPU Information | Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz |
| Number of Available Cores | 16 |
| Available Memory | 32 GB |
| Elixir Version | 1.10.1 |
| Erlang Version | 22.2.6 |
Configuration
Benchmark suite executing with the following configuration:
| :time | 30 s |
|---|---|
| :parallel | 1 |
| :warmup | 5 s |
Statistics
Input: anxiety
Run Time
| Name | IPS | Average | Devitation | Median | 99th % |
|---|---|---|---|---|---|
| fast_rss | 81.22 | 12.31 ms | ±2.67% | 12.27 ms | 13.58 ms |
| feeder_ex | 3.68 | 271.51 ms | ±5.44% | 266.17 ms | 313.98 ms |
| feed_raptor | 3.05 | 328.25 ms | ±0.89% | 328.01 ms | 347.03 ms |
| elixir_feed_parser | 1.97 | 506.87 ms | ±2.33% | 506.76 ms | 524.07 ms |
| Name | IPS | Slower |
|---|---|---|
| fast_rss | 81.22 | |
| feeder_ex | 3.68 | 22.05x |
| feed_raptor | 3.05 | 26.66x |
| elixir_feed_parser | 1.97 | 41.17x |
| Name | Memory | Factor |
|---|---|---|
| fast_rss | 0.65 MB | |
| feeder_ex | 17.21 MB | 26.62x |
| feed_raptor | 268.54 MB | 415.36x |
| elixir_feed_parser | 313.30 MB | 484.6x |
Input: ben
Run Time
| Name | IPS | Average | Devitation | Median | 99th % |
|---|---|---|---|---|---|
| fast_rss | 52.83 | 18.93 ms | ±2.43% | 18.94 ms | 19.68 ms |
| feeder_ex | 13.24 | 75.55 ms | ±3.19% | 75.19 ms | 83.40 ms |
| elixir_feed_parser | 3.61 | 276.65 ms | ±3.84% | 275.63 ms | 322.99 ms |
| feed_raptor | 0.48 | 2080.14 ms | ±0.57% | 2075.11 ms | 2112.08 ms |
| Name | IPS | Slower |
|---|---|---|
| fast_rss | 52.83 | |
| feeder_ex | 13.24 | 3.99x |
| elixir_feed_parser | 3.61 | 14.62x |
| feed_raptor | 0.48 | 109.89x |
| Name | Memory | Factor |
|---|---|---|
| fast_rss | 1.35 MB | |
| feeder_ex | 27.86 MB | 20.7x |
| elixir_feed_parser | 163.88 MB | 121.76x |
| feed_raptor | 1577.40 MB | 1172.03x |
Input: daily
Run Time
| Name | IPS | Average | Devitation | Median | 99th % |
|---|---|---|---|---|---|
| fast_rss | 14.28 | 0.0700 s | ±2.59% | 0.0695 s | 0.0776 s |
| feeder_ex | 5.02 | 0.199 s | ±1.52% | 0.198 s | 0.21 s |
| elixir_feed_parser | 0.65 | 1.55 s | ±1.25% | 1.55 s | 1.59 s |
| feed_raptor | 0.126 | 7.91 s | ±0.28% | 7.92 s | 7.92 s |
| Name | IPS | Slower |
|---|---|---|
| fast_rss | 14.28 | |
| feeder_ex | 5.02 | 2.85x |
| elixir_feed_parser | 0.65 | 22.1x |
| feed_raptor | 0.126 | 112.97x |
| Name | Memory | Factor |
|---|---|---|
| fast_rss | 3.30 MB | |
| feeder_ex | 109.73 MB | 33.24x |
| elixir_feed_parser | 880.51 MB | 266.72x |
| feed_raptor | 6386.15 MB | 1934.48x |
Input: dave
Run Time
| Name | IPS | Average | Devitation | Median | 99th % |
|---|---|---|---|---|---|
| fast_rss | 155.84 | 6.42 ms | ±2.37% | 6.40 ms | 6.98 ms |
| feeder_ex | 55.88 | 17.90 ms | ±5.45% | 17.50 ms | 20.48 ms |
| elixir_feed_parser | 9.10 | 109.93 ms | ±3.71% | 109.59 ms | 123.09 ms |
| feed_raptor | 1.58 | 631.99 ms | ±1.44% | 632.06 ms | 652.61 ms |
| Name | IPS | Slower |
|---|---|---|
| fast_rss | 155.84 | |
| feeder_ex | 55.88 | 2.79x |
| elixir_feed_parser | 9.10 | 17.13x |
| feed_raptor | 1.58 | 98.49x |
| Name | Memory | Factor |
|---|---|---|
| fast_rss | 0.38 MB | |
| feeder_ex | 9.25 MB | 24.56x |
| elixir_feed_parser | 80.42 MB | 213.48x |
| feed_raptor | 571.18 MB | 1516.17x |
Input: sleepy
Run Time
| Name | IPS | Average | Devitation | Median | 99th % |
|---|---|---|---|---|---|
| fast_rss | 368.53 | 2.71 ms | ±2.71% | 2.71 ms | 2.90 ms |
| feeder_ex | 124.50 | 8.03 ms | ±6.82% | 7.95 ms | 9.84 ms |
| elixir_feed_parser | 26.79 | 37.33 ms | ±3.84% | 37.19 ms | 41.86 ms |
| feed_raptor | 3.20 | 312.83 ms | ±3.22% | 310.43 ms | 353.46 ms |
| Name | IPS | Slower |
|---|---|---|
| fast_rss | 368.53 | |
| feeder_ex | 124.50 | 2.96x |
| elixir_feed_parser | 26.79 | 13.76x |
| feed_raptor | 3.20 | 115.29x |
| Name | Memory | Factor |
|---|---|---|
| fast_rss | 0.131 MB | |
| feeder_ex | 4.28 MB | 32.59x |
| elixir_feed_parser | 35.88 MB | 272.92x |
| feed_raptor | 274.98 MB | 2091.61x |
Input: stuff
Run Time
| Name | IPS | Average | Devitation | Median | 99th % |
|---|---|---|---|---|---|
| fast_rss | 10.10 | 0.0990 s | ±1.57% | 0.0988 s | 0.106 s |
| feeder_ex | 0.95 | 1.05 s | ±1.31% | 1.05 s | 1.08 s |
| elixir_feed_parser | 0.54 | 1.86 s | ±1.43% | 1.86 s | 1.90 s |
| feed_raptor | 0.0794 | 12.59 s | ±1.63% | 12.54 s | 12.82 s |
| Name | IPS | Slower |
|---|---|---|
| fast_rss | 10.10 | |
| feeder_ex | 0.95 | 10.58x |
| elixir_feed_parser | 0.54 | 18.79x |
| feed_raptor | 0.0794 | 127.21x |
| Name | Memory | Factor |
|---|---|---|
| fast_rss | 5.52 MB | |
| feeder_ex | 140.58 MB | 25.48x |
| elixir_feed_parser | 1018.78 MB | 184.61x |
| feed_raptor | 8425.39 MB | 1526.77x |