当你用 Sass 用得飞起时,如果突然听说一种叫 LibSass的sass语言已经火起来了,可能你会跳起来说:『LibSass 到底是个什么鬼!我是不是应该舍弃 Ruby Sass 然后投奔 LibSass , 我难道落伍了 ???』

稍安勿躁,你并没有落伍,读到后面你将了解到 Ruby SassLibSass 是相似的产物,而它俩的主要区别体现在接口调用编译速度功能支持这三点上

在这片文章里,连同 Ruby SassLibSass 的优缺点,我会全面地解释两者的区别

Ruby Sass

最开始,Sass 是由 Ruby 编写的,如果你刚使用 Sass 不久,你很有可能在使用的是这种 Sass。只要你本地运行了 Ruby,安装了 Sass,运行了编译器,你就可以使用 Sass 所有屌屌的功能跟特性了。

但是!只要脱离了 Ruby 环境,你的 Ruby Sass 就无法运行了。取决于你的项目文件的大小,Ruby Sass 引擎可能会花很长时间来编译,你的工程越庞大,那编译花费的时间就会越久,在开发大工程时需要尤其注意这点。

如果你的机器没有运行 Ruby,或者在大工程中需要花费很久来把 sass 编译成 css,你会怎么做?

走近 LibSass

LibSass 是 Sass引擎的一套 C/C++ 接口实现,它不依赖 Ruby 环境就可以把sass 编译成 css,因此它能够被集成到其他语言中去。

LibSass自己本身不做任何事,它只是一个库,为了能让它工作,你需要一个包装器(或者是接口实现)来运行这个库,同时来编译你的样式表。这其中最常用的 LibSass 几个包装器分别是 SassC(第一个被开发);node-sass, grunt-sass – 甚至有一个Ruby实现的包装器

举例来说,如果项目中运行了 node-sass, 那么 LibSass 就在 node-sass 包装器在 Node.js 里执行编译时作为核心库存在

为什么选择 LibSass?

使用 LibSass, 你不再需要将开发跟 Ruby 环境依赖捆在一起。使用繁多的包装器,你可以轻而易举地将 Sass 编译集成在几乎所有语言

使用 LibSass 最棒的一点体现在编译速度上,跟 Ruby Sass 相比,LibSass 非常显著的快了4000%倍。看一看 Ruby Sass, LibSass 以及其它 CSS 预处理器的编译时间对比吧!

兼容 Ruby Sass ?

LibSass 并不完美,很多开发者还在犹豫是否要将代码迁移到 LibSass ,因为涉及到某些功能特性时,它仍然落后于 Ruby Sass。(译者注:目前LibSass 3.3已经完全实现了新旧Ruby Sass的所有功能特性!)

例如,@at-root, @error,以及很多3.4版本 Sass 的新特性在 LibSass 中都不支持。想全面了解 Sass, LibSass, 以及老Sass引擎的功能支持差异,看一看这个网站

LibSass 的前途一片光明!

好消息是 LibSass 很快将追上 Ruby Sass 的脚步,只要这一步实现了,两者之间的功能特性将会继续向前发展。很快我们就能兼顾 LibSass飞快的编译速度Ruby Sass丰富的功能 了。

SassMeister 就能快速测试 Ruby SassLibSass 之间的差异!

最后的感想

只要你投入 LibSass 的怀抱, 你就会发现跟使用 Ruby Sass 一样的简单,编译速度却快得多!并且如果你仅仅使用了 Sass 的核心功能,将代码迁移到 LibSass 似乎是没什么风险的。

如果你、你的团队以及你的项目偏向使用 Ruby Sass,那么就坚持使用它!取决于项目大小,LibSass的速度优势带来的价值可能会大于暂时缺失一小部分Sass功能这一劣势损失的价值。

原文链接:http://sassbreak.com/ruby-sass-libsass-differences/

本文地址: https://mrpeak.github.io/2015/12/01/sass-type/