2012-05-02 36 views
5

我负责监督网站的整个IT方面(包括基础设施和开发),我与主要前端开发人员有不同的意见。他的做法是创建单独的类,每带来一个功能,并根据需要样式元素组合成许多类:易于维护CSS或轻量级HTML?

HTML 
<div class="float_left padding_10 width_60_percent"></div> 
<div class="float_left width_30_percent"></div> 
<div class="float_left padding_10 width_10_percent"></div> 
CSS 
.float_left { float: left; } 
.padding_10 { padding: 10px; } 
.width_60_percent { width: 60%; } 
.width_30_percent { width: 30%; } 
.width_30_percent { width: 10%; } 

优点:

- 通过HTML CSS的理解:只需查看HTML中的类名,就可以了解CSS正在做什么。
- 轻松创建的:一旦你有你的定义的类集,它只是一个他们在HTML结合的事,你不必不断谱写新的CSS。
- 易维护性:与上述相同的原因。
- 便携:您可以使用相同的方法为大家讲解工作的任何网站(这是有道理的,他,因为他是在不同的项目工作的承包商)。
- 较小CSS:只要你的布局达到由此相同的类被再次和重新使用再次(这将是一个适当的布局的情况下,一定的临界尺寸,但显然不会因上述反射例子的简洁)。

缺点:

- 更大的HTML
- HTML难以阅读,如果你不感兴趣的CSS部分(其中我的后端开发人员创建的意见都没有)。
- 更难基于类选择(我们使用jQuery)整合的JavaScript。

我的方法并非由编写/维护CSS本身的容易所决定,而是担心我们的HTML代码的很大一部分将仅用于整合我们的CSS,这会影响性能:我相信最好有一个更大的CSS被获取和缓存一次,而更小的HTML可以为每个页面视图节省带宽,而不是相反。因此,我会选择以下方法:如上述

HTML 
<div id="column_left"></div> 
<div id="column_middle"></div> 
<div id="column_right"></div> 
CSS 
#column_left { float: left; padding: 10px; width: 60%; } 
#column_middle { float: left; width: 30%; } 
#column_right { float: left; padding: 10px; width: 10%; } 

优点/缺点
对面。

我觉得有一个轻量级的HTML代码是实现您的网站增长的关键:
- 页面加载将更快,这将有助于搜索引擎优化和用户体验。
- 可以为相同的带宽提供更多页面,从而节省您的基础架构成本。

在试图得到一个事实上的答案,我们扫描的“大”网站,看看被分配到使用ID和班级是什么HTML的一部分。下面是代码:

<?php 
require_once 'simple_html_dom.php'; 
$pages = array('http://www.amazon.com', 'http://www.ebay.com', 'mywebsite.html', 'http://stackoverflow.com','facebook.html'); 
foreach ($pages as $page) { 
    echo "\n$page\n"; 
    $html = new simple_html_dom(); 
    $string = file_get_contents($page); 
    $total = mb_strlen($string); 
    echo "HTML = " . $total . " characters\n"; 
    $html->load($string); 
    foreach (array('id', 'class') as $attribute) { 
     $count = 0; 
     $elements = $html->find("*[$attribute]"); 
     foreach ($elements as $element) { 
      // length of id or classes, + id="..." or class="..." 
      $count = $count + mb_strlen($element->$attribute) + mb_strlen($attribute) + 3; 
      //echo $element->$attribute . "\n"; 
     } 
     echo " -from $attribute attributes = $count -> " . round($count/$total * 100) . "%\n"; 
    } 
} 

和这里的结果:

http://www.amazon.com 
HTML = 101680 characters 
    -from id attributes = 943 -> 1% 
    -from class attributes = 6933 -> 7% 

http://www.ebay.com 
HTML = 71022 characters 
    -from id attributes = 1631 -> 2% 
    -from class attributes = 4689 -> 7% 

ourwebsite.html 
HTML = 35929 characters 
    -from id attributes = 754 -> 2% 
    -from class attributes = 2607 -> 7% 

http://www.imdb.com/ 
HTML = 74178 characters 
    -from id attributes = 1078 -> 1% 
    -from class attributes = 5653 -> 8% 

http://stackoverflow.com 
HTML = 204169 characters 
    -from id attributes = 3376 -> 2% 
    -from class attributes = 39015 -> 19% 

facebook.html 
HTML = 419001 characters 
    -from id attributes = 6871 -> 2% 
    -from class attributes = 85016 -> 20% 

到目前为止,我们已经使用了“我”的做法,我很高兴看到我们保持的百分比与其他大型网站相同比例的id and类属性的代码(分别约为2%和7%)。尽管如此,为了验证这一选择,我想问以下问题,我希望有经验的开发人员/网站管理员能够回答:

