Browse Source

Optimize comments load

imwald
Nuša Pukšič 3 months ago
parent
commit
b8122723b9
  1. 2
      assets/styles/03-components/article.css
  2. 16
      src/Twig/Components/Organisms/Comments.php
  3. 8
      templates/components/Organisms/Comments.html.twig

2
assets/styles/03-components/article.css

@ -165,5 +165,5 @@ article .card { @@ -165,5 +165,5 @@ article .card {
.comments {
display: flex;
flex-direction: column;
gap: var(--spacing-1);
gap: var(--spacing-2);
}

16
src/Twig/Components/Organisms/Comments.php

@ -4,6 +4,7 @@ namespace App\Twig\Components\Organisms; @@ -4,6 +4,7 @@ namespace App\Twig\Components\Organisms;
use App\Service\NostrClient;
use App\Service\NostrLinkParser;
use App\Service\RedisCacheService;
use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
#[AsTwigComponent]
@ -14,10 +15,12 @@ final class Comments @@ -14,10 +15,12 @@ final class Comments
public array $processedContent = [];
public array $zapAmounts = [];
public array $zappers = [];
public array $authorsMetadata = [];
public function __construct(
private readonly NostrClient $nostrClient,
private readonly NostrLinkParser $nostrLinkParser
private readonly NostrLinkParser $nostrLinkParser,
private readonly RedisCacheService $redisCacheService
) {
}
@ -35,6 +38,17 @@ final class Comments @@ -35,6 +38,17 @@ final class Comments
$this->parseNostrLinks();
// Parse Zaps to get amounts and zappers from receipts
$this->parseZaps();
// Collect all unique pubkeys for batch metadata fetching
$pubkeys = [];
foreach ($this->list as $comment) {
if ($comment->kind != 9735) {
$pubkeys[] = $comment->pubkey;
} elseif (isset($this->zappers[$comment->id])) {
$pubkeys[] = $this->zappers[$comment->id];
}
}
$pubkeys = array_unique($pubkeys);
$this->authorsMetadata = $this->redisCacheService->getMultipleMetadata($pubkeys);
}
/**

8
templates/components/Organisms/Comments.html.twig

@ -2,15 +2,13 @@ @@ -2,15 +2,13 @@
{% for item in list %}
<div class="card comment {% if item.kind is defined and item.kind == '9735' %}zap-comment{% endif %}">
<div class="metadata">
<p>
{% if item.kind != '9735' %}
<twig:Molecules:UserFromNpub ident="{{ item.pubkey }}" />
<twig:Molecules:UserFromNpub ident="{{ item.pubkey }}" :user="authorsMetadata[item.pubkey]" />
{% elseif zappers[item.id] %}
<twig:Molecules:UserFromNpub ident="{{ zappers[item.id] }}" />
<twig:Molecules:UserFromNpub ident="{{ zappers[item.id] }}" :user="authorsMetadata[zappers[item.id]]" />
{% else %}
<em>Unknown</em>
<p><em>Unknown</em></p>
{% endif %}
</p>
<small>{{ item.created_at|date('F j Y') }}</small>
</div>

Loading…
Cancel
Save