CSS 的预处理程序分别有哪些优缺点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS 的预处理程序分别有哪些优缺点相关的知识,希望对你有一定的参考价值。

优点:
开发速度提升;
代码优化效率提高(对开发者而言);
代码更通俗易懂(对开发者而言);
维护简单便捷;
代码更干净,优美;
功能更多更强,CSS做出JS的特效(其实就是JS);

缺点:
舍弃用户体验来提高开发的效率,可以查考Bootstrap的缺点;
舍弃网页打开速度换取开发效率提升;
需要一个学习的过程,用之不当反而弄巧反拙;
总而言之,LESS/SASS缺点就是需要多一个编译器来重新编译一次你的CSS代码,也就是给浏览器多了一道工序,网页显示的速度会减慢(网页显示顺序,从上至下,一般CSS放在头部,先html DOM元素-->CSS-->脚本文件-->页面元素如图片,视频,音频--->最后完全显示)
参考技术A

  三种CSS 预处理器(框架):

      Sass的一个关键特性是缩进式的语法,这种语法可以产生柱式外观的代码。但是你需要花费时间学习一门新的语法以及重新构建你现在的样式表。

      LESS给CSS带来了很多特性,使得LESS能够和CSS无缝地紧密结合在一起。因此,你可以平滑地由CSS迁移到LESS,如果你只是对使用变量或者操作感兴趣的话,你不需要学习一整门全新的语言。”

      Stylus相对前两者较新,可以看官方文档介绍的功能。

  1.来自NodeJS社区,所以和NodeJS走得很近,与javascript联系非常紧密。还有专门JavaScript API的社区

  2.支持Ruby之类等等框架

  3.更多更强大的支持和功能

  总结:Sass看起来在提供的特性上占有优势,但是LESS能够让开发者平滑地从现存CSS文件过渡到LESS,而不需要像Sass那样需要将CSS文件转换成Sass格式。

参考技术B SASS 2007年诞生,最早也是最成熟的CSS预处理器,拥有ruby社区的支持和compass这一最强大的css框架,目前受LESS影响,已经进化到了全面兼容CSS的SCSS。
LESS 2009年出现,受SASS的影响较大,但又使用CSS的语法,让大部分开发者和设计师更容易上手,在ruby社区之外支持者远超过SASS,其缺点是比起SASS来,可编程功能不够,不过优点是简单和兼容CSS,反过来也影响了SASS演变到了SCSS的时代,著名的Twitter Bootstrap就是采用LESS做底层语言的。
Stylus,2010年产生,来自Node.js社区,主要用来给Node项目进行CSS预处理支持,在此社区之内有一定支持者,在广泛的意义上人气还完全不如SASS和LESS。

LESS & Sass
LESS是受Sass启发而开发的工具,它列出了如下开发的理由:

“为什么要开发一个Sass的替代品呢?原因很简单:首先是语法。Sass的一个关键特性是缩进式的语法,这种语法可以产生柱式外观的代码。但是你需要花费时间学习一门新的语法以及重新构建你现在的样式表。
LESS给CSS带来了很多特性,使得LESS能够和CSS无缝地紧密结合在一起。因此,你可以平滑地由CSS迁移到LESS,如果你只是对使用变量或者操作感兴趣的话,你不需要学习一整门全新的语言。”
Stylus
Stylus相对前两者较新,可以看官方文档介绍的功能。
1.来自NodeJS社区,所以和NodeJS走得很近,与JavaScript联系非常紧密。还有专门JavaScript API:http://learnboost.github.io/stylus/docs/js.html
2.支持Ruby之类等等框架
3.更多更强大的支持和功能

总结:
LESS/SASS优点:
开发速度提升;
代码优化效率提高(对开发者而言);
代码更通俗易懂(对开发者而言);
维护简单便捷;
代码更干净,优美;
功能更多更强,CSS做出JS的特效(其实就是JS);

总而言之,LESS/SASS就是CSS里面的jQuery,简化,减少开发时间,提升开发者开发体验。

LESS/SASS缺点:
舍弃用户体验来提高开发的效率,可以查考Bootstrap的缺点;
舍弃网页打开速度换取开发效率提升;
需要一个学习的过程,用之不当反而弄巧反拙;
总而言之,LESS/SASS缺点就是需要多一个编译器来重新编译一次你的CSS代码,也就是给浏览器多了一道工序,网页显示的速度会减慢(网页显示顺序,从上至下,一般CSS放在头部,先HTML DOM元素-->CSS-->脚本文件-->页面元素如图片,视频,音频--->最后完全显示)
你在CSS工序加了一个步骤,速度自然慢,时间自然多了。

什么网站适合LESS/SASS,企业网站,个人网站,普通静态页。

如果淘宝用了LESS/SASS,估计淘宝每年会失去至少5千亿成交额。

Stylus功能上更为强壮,和js联系更加紧密。

android mvvm 角色分别都有哪些担任

MVVM的目标和思想MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一个更加灵活高效的架构。

 

数据驱动
在MVVM中,以前开发模式中必须先处理业务数据,然后根据的数据变化,去获取UI的引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM中,数据和业务逻辑处于一个独立的View Model中,ViewModel只要关注数据和业务逻辑,不需要和UI或者控件打交道。由数据自动去驱动UI去自动更新UI,UI的改变又同时自动反馈到数据,数据成为主导因素,这样使得在业务逻辑处理只要关心数据,方便而且简单很多。

低耦合度
MVVM模式中,数据是独立于UI的,ViewModel只负责处理和提供数据,UI想怎么处理数据都由UI自己决定,ViewModel 不涉及任何和UI相关的事也不持有UI控件的引用,即使控件改变(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己的数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI的方式,改变更新UI的接口,改变从UI上获取输入的代码,可能还需要更改访问UI对象的属性代码等等。

更新 UI
在MVVM中,我们可以在工作线程中直接修改View Model的数据(只要数据是线程安全的),剩下的数据绑定框架帮你搞定,很多事情都不需要你去关心。

团队协作
MVVM的分工是非常明显的,由于View和View Model之间是松散耦合的。一个是处理业务和数据,一个是专门的UI处理。完全有两个人分工来做,一个做UI(xml 和 Activity)一个写ViewModel,效率更高。

可复用性
一个View Model复用到多个View中,同样的一份数据,用不同的UI去做展示,对于版本迭代频繁的UI改动,只要更换View层就行,对于如果想在UI上的做AbTest 更是方便的多。

单元测试
View Model里面是数据和业务逻辑,View中关注的是UI,这样的做测试是很方便的,完全没有彼此的依赖,不管是UI的单元测试还是业务逻辑的单元测试,都是低耦合的。

参考技术A 说MVVM首先先提到标记语言,随着20世纪初web的崛起,HTML跟JS这样标记语言+程序语言的组合模式开始变得令人注目。逐渐推出的Flex、Sliverlight、QT、WPF、JSF、Cocoa等UI系统不约而同地选择了标记语言来描述界面。
在这样的架构中,view(或者说叫控件,不但是从依赖关系上跟程序的其他部件解耦,而且从语言上跟其它部分隔离开来)
然而这样的系统架构中,MVC和MVP模式已经不能很好地适用了。微软架构师John Gossman在WPF的XAML模式推出的同时,提出了MVVM的概念。

在安卓开发中,layout文件是静态的,只能通过代码进行修改,大量的事件绑定和finViewById以及视图的逻辑充斥在Activity中,使Acticity显得特别胖。
MVP虽然在一定程度上解决了Acticity代码量庞大,实现视图逻辑和视图操作的解耦,但是他们还是需要大量的代码对layout进行设置属性,比如说ImageView的setImageBitmap或者TextView的setText,显得特别啰嗦也很容易出错
但是而在安卓的Databinding中,把一个layout里面的控件的某些属性绑定对应的bean,把操作的控件看成bean对象,只需要对layout绑定的bean进行修改之后,layout就会随之改变。
这里的bean就是MVVM中的Model,那么对bean进行逻辑处理的就是VM(ViewModel),这样我们主需要关心M和VM之间的交互了。但是,还不能是实现双向绑定,比如说,对一个EditText的text属性绑定一个bean的属性,那么对EditText修改之后他的bean不会随之变化,当然可以自定义属性解决这个问题。
下面就是layout
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- 配置变量,name字段为下面想要引用的类,type为全类名,
AS中快捷键ctrl+shift+alt+c -->
<data>
<import type="com.znke.hellodatabinding.test1.Person"/>
<variable
name="person"
type="Person"/>
</data>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 需要填充的字段用@表示 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="@person.name"
/>
</LinearLayout>
</layout>1234567891011121314151617181920212223242512345678910111213141516171819202122232425

一个布局文件就是一个ViewBinding对象,它包含了这个布局里面所有View和变量:
ActivityRecyclerviewBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_recyclerview);
1212

注意,ActivityRecyclerviewBinding是系统自动生成的
然后看一下MVVM的示意图

MVVM是MVP的升级版,只是把presenter变成了ViewModel,并且MVVM支持绑定。

以上是关于CSS 的预处理程序分别有哪些优缺点的主要内容,如果未能解决你的问题,请参考以下文章

三维模型格式

主流的CSS 预处理器都有哪些?

android mvvm 角色分别都有哪些担任

知名的CRM系统都有哪些,分别有啥优缺点,可以简单介绍一下吗?最好能有一个排行榜啥的,要2016年的哦

js的继承方式分别适合哪些应用场景

CSS3中的变形处理