diff --git a/google_tag.services.yml b/google_tag.services.yml
index 1395f19..4e27de0 100644
--- a/google_tag.services.yml
+++ b/google_tag.services.yml
@@ -2,3 +2,9 @@ services:
   google_tag.container_manager:
     class: Drupal\google_tag\Entity\ContainerManager
     arguments: ['@entity_type.manager', '@module_handler']
+  cache.google_tag:
+    class: Drupal\Core\Cache\CacheBackendInterface
+    tags:
+      - { name: cache.bin }
+    factory: cache_factory:get
+    arguments: [google_tag]
diff --git a/src/Entity/Container.php b/src/Entity/Container.php
index f07faa4..8b91317 100644
--- a/src/Entity/Container.php
+++ b/src/Entity/Container.php
@@ -570,16 +570,30 @@ EOS;
     // Note: depending on the theme, this may not place the snippet immediately
     // after the body tag but should be close and it can be altered.
 
-    // @see https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Render!theme.api.php/group/theme_render/8.2.x
-    // The markup is passed through \Drupal\Component\Utility\Xss::filterAdmin()
-    // which strips known vectors while allowing a permissive list of HTML tags
-    // that are not XSS vectors. (e.g., <script> and <style> are not allowed.)
-    // As markup, core removes the 'style' attribute from the noscript snippet.
-    // With the inline template type, core does not alter the noscript snippet.
+    // Use google_tag cache bin to get noscript contents.
+    // Note: File operations are generally heavier than cache operations and
+    // additionally we always have an option of memcache on top of this.
+    $googleTagCache = \Drupal::service('cache.google_tag');
+    $cid = 'google_tag_noscript_contents';
+
+    if ($cache = $googleTagCache->get($cid)) {
+      $contents = $cache->data;
+    }
+    else {
+      // @see https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Render!theme.api.php/group/theme_render/8.2.x
+      // The markup is passed through \Drupal\Component\Utility\Xss::filterAdmin()
+      // which strips known vectors while allowing a permissive list of HTML tags
+      // that are not XSS vectors. (e.g., <script> and <style> are not allowed.)
+      // As markup, core removes the 'style' attribute from the noscript snippet.
+      // With the inline template type, core does not alter the noscript snippet.
+      $uri = $this->snippetURI($type);
+      $url = \Drupal::service('file_system')->realpath($uri);
+      $contents = @file_get_contents($url);
+
+      // Cache noscript content.
+      $googleTagCache->set($cid, $contents);
+    }
 
-    $uri = $this->snippetURI($type);
-    $url = \Drupal::service('file_system')->realpath($uri);
-    $contents = @file_get_contents($url);
     $attachment = $contents ? [
       "google_tag_{$type}_tag__{$this->id()}" => [
         '#type' => 'inline_template',
