Jelajahi Sumber

#2835 Speed improvements: preload most used font file

Alex Trofimov 6 tahun lalu
induk
melakukan
e1cba2e491

+ 5 - 0
modules/boonex/fontawesome/classes/BxFontAwesomeDb.php

@@ -16,6 +16,11 @@ class BxFontAwesomeDb extends BxDolModuleDb
         parent::__construct($oConfig);
     }
 
+    function getActiveFont()
+    {
+        return $this->getOne("SELECT `content` FROM `sys_preloader` WHERE `module` = 'bx_fontawesome' AND `type` = 'css_system' AND `active` = 1 AND `content` IN('fonts-light.css','fonts-duotone.css','fonts-all.css') LIMIT 1");
+    }
+
     function switchFont($sFont)
     {
         $this->query("UPDATE `sys_preloader` SET `active` = :active WHERE `module` = 'bx_fontawesome' AND `type` = 'css_system' AND `content` = 'fonts-light.css'", array('active' => 'light' == $sFont ? 1 : 0));

+ 21 - 0
modules/boonex/fontawesome/classes/BxFontAwesomeModule.php

@@ -22,6 +22,27 @@ class BxFontAwesomeModule extends BxDolModule
         BxDolCacheUtilities::getInstance()->clear('css');
         BxDolCacheUtilities::getInstance()->clear('db');
     }
+
+    public function serviceInjection()
+    {
+        // preload active font, so page will load faster
+        $aMap = array(
+            'fonts-light.css' => array('fa-light-300.woff2'),
+            'fonts-duotone.css' => array('fa-duotone-900.woff2'),
+            'fonts-all.css' => array('fa-regular-400.woff2', 'fa-solid-900.woff2'),
+        );
+        $sCss = $this->_oDb->getActiveFont();
+        if (!isset($aMap[$sCss]))
+            return '';
+
+        $aFonts = $aMap[$sCss];
+        $s = '';
+        foreach($aFonts as $sFont) {
+            $sFontUrl = BX_DOL_URL_MODULES . 'boonex/fontawesome/template/fonts/' . $sFont;
+            $s .= '<link rel="preload" as="font" type="font/woff2" crossorigin href="' . $sFontUrl . '" />';
+        }
+        return $s;
+    }
 }
 
 /** @} */

+ 4 - 0
modules/boonex/fontawesome/install/sql/disable.sql

@@ -16,3 +16,7 @@ UPDATE `sys_preloader` SET `active` = 1 WHERE `module` = 'system' AND `type` = '
 
 DELETE FROM `sys_preloader` WHERE `module` = 'bx_fontawesome';
 
+-- Injections
+
+DELETE FROM `sys_injections` WHERE `name` IN('bx_fontawesome');
+

+ 4 - 0
modules/boonex/fontawesome/install/sql/enable.sql

@@ -33,3 +33,7 @@ INSERT INTO `sys_preloader` (`module`, `type`, `content`, `active`) VALUES
 ('bx_fontawesome', 'css_system', 'fonts-duotone.css', 0),
 ('bx_fontawesome', 'css_system', 'fonts-light.css', 0);
 
+-- Injections
+
+INSERT INTO `sys_injections` (`name`, `page_index`, `key`, `type`, `data`, `replace`, `active`) VALUES
+('bx_fontawesome', 0, 'injection_head', 'service', 'a:2:{s:6:"module";s:14:"bx_fontawesome";s:6:"method";s:9:"injection";}', 0, 1);