{"id":15056436,"url":"https://github.com/avencera/fast_rss","last_synced_at":"2025-04-05T07:04:08.882Z","repository":{"id":44868900,"uuid":"241978588","full_name":"avencera/fast_rss","owner":"avencera","description":"Fast Elixir RSS feed parser, a NIF wrapper around the Rust RSS crate","archived":false,"fork":false,"pushed_at":"2024-07-06T15:39:40.000Z","size":3246,"stargazers_count":116,"open_issues_count":4,"forks_count":20,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-29T06:03:21.289Z","etag":null,"topics":["atom","elixir","erlang","feeds","hacktoberfest","parser","rss","rust"],"latest_commit_sha":null,"homepage":"https://avencera.github.io/fast_rss/","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avencera.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-20T20:06:37.000Z","updated_at":"2025-03-11T17:58:17.000Z","dependencies_parsed_at":"2024-06-28T17:56:46.605Z","dependency_job_id":"49fb1063-a894-4f0d-89fc-3902b5799fe3","html_url":"https://github.com/avencera/fast_rss","commit_stats":{"total_commits":114,"total_committers":10,"mean_commits":11.4,"dds":0.4649122807017544,"last_synced_commit":"6fa58824398c6119ced024377e31be54c4fa28c0"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avencera%2Ffast_rss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avencera%2Ffast_rss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avencera%2Ffast_rss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avencera%2Ffast_rss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avencera","download_url":"https://codeload.github.com/avencera/fast_rss/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247299831,"owners_count":20916190,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atom","elixir","erlang","feeds","hacktoberfest","parser","rss","rust"],"created_at":"2024-09-24T21:51:26.169Z","updated_at":"2025-04-05T07:04:08.854Z","avatar_url":"https://github.com/avencera.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e \u003cimg alt=\"FastRSS\" src=\"https://avencera.github.io/fast_rss/logo.svg\"\u003e \u003c/p\u003e\n\u003cp align=\"center\"\u003eParse RSS feeds very quickly \u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://hex.pm/packages/fast_rss\"\u003e\u003cimg alt=\"Hex.pm\" src=\"https://img.shields.io/hexpm/l/fast_rss\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://hex.pm/packages/fast_rss\"\u003e\u003cimg alt=\"Hex.pm\" src=\"https://img.shields.io/hexpm/v/fast_rss\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://hex.pm/packages/fast_rss\"\u003e\u003cimg alt=\"Hex.pm\" src=\"https://img.shields.io/hexpm/dt/fast_rss\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://hexdocs.pm/fast_rss\"\u003e\u003cimg alt=\"HexDocs.pm\" src=\"https://img.shields.io/badge/hex-docs-purple.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/avencera/fast_rss/commits/master\"\u003e\u003cimg alt=\"last commit\" src=\"https://img.shields.io/github/last-commit/avencera/fast_rss.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#intro\"\u003eIntro\u003c/a\u003e\n  |\n  \u003ca href=\"#compatibility\"\u003eCompatibility\u003c/a\u003e\n  |\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\n  |\n  \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\n  |\n  \u003ca href=\"#benchmark\"\u003eBenchmarks\u003c/a\u003e\n  |\n  \u003ca href=\"#deploying\"\u003eDeploying\u003c/a\u003e\n  |\n  \u003ca href=\"LICENSE\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Intro\n\nParse RSS feeds very quickly\n\n- This is rust NIF built using [rustler](https://github.com/rusterlium/rustler)\n- Uses the [RSS](https://crates.io/crates/rss) rust crate to do the actual RSS parsing\n\n**Speed**\n\nCurrently this is already much faster than most of the pure elixir/erlang packages out there. In benchmarks there are speed improvements anywhere between **6.12x - 50.09x** over the next fastest package ([feeder_ex](https://github.com/manukall/feeder_ex)) that was tested.\n\nCompared to the slowest elixir options tested ([feed_raptor](https://github.com/merongivian/feedraptor), [elixir_feed_parser](https://github.com/fdietz/elixir-feed-parser)), FastRSS was sometimes **259.91x** faster and used **5,412,308.17x** less memory _(0.00156 MB vs 8423.70 MB)_.\n\nSee full [benchmarks](#benchmark) below:\n\n## Compatibility\n\nFastRSS requires a minimum combination of Elixir 1.6.0 and Erlang/OTP 20.0, and is tested with a maximum combination of Elixir 1.11.1 and Erlang/OTP 22.0.\n\n## Installation\n\nThis package is available on [hex](https://hex.pm/packages/fast_rss).\n\nIt can be installed by adding `fast_rss` to your list of dependencies in `mix.exs`:\n\n```elixir\ndef deps do\n  [\n    {:fast_rss, \"~\u003e 0.5.0\"}\n  ]\nend\n```\n\nYou also need the rust compiler installed: https://www.rust-lang.org/tools/install\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n```\n\n## Usage\n\nThere is only two functions, one for parsing rss `parse_rss/1` and one for parsing atom feeds `parse_atom/1` they takes a string and outputs an `{:ok, map()}` with string keys.\n\n```elixir\niex(1)\u003e  {:ok, map_of_rss} = FastRSS.parse_rss(\"...rss_feed_string...\")\niex(2)\u003e Map.keys(map_of_rss)\n[\"categories\", \"cloud\", \"copyright\", \"description\", \"docs\", \"dublin_core_ext\",\n \"extensions\", \"generator\", \"image\", \"items\", \"itunes_ext\", \"language\",\n \"last_build_date\", \"link\", \"managing_editor\", \"namespaces\", \"pub_date\",\n \"rating\", \"skip_days\", \"skip_hours\", \"syndication_ext\", \"text_input\", \"title\",\n \"ttl\", \"webmaster\"]\n```\n\nThe docs can be found at [https://hexdocs.pm/fast_rss](https://hexdocs.pm/fast_rss).\n\n### Supported Feeds\n\nReading from the following RSS versions is supported:\n\n- RSS 0.90\n- RSS 0.91\n- RSS 0.92\n- RSS 1.0\n- RSS 2.0\n- iTunes\n- Dublin Core\n- Atom\n\n## Benchmark\n\nHTML: [https://avencera.github.io/fast_rss/](https://avencera.github.io/fast_rss/)\n\nBenchmark run from 2020-02-22 05:23:47.524699Z UTC\n\n### System\n\nBenchmark suite executing on the following system:\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth style=\"width: 1%; white-space: nowrap\"\u003eOperating System\u003c/th\u003e\n    \u003ctd\u003emacOS\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth style=\"white-space: nowrap\"\u003eCPU Information\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eIntel(R) Core(TM) i9-9880H CPU @ 2.30GHz\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth style=\"white-space: nowrap\"\u003eNumber of Available Cores\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e16\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth style=\"white-space: nowrap\"\u003eAvailable Memory\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e32 GB\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth style=\"white-space: nowrap\"\u003eElixir Version\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e1.10.1\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth style=\"white-space: nowrap\"\u003eErlang Version\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e22.2.6\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Configuration\n\nBenchmark suite executing with the following configuration:\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth style=\"width: 1%\"\u003e:time\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e30 s\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth\u003e:parallel\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e1\u003c/td\u003e\n  \u003c/tr\u003e\u003ctr\u003e\n    \u003cth\u003e:warmup\u003c/th\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e5 s\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Statistics\n\n**Input: anxiety**\n\nRun Time\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eAverage\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eDevitation\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMedian\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003e99th\u0026nbsp;%\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e188.57\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e5.30 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±8.26%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e5.45 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e6.43 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.70\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e269.92 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±5.34%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e268.12 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e316.12 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2.99\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e334.01 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±2.44%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e331.03 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e371.28 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.94\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e515.72 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±1.94%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e516.10 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e536.05 ms\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nComparison\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eSlower\u003c/th\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;text-align: right\"\u003e188.57\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.70\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e50.9x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2.99\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e62.99x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.94\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e97.25x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nMemory Usage\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMemory\u003c/th\u003e\n      \u003cth style=\"text-align: right\"\u003eFactor\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e0.00156 MB\u003c/td\u003e\n      \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e17.21 MB\u003c/td\u003e\n    \u003ctd\u003e11004.73x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e268.53 MB\u003c/td\u003e\n    \u003ctd\u003e171693.91x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e313.30 MB\u003c/td\u003e\n    \u003ctd\u003e200316.09x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr/\u003e\n\n**Input: ben**\n\nRun Time\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eAverage\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eDevitation\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMedian\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003e99th\u0026nbsp;%\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e83.95\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e11.91 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±10.29%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e12.23 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e16.17 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e13.33\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e75.04 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±4.38%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e74.21 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e89.72 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.52\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e284.18 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±3.89%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e283.83 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e324.08 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.48\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2078.76 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±0.52%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2076.27 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2097.44 ms\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nComparison\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eSlower\u003c/th\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;text-align: right\"\u003e83.95\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e13.33\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e6.3x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.52\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e23.86x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.48\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e174.51x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nMemory Usage\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMemory\u003c/th\u003e\n      \u003cth style=\"text-align: right\"\u003eFactor\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e0.00155 MB\u003c/td\u003e\n      \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e27.86 MB\u003c/td\u003e\n    \u003ctd\u003e17990.96x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e163.88 MB\u003c/td\u003e\n    \u003ctd\u003e105811.88x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e1577.41 MB\u003c/td\u003e\n    \u003ctd\u003e1018492.36x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr/\u003e\n\n**Input: daily**\n\nRun Time\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eAverage\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eDevitation\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMedian\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003e99th\u0026nbsp;%\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e32.98\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0303 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±7.62%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0313 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0339 s\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e4.94\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.20 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±4.61%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.199 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.24 s\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.64\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.57 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±1.50%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.57 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.63 s\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.127\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e7.88 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±0.23%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e7.88 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e7.90 s\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nComparison\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eSlower\u003c/th\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;text-align: right\"\u003e32.98\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e4.94\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e6.68x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.64\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e51.86x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.127\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e259.91x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nMemory Usage\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMemory\u003c/th\u003e\n      \u003cth style=\"text-align: right\"\u003eFactor\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e0.00153 MB\u003c/td\u003e\n      \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e109.73 MB\u003c/td\u003e\n    \u003ctd\u003e71555.78x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e880.51 MB\u003c/td\u003e\n    \u003ctd\u003e574178.95x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e6386.12 MB\u003c/td\u003e\n    \u003ctd\u003e4164382.64x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr/\u003e\n\n**Input: dave**\n\nRun Time\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eAverage\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eDevitation\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMedian\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003e99th\u0026nbsp;%\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e407.08\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2.46 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±9.83%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2.41 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.16 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e56.52\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e17.69 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±6.14%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e17.37 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e22.51 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e8.90\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e112.31 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±4.12%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e111.93 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e127.60 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.59\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e628.45 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±1.60%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e626.71 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e656.74 ms\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nComparison\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eSlower\u003c/th\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;text-align: right\"\u003e407.08\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e56.52\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e7.2x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e8.90\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e45.72x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.59\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e255.83x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nMemory Usage\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMemory\u003c/th\u003e\n      \u003cth style=\"text-align: right\"\u003eFactor\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e0.00157 MB\u003c/td\u003e\n      \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e9.25 MB\u003c/td\u003e\n    \u003ctd\u003e5886.17x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e80.42 MB\u003c/td\u003e\n    \u003ctd\u003e51170.23x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e571.18 MB\u003c/td\u003e\n    \u003ctd\u003e363425.45x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr/\u003e\n\n**Input: sleepy**\n\nRun Time\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eAverage\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eDevitation\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMedian\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003e99th\u0026nbsp;%\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e760.30\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.32 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±16.62%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.21 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e2.03 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e124.28\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e8.05 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±6.94%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e8.03 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e10.32 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e26.26\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e38.09 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±5.08%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e37.81 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e44.42 ms\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.21\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e311.16 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±2.85%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e307.86 ms\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e345.09 ms\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nComparison\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eSlower\u003c/th\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;text-align: right\"\u003e760.30\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e124.28\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e6.12x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e26.26\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e28.96x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e3.21\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e236.57x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nMemory Usage\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMemory\u003c/th\u003e\n      \u003cth style=\"text-align: right\"\u003eFactor\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e0.00157 MB\u003c/td\u003e\n      \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e4.28 MB\u003c/td\u003e\n    \u003ctd\u003e2726.19x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e35.88 MB\u003c/td\u003e\n    \u003ctd\u003e22829.92x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e274.98 MB\u003c/td\u003e\n    \u003ctd\u003e174963.99x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr/\u003e\n\n**Input: stuff**\n\nRun Time\n\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eAverage\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eDevitation\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMedian\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003e99th\u0026nbsp;%\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e19.19\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0521 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±9.19%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0546 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0635 s\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.93\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.07 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±2.49%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.07 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.15 s\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.53\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.88 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±1.22%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.89 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e1.92 s\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0797\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e12.54 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e±1.61%\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e12.44 s\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e12.77 s\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nComparison\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eIPS\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eSlower\u003c/th\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap;text-align: right\"\u003e19.19\u003c/td\u003e\n    \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.93\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e20.59x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.53\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e36.11x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e0.0797\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap; text-align: right\"\u003e240.68x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\nMemory Usage\n\u003ctable style=\"width: 1%\"\u003e\n  \u003ctr\u003e\n    \u003cth\u003eName\u003c/th\u003e\n    \u003cth style=\"text-align: right\"\u003eMemory\u003c/th\u003e\n      \u003cth style=\"text-align: right\"\u003eFactor\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efast_rss\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e0.00154 MB\u003c/td\u003e\n      \u003ctd\u003e\u0026nbsp;\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeeder_ex\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e140.58 MB\u003c/td\u003e\n    \u003ctd\u003e91220.55x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003eelixir_feed_parser\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e1018.78 MB\u003c/td\u003e\n    \u003ctd\u003e661058.28x\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003efeed_raptor\u003c/td\u003e\n    \u003ctd style=\"white-space: nowrap\"\u003e8424.44 MB\u003c/td\u003e\n    \u003ctd\u003e5466379.81x\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003chr/\u003e\n\n## Deploying\n\nDeploying rust NIFs can be a little bit annoying as you have to install the rust compiler. We try to alleviate this with [`rustler_precopmiled`](https://hexdocs.pm/rustler_precompiled/RustlerPrecompiled.html), which will create precompiled assets for a number of targets (see [`release.yml`](./.github/workflows/release.yml) for the full list), but does not cover all environments. If you are having trouble deploying this package make an issue and I will try and help you out.\n\nI will then add it to the FAQ below.\n\n### Q. How do I deploy using an Alpine Dockerfile?\n\n#### A. I recommend using a [multi-stage Dockerfile](https://docs.docker.com/develop/develop-images/multistage-build/), and doing the following\n\n1.  On the stages where you build all your deps, and build your release make sure to install `build-base` and `libgcc`:\n\n    ```dockerfile\n    # This step installs all the build tools we'll need\n    RUN apk update \u0026\u0026 \\\n        apk upgrade --no-cache \u0026\u0026 \\\n        apk add --no-cache \\\n        git \\\n        curl \\\n        build-base \\\n        libgcc  \u0026\u0026 \\\n        mix local.rebar --force \u0026\u0026 \\\n        mix local.hex --force\n    ```\n\n2.  Install the rust compiler and allow dynamic linking to the C library by setting the rust flag\n\n    ```dockerfile\n    # install rustup\n    RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y\n    ENV RUSTUP_HOME=/root/.rustup \\\n        RUSTFLAGS=\"-C target-feature=-crt-static\" \\\n        CARGO_HOME=/root/.cargo  \\\n        PATH=\"/root/.cargo/bin:$PATH\"\n    ```\n\n3.  On the stage where you actually run your elixir release install `libgcc`:\n\n    ```dockerfile\n    ################################################################################\n    ## STEP 4 - FINAL\n    FROM alpine:3.11\n\n    ENV MIX_ENV=prod\n\n    RUN apk update \u0026\u0026 \\\n        apk add --no-cache \\\n        bash \\\n        libgcc \\\n        openssl-dev\n\n    COPY --from=release-builder /opt/built /app\n    WORKDIR /app\n    CMD [\"/app/my_app/bin/my_app\", \"start\"]\n    ```\n\n## License\n\nFastRSS is released under the Apache License 2.0 - see the [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favencera%2Ffast_rss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favencera%2Ffast_rss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favencera%2Ffast_rss/lists"}