nemo64 / critical_css
TYPO3 的关键 CSS 内联渲染
dev-master
2018-12-11 18:20 UTC
Requires
- php: 7.1.* || 7.2.*
- guzzlehttp/guzzle: ^6.3
- guzzlehttp/promises: ^1.3
- kevinrob/guzzle-cache-middleware: ^3.2
- sabberworm/php-css-parser: ^8.2
- typo3/cms-core: ~8.7.11 || ~9.5.0
- typo3/cms-frontend: ~8.7.11 || ~9.5.0
Requires (Dev)
- nimut/testing-framework: ^4.1
- phpunit/phpunit: ^6.5
- twbs/bootstrap: ^4.1
Suggests
- lochmueller/staticfilecache: Get php out of the way before doing any frontend optimization.
Conflicts
This package is auto-updated.
Last update: 2024-09-12 07:32:14 UTC
README
critical css typo3 扩展
此扩展可自动检测并内联关键 CSS 定义。
工作原理
此扩展的实现不使用浏览器来检查特定的视口大小。相反,它使用你可以在网站上任何位置放置的标记。例如,TypoScript 在第二个 tt_content 元素之后放置它。
然后,此扩展将使用复杂的正则表达式来创建一个统计,记录直到标记为止使用的元素/属性/类/ID。然后使用 sabberworm/php-css-parser 解析所有 CSS 文件,并将所有 CSS 选择器与之前创建的统计相匹配和缩减。
即使面对如 bootstrap 这样的大型框架,整个过程也非常快速,最终只产生 2-3 kb 的内联 CSS。
你应该知道的事情
- 如果“页脚以下”标记不存在,则扩展将不执行任何操作
- 内联 CSS 只是猜测你需要的内容。这里没有浏览器选择器匹配工作。尽管如此,猜测非常准确...
- 由于它们对于(希望最多)1 秒内获取真实 CSS 的等待时间并不重要,所有动画/过渡以及悬停/聚焦效果都从内联 CSS 中移除
- 还会下载和内联外部样式表(待创建一个好的异常创建方法)
- 由于通过用户代理提供不同的字体,google fonts 当前是硬编码的异常,不进行内联
我应该何时考虑使用此扩展(或替代品,我不做评判)
- 这应该是你做的最后一个优化之一
- 确保没有其他内容会阻塞首次绘制,否则此优化将无效
- 确保你的网站不是通过 php 交付的,因为这将可能是你可以做的最大的性能提升。我推荐 lochmueller/staticfilecache,因为它没有平台依赖,并且非常透明。但其他策略也很好。
贡献
运行测试
运行测试套件的最简单方法是安装 docker 并使用以下命令
composer db:start
,这将启动一个用于 mysql 数据库的 docker 图像。这对于功能测试是必需的。composer test
运行单元和功能测试套件。你可以分别运行它们,使用test:unit
或test:functional
。你也可以使用composer test:unit -- --filter External
使用过滤器。composer db:stop
将停止并删除数据库。
当然,如果你有本地数据库,你也可以在没有 docker 的情况下运行它们,但那时你必须手动编写测试命令 ;)