add caching

This commit is contained in:
rinpatch 2019-01-16 10:26:01 +03:00
parent dd1432d695
commit 70b2bb6ede
3 changed files with 22 additions and 1 deletions

View File

@ -84,6 +84,17 @@ def start(_type, _args) do
], ],
id: :cachex_scrubber id: :cachex_scrubber
), ),
worker(
Cachex,
[
:metadata_cache,
[
limit: 2500,
default_ttl: :timer.minutes(15)
]
],
id: :cachex_metadata
),
worker( worker(
Cachex, Cachex,
[ [

View File

@ -2,6 +2,16 @@ defmodule Pleroma.Web.Metadata do
alias Phoenix.HTML alias Phoenix.HTML
@parsers Pleroma.Config.get([:metadata, :providers], []) @parsers Pleroma.Config.get([:metadata, :providers], [])
def get_cached_tags(params) do
# I am unsure how well ETS works with big keys
key = :erlang.term_to_binary(params)
Cachex.fetch!(:metadata_cache, key, fn _key ->
{:commit, build_tags(params)}
end)
end
def build_tags(params) do def build_tags(params) do
Enum.reduce(@parsers, "", fn parser, acc -> Enum.reduce(@parsers, "", fn parser, acc ->
rendered_html = rendered_html =

View File

@ -534,7 +534,7 @@ def redirector_with_meta(conn, %{"maybe_nickname_or_id" => maybe_nickname_or_id}
def redirector_with_meta(conn, params) do def redirector_with_meta(conn, params) do
{:ok, index_content} = File.read(index_file_path()) {:ok, index_content} = File.read(index_file_path())
tags = Metadata.build_tags(params) tags = Metadata.get_cached_tags(params)
response = String.replace(index_content, "<!--server-generated-meta-->", tags) response = String.replace(index_content, "<!--server-generated-meta-->", tags)
conn conn