作为网络开发人员,您只能付出一定的努力来优化您的 CSS 代码。然而,计算机几乎可以立即考虑更多,因此在优化方面做得更好。 问题是:什么 CSS 代码假设是最优化的? (对于现代浏览器)
A、B、C 和 D 是 DOM 对象(可以说是 DIV 元素)并且数字 1-17 代表属性(如颜色、背景、宽度、高度等)
而所有数字都代表一种独特的属性。例如:
4 = background-color: #FF0;
5 = width: 50px;
10 = background-color: #F00;
您可以通过多种方式为该网站生成 css 代码:
所有自己的 ID
#A { 1 2 5 8 9 10 12 }
#B { 1 4 5 11 12 13 14 15 }
#C { 1 2 3 5 7 }
#D { 3 4 5 6 16 17 }
但是,文件会非常大,属性不共享,一个简单的测试证明渲染速度相当慢。 (image1.html,见下面的文件生成脚本)
分享一些共同的属性
#A { 2 8 9 10 12 }
#B { 4 11 12 13 14 15 }
#C { 2 3 7 }
#D { 3 4 6 16 17 }
.1 { 1 }
.5 { 5 }
文件会更小,渲染似乎更快。 (参见 image2.html)
共享所有通用属性
#A { 8 9 10 }
#B { 11 13 14 15 }
#C { 7 }
#D { 6 16 17 }
.1 { 1 }
.3 { 3 }
.2 { 2 }
.4 { 4 }
.5 { 5 }
.12 { 12 }
文件会更小(大多数情况下),而且渲染速度也更快。但请注意,A、B 和 C 最终有一个 ID,以及 4 个只包含一个属性的类! (参见 image3.html)
现在这些是 CSS 代码的三个简单示例。但是正如您可以想象的那样,当存在更多 DOM 对象并且存在更多属性重叠时,理论上您最终可能会得到一个具有 1 个 ID 和十分之一类的 DOM 对象!
假设最优化的 CSS 代码是什么? (对于现代浏览器) 您应该限制每个 DOM 对象的类数量吗?与将其添加到 ID 相比,您是否更喜欢“包含类的单个属性”?
附注作为测试,我使用 PHP 加载了一张图片。比读取该 PNG 的像素值并使用 CSS 和 DIV 元素创建相同的图片。 The code for generating image1.html, image2.html and image3.html can be found here 您可以使用任何 PNG 图像...我使用了 this image
最佳答案
您已经用您创建的测试回答了您自己的问题。
@torazaburo 为您的问题提供了很好的意见。
为每个共享属性创建 ID 和类将加快您的运行时间。另一方面,创建包含最多属性的类将加快解析时间。 这两种方法的问题在于,如果您将其用作经验法则,您的代码将很快变得不可读且难以维护。
这是您自己的判断力和工作风格发挥作用的地方。 我看不出为单个属性创建 ID 或类或为 DOM 中不重复的元素创建类的意义,因为加载时间的增加是微不足道的。
因此,请尝试通过解决代码重复问题来优先考虑 CSS 优化。这将有效地减少您的总体加载时间,并使您的代码在未来具有可读性和可维护性。
关于html - 为浏览器优化的 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797663/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda