Skip to content

Commit f13edb1

Browse files
committed
Improve CSS memoization
1 parent 82960df commit f13edb1

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

src/CssInlinerPlugin.php

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ public function beforeSendPerformed(\Swift_Events_SendEvent $evt)
4242
|| ($message->getContentType() === 'multipart/mixed' && $message->getBody())
4343
) {
4444
[$body, $cssResources] = $this->messageSieve($message->getBody());
45-
$css = $this->fetchCss($cssResources);
45+
$css = $this->concatCss($cssResources);
4646
$message->setBody($this->converter->convert($body, $css));
4747
}
4848

4949
foreach ($message->getChildren() as $part) {
5050
if (strpos($part->getContentType(), 'text/html') === 0) {
5151
[$body, $cssResources] = $this->messageSieve($part->getBody());
52-
$css = $this->fetchCss($cssResources);
52+
$css = $this->concatCss($cssResources);
5353
$part->setBody($this->converter->convert($body, $css));
5454
}
5555
}
@@ -65,27 +65,36 @@ public function sendPerformed(\Swift_Events_SendEvent $evt)
6565
// Do Nothing
6666
}
6767

68-
protected function fetchCss(array $cssResources): string
68+
protected function concatCss(array $cssResources): string
6969
{
7070
$output = '';
7171
foreach ($cssResources as $cssResource) {
72-
if (isset($this->cssCache[$cssResource])) {
73-
$output .= $this->cssCache[$cssResource];
74-
continue;
75-
}
76-
$filename = $cssResource;
72+
$output.= $this->fetchCss($cssResource);
73+
}
7774

78-
// Fix relative protocols on hrefs. Assume https.
79-
if (substr($filename, 0, 2) === '//') {
80-
$filename = 'https:' . $filename;
81-
}
75+
return $output;
76+
}
77+
78+
protected function fetchCss(string $filename): string
79+
{
80+
if (isset($this->cssCache[$filename])) {
81+
return $this->cssCache[$filename];
82+
}
8283

83-
$content = file_get_contents($filename);
84-
$this->cssCache[$cssResource] = $content;
85-
$output .= $this->cssCache[$cssResource];
84+
$fixedFilename = $filename;
85+
// Fix relative protocols on hrefs. Assume https.
86+
if (substr($filename, 0, 2) === '//') {
87+
$fixedFilename = 'https:' . $filename;
8688
}
8789

88-
return $output;
90+
$content = file_get_contents($fixedFilename);
91+
if (! $content) {
92+
return '';
93+
}
94+
95+
$this->cssCache[$filename] = $content;
96+
97+
return $content;
8998
}
9099

91100
protected function messageSieve(string $message): array

0 commit comments

Comments
 (0)