Q1:您是否看到其他优点/缺点赞成/反对2种方法? Q2:从您的经验来看,是否担心使用轻量级HTML代码至关重要,还是因为使用压缩和其他标准而忽略了这一点(例如,您将花费更多资金与您的前端开发人员争夺) )?

通过查看结果,你会看到有似乎是在代码有关idclass属性量的模式(虽然我知道扫描更多的网站会提供更准确的图片):
- 所有网站都有大约1%到2%的与id属性相关的HTML代码。该网站的
-4大约有7%的相关classes他们的HTML代码。
-the等都有20%左右的相关classes他们的HTML代码。

Q3:是否有这些图案的技术说明(例如在Facebook和#2使用相同的框架来生成自己的CSS)?

回答

3

我在企业网络软件项目开发的前端,大约有50人写代码,其中大部分后端。起初,我同意尽可能少的类来使代码更轻,在css中使用大量的继承。所以我们一直在使用“尽可能少的类”的方法。

A1:随着几班的做法,大量的CSS定义将使用元素名称添加样式,像.left-column section li a这使得生活开发者更容易,但实际上使CSS慢,如CSS是从分析右到左。在我的示例中,浏览器首先检查所有链接,然后检查所有列表元素,等等。如果我只有a.lc-link,那么css的使用速度会更快,所需元素更少。

我们遇到的另一个问题是缺乏模块化。我可以设计一个很好的元素,我们称它为.flight-dates,它的效果很好。然后一个新的用例出现,有人想在表单中间使用,而不是主页面模块。但该表单是为了在表单标签上使用单个类而构建的,其他所有内容都使用了继承。所有的继承都会污染.flight-dates,所以我需要返回并为css添加更高的特性,所以.flight-dates样式对于它们何时是窗体的子项有额外的定义。

那样的事情发生,每周3〜4次。 较少的课程=较少的灵活性+丑陋的样式表具有很高的特异性,这是我从它拿走的东西。

A2:使用JavaScript的发生在页面上量,的所用类量现在几乎无关紧要。它对我所知的DOM操作速度没有任何影响。所以我们已经失去了从少数几种方法中获得的优势。

参考你的测试,记住,下载css和解析css不是一回事

此外,前面提到的CSS的修正实际上使事情更慢的两个后端和前端开发者。因为我们试图尽可能少地利用类来让后端更容易,所以如果将后端放在新的环境中,后端会留下像婴儿一样哭泣的组件,并且前端必须更改6个月前写入的css。我个人浪费了几个星期。

我会说这是做的工作比较慢,而且也没有性能上的优势值得谈论。

A3:Sass和Less之类的东西往往会导致CSS中的常见模式。另外,许多好的网格和相关的css框架使用通用的类名。想想jQuery ui或960网格。

如果你想从我们的错误中学习,听你前端的家伙。 您的后端人员会更开心,因为组件始终按照他们期望的方式行事。 您的前端人会更快乐,因为他们将能够编写健壮,发射后不管的CSS,他们将不必再为弹出时老调重弹了新的使用情况。 你的html会稍微大一些,但老实说,这种差异是微不足道的,我不相信它会导致任何重大的瓶颈。 你的css运行速度会更快。 工作最终将花费更少的时间来完成。

3

你的前端开发正在做的是所谓的面向对象的CSS(OOCSS),一些人认为可能是您的网站的速度是有益的。

我不觉得自己老调重弹了OOCSS这里的参数,所以只是阅读FAQ:

https://github.com/stubbornella/oocss/wiki/faq

编辑:我宁愿犯错的Facebook /堆的侧面比亚马逊/易趣时它涉及到编码标准。请注意,更进步的网站(FB /堆栈)似乎有更高的类别百分比?

+0

提及'OOCSS'的+1。我正在浏览你链接的常见问题,并且不同意'更小的文件,因此更快的传输参数,原因如下:你的'CSS'将被提供和缓存一次,你的HTML是动态内容,因此会影响每个页面视图。我同意你关于编码标准和更高阶级比例的观点。 – Max

0

我看到一篇文章最近从谷歌显然鼓励OOCSS方法,但它几乎肯定创造更大的HTML和CSS,这将真正重要的大型网站。

我从来没有见过使用oocss的开发人员,这会让我建议如果该网站正在由其他开发人员进行工作,或者希望将来可能会更好,那么采用更多的方法可能会更好开发商遵循

+0

是否是这篇文章:https://groups.google。com/forum /#!topic/object-oriented-css/VGq7Ph2EobA? – Max

+0

根据我的经验,尽量使用尽可能少的类会导致更大的css文件,您可能必须为同一样式编写五个不同的选择器,以尊重多个层次结构。 – daveyfaherty

+0

但是,您可以在您的HTML购买中添加几个类到您的元素 – atmd