【发布时间】:2015-10-02 15:04:29
【问题描述】:
我的网站中有一个很大的 CSS 文件,我想将它分成两等份,以便它可以并行加载并让页面更早呈现。当我手动将文件切成两半时似乎可以正常工作,但我希望能够将其作为构建过程的一部分。
有什么工具可以把一个css文件一分为二吗?
我找到了类似的工具,但不完全是我需要的……http://cssnano.co、https://github.com/postcss/postcss和https://www.npmjs.com/package/grunt-split-styles(最后一个几乎完美,但是如何找到中心点……?)
编辑:第一次努力...
没有找到完全符合我要求的东西,我开始尝试适应一些接近的东西,对https://github.com/project-collins/grunt-csssplit 做了一个小改动......
diff --git a/lib/splitter.js b/lib/splitter.js
index 81d427c..041cf77 100644
--- a/lib/splitter.js
+++ b/lib/splitter.js
@@ -82,8 +82,9 @@ Splitter.prototype._toPages = function (ast, maxSelectors) {
pages.push(clone);
var selectorsForThisPage = 0;
- ast.stylesheet.rules.forEach(function (rule) {
- if (selectorsForThisPage + rule.totalSelectors <= maxSelectors) {
+
+ ast.stylesheet.rules.forEach(function (rule, i) {
+ if (Math.round(ast.stylesheet.rules.length/2) !== i) {
selectorsForThisPage += rule.totalSelectors;
clone.stylesheet.rules.push(rule);
}
我可以将我的原始 css 文件一分为二,将一半的规则放在第一部分,一半放在第二部分......
➜ grunt-csssplit git:(master) ✗ grunt csssplit && ls -ltrah
Running "csssplit:your_target" (csssplit) task
File "dest_part_1" created.
File "dest_part_2" created.
Done, without errors.
...
-rw-r--r-- 1 moon staff 96K 6 Oct 09:28 dest_part_2
-rw-r--r-- 1 moon staff 98K 6 Oct 09:28 dest_part_1
➜ grunt-csssplit git:(master) ✗ gzip dest_part_*
➜ grunt-csssplit git:(master) ✗ ls -ltrah
...
-rw-r--r-- 1 moon staff 12K 5 Oct 16:56 dest_part_1.gz
-rw-r--r-- 1 moon staff 18K 6 Oct 09:28 dest_part_2.gz
➜ grunt-csssplit git:(master) ✗
在 gzip 之前,文件大小相似,但在 zip 之后,第一部分和第二部分之间存在显着差异。我真的需要 gzip 之后这两个部分的大小相当,以便平衡网络流量。
- 如何在 在 gzip 之后将 css 文件分成相等的部分?
- 我觉得我可能搞错了 - 有没有更好的方法?
- 将我的 css 文件分成两半可使屏幕上的文本可读性提高 50%,这似乎效果很好。为了并行加载而拆分有什么缺点吗?互联网上的大多数信息都指向合并 css 文件以减少网络请求。
【问题讨论】:
-
来吧,拥有超过 27K 的代表,您有知道要求工具推荐是题外话。 “要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题和已完成的工作到目前为止解决它。”
-
这确实是一个我试图帮助回答的性能工具问题。希望这可以帮助你比利。
标签: html css gruntjs build-tools