gpt4 book ai didi

javascript - 使用JS生成CSS样式表

转载 作者:行者123 更新时间:2023-11-30 08:42:14 25 4
gpt4 key购买 nike

我最近尝试构建一个极其简约的轻量级CSS框架(类似于Pure CSS)。

在检查代码时,我的一位 friend 建议我使用Javascript生成CSS,主要是为了大大减小文件大小。在以下两种情况下,文件大小将减小:

  • 列类看起来类似于col-x-12,并且JS能够计算宽度并使用更少的代码来编写列类。
  • 我将能够在JS中映射CSS属性(例如bgbackground),从而也减小了文件大小。

  • 生成的CSS可以直接插入 head或添加到 CSSStyleSheet

    除了由于运行JS引起的少量开销外,这种方法还会导致什么其他问题?

    最佳答案

    听起来有一个坏主意,原因有几个。

    这可能会导致发送给用户的文件较小。如果文件大小是您的主要考虑因素-也许您正在通过昂贵的卫星上行链路进行传输-那么您可能需要通过JavaScript生成CSS。但是,如果没有,您将无缘无故地与几个缺点作斗争:

  • 不使用JavaScript的用户将获得一个完全无样式的页面。可能没关系,特别是如果文本是页面中最重要的元素。但是最好遵循progressive enhancement的原则,并允许使用支持CSS的浏览器的任何人获得样式化的页面。
  • 您的样式将更加脆弱。如果运送错误或无效的JavaScript,您的网站将完全没有样式。如果您的JavaScript包含特定于浏览器的错误,那么这些用户将完全无法使用其样式。如果您的JavaScript被浏览器加载项或公司防火墙阻止,则您的网站将完全不样式化。
  • 开发人员必须学习您的自定义CSS语言。开发人员不必学习通用的CSS,而必须学习自己的专有方言。您不能不聘请外部专家学习系统而聘请外部专家。
  • 开发人员必须考虑额外的抽象。当您的开发人员编写了某些无法正常工作的CSS时,他们不再思考“如何应用此CSS?”。他们必须思考“我的速记生成了什么CSS?如何应用CSS?”。这使您的样式更难于理解和调试,并使问题需要更长的时间来解决。
  • 调试CSS问题变得更加棘手了。如果您的代码位于普通的CSS文件中,则浏览器的调试工具可以向您显示您要调试的任何CSS规则的文件名和行号。如果要从JavaScript生成CSS,则不是这种情况。您也许可以使用CSS source maps来解决此问题-但现在您的JS工具也必须支持生成源 map 。
  • 您有额外的维护负担。您不仅必须维护CSS,而且还必须维护工具。
  • 您可能不会增加感知的加载时间。即使您向浏览器发送的字节数减少了,页面也可能变慢(或感觉变慢)。您的JavaScript运行时有两种选择:
  • 触发document.ready时。这样做的缺点是,在JavaScript完成运行之前,页面将以无样式的方式显示,而浏览器将使用新添加的样式规则完成对页面的重绘。
  • 一旦您的<script>标记在文档的<head>中求值。这样可以避免显示未设置样式的内容,但是现在浏览器必须做很多工作:
  • 解析您的自定义样式规则并从中生成CSS。
  • 为您的样式生成一个DOM元素,并将其插入页面。
  • 解析这些新的CSS规则。

  • 所有这些步骤必须先运行,然后浏览器才能继续加载页面。这意味着用户将不得不等待更长的时间才能看到页面。
  • 您不会获得免费的缓存。您的页面必须完成每次页面加载时的所有工作-或者您必须以缓存生成的CSS并重新使用它的方式编写JavaScript。如果您的样式位于普通的CSS文件中,则浏览器将为您处理缓存。
  • 这不是有效的。电脑时间便宜;程序员的时间很昂贵。上面所有问题在开发,维护,培训,文档和测试方面将比在页面加载时间上节省的时间更多。


  • 那么,您应该怎么做呢?
  • 确保您的 Assets 是sent gzipped 。 JavaScript和CSS只是文本。结果,它们压缩良好。
  • 合并并缩小 Assets 。如果您的项目中有10个CSS文件,则浏览器必须对它们进行10个单独的请求。将这些文件合并为一个文件意味着浏览器仅需发出一个请求。缩小消除了人类需要但计算机不需要的东西-注释,空格,换行符和描述性的变量名。 Google has some tool recommendations for your CSS and JavaScript
  • 删除不必要的代码。像UnCSS这样的工具可以帮助您找到未使用的CSS规则;这在JavaScript中是一个较难的问题,但是您可以使用a code coverage tool来帮助您。
  • 确保您的assets are cached correctly 。您的JS和CSS文件不会定期更改,因此您网站的访问者只需检索一次即可。他们的浏览器将缓存文件,并在其下一个页面 View 上重用它们。
  • 使用SASS之类的工具来生成CSS 。它不会帮助您调整文件大小,但可以帮助您减少代码编写。例如,NeatFoundation都具有可通过SASS进行自定义的网格系统。您可以编写更少的代码,轻松更改网格设置,并让SASS为您生成结果CSS。
  • 不用担心。可能是,您当前的设置足够好-或有一些需要轻松改进的地方。如果没有,几乎可以肯定,您可以更好地利用自己的时间。也许是技术性的,例如添加新功能或修复错误。也许与业务有关,例如与潜在客户交谈或调整一些营销文案。与构建此工具相比,对您的项目而言,有一些 yield 要大得多。
  • 关于javascript - 使用JS生成CSS样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322446/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com