diff --git a/banchmark.php b/banchmark.php
new file mode 100644
index 0000000..e69de29
diff --git a/tests/src/Functional/BenchmarkTest.php b/tests/src/Functional/BenchmarkTest.php
new file mode 100644
index 0000000..0923cb7
--- /dev/null
+++ b/tests/src/Functional/BenchmarkTest.php
@@ -0,0 +1,90 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\linkchecker\Functional;
+
+use Drupal\Component\Utility\Timer;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Link;
+use Drupal\Core\Url;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\node\Entity\NodeType;
+use Drupal\Tests\BrowserTestBase;
+use Drupal\TestTools\Extension\HtmlLogging\HtmlOutputLogger;
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
+
+#[Group('linkchecker')]
+#[RunTestsInSeparateProcesses]
+class BenchmarkTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'linkchecker',
+    'node',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    NodeType::create(['name' => 'Page', 'type' => 'page'])->save();
+    FieldStorageConfig::create([
+      'type' => 'text_long',
+      'entity_type' => 'node',
+      'field_name' => 'text',
+    ])->save();
+    FieldConfig::create([
+      'entity_type' => 'node',
+      'bundle' => 'page',
+      'field_name' => 'text',
+      'label' => 'Text',
+    ])->setThirdPartySetting('linkchecker', 'scan', TRUE)
+      ->setThirdPartySetting('linkchecker', 'extractor', 'html_link_extractor')
+      ->save();
+    EntityFormDisplay::create([
+      'targetEntityType' => 'node',
+      'bundle' => 'page',
+      'mode' => 'default',
+    ])->enable()
+      ->setComponent('text', ['type' => 'text_textarea'])
+      ->save();
+  }
+
+  public function testBenchmark(): void {
+    $amount = 10000;
+    $this->drupalLogin($this->createUser(admin: TRUE));
+
+    $this->drupalGet(Url::fromRoute('entity.node.add_form', ['node_type' => 'page']));
+
+    Timer::start('save');
+    $this->submitForm([
+      'title[0][value]' => $this->randomString(),
+      'text[0][value]' => $this->getText($amount),
+    ], 'Save');
+    ['time' => $time] = Timer::stop('save');
+    $formatted = number_format($time / 1000, 2);
+
+    HtmlOutputLogger::log("Saving a node with $amount links took $formatted seconds");
+  }
+
+  protected function getText(int $amount): string {
+    $text = ' ';
+    for ($i = 0; $i < $amount; $i++) {
+      $uri = 'https://' . strtolower($this->randomMachineName()) . '.com';
+      $text .= Link::fromTextAndUrl($this->randomString(), Url::fromUri($uri))->toString() . ' ';
+    }
+    return $text;
+  }
+}
