add caching
This commit is contained in:
parent
dd1432d695
commit
70b2bb6ede
|
@ -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,
|
||||||
[
|
[
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue