3

LESS介绍

Posted by reedboat on Dec 11, 2010 in web

CSS虽然大大简化和扩展了网页的样式编写,但是CSS是个无逻辑的标记语言, 很多东西仍然难以复用,显得十分冗长。 虽说也可以用动态语言编写,但是不原生和直观,也不便于缓存。

最近看到一个工具,叫做LESS,也可以称为LESS语言,挺有意思的。官方网站 http://lesscss.org。 它为CSS引入了非常有用的几个编程特性,这几个特性十分的优雅,感觉CSS原本就该是这样的(或许以后真的会成为CSS的核心?)。

这些特性包括:

  • Variables(变量支持,实际上是常量,不能修改)
  • Mixins(类似函数,支持参数, 直接借用前面定义的样式模块)
  • Nested Rule(嵌套定义)
  • Operation(运算符,支持尺寸,颜色,变量的加减乘除)
  • Comments(支持C风格的单行注释)
  • Namespace(名称空间,用于对样式分组或者封装)
  • Scope(作用域,本地变量优先与全局变量)
  • Import(文件包含,可以导入less文件,变量可以跨文件生效)

可以看看下面的样式定义

@nice-blue: #5b83ad
@light-blue: @nice-blue + #111;
#header { color: @light-blue; }

.rounded_corners (@radius: 5px) {
    -moz-border-radius: @radius;
    -webkit-border-radius: @radius;
    border-radius: @radius;
}

#header {
    .rounded_corners;
}

#footer {
    .rounded_corners(10px);
}


#header {
    color: black;

    .navigation {
        font-size: 12px;
    }
    .logo {
        width: 300px;
        :hover { text-decoration: none }
    }
}

@base: 5%;
@filler: @base * 2;
@other: @base + @filler;
.test {
    color: #888 / 4;
    height: 100% / 2 + @filler;
}

LESS完全兼容原来的CSS语法,也就是说原有的css,直接将后缀改成LESS, 完全能够正常的工作。

使用一个LESS编译器lessc,即可将LESS语言编译成CSS。目前的lessc编译器有官方的版本,是用ruby写的。还有用php实现的版本(http://leafo.net/lessphp/#quickstart)和用js实现的版本(http://leafo.net/lessphp/#quickstart)。

用js写的版本,不用自己编译,只需要在页面引入一段js即可,非常的方便,对于使用html5的浏览器,支持客户端本地存储的话,那么完全不用担心效率问题。

一般来说可以使用php版本或者ruby版本,在服务器端编译好。这个工作完全可以交给程序,来自动化处理。

Tags:

 
0

用Redis来做排行榜存储

Posted by reedboat on Dec 5, 2010 in 编程

随着SNS和微博产品的火热,NoSQL概念逐渐的兴起。出现了一大批各种各样的KeyValue存储系统。我比较感兴趣的是MongoDb和Redis, 因为单纯的Key-Value存储系统难以满足各种复杂的逻辑业务, 仍这两个数据库分别加入了一些关系性的特性,如能有效利用会有很好的效果。

redis目前提供四种数据类型:string,list,set,zset(sorted set)和hset(hash set)。
string是最简单的类型,你可以理解成与Memcached一模一个的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。
set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。
zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
hset是另一个set,一个key对应的不再是一个元素而是一个hash表。

zset是个非常好的排行榜存储,一个key对应的一个数据集合,集合中的每个元素包涵两部分,value(待)排序的元素)和score(用来排序的得分依据)。例如用来存储微博关注数排行榜,value可以是微博用户的ID,而score则是该用户的关注数。
而且对于大部分排行榜数据,其实只需要存储Top N的数据,数据量小,效率高,用内存来存储非常合适,排行榜的实时性也可以做到很高。因为数据是用集合来存储的,存储的时候实际上是没有顺序的,排序计算是在获取的时候来做的.如果访问并发量很大的话,还可以再在前面做一个缓存。
利用redis的一个内置操作直接清除TopN外面的元素, 保持存储量的大小。
例如一个需要发布前30名的排行榜,我们使用的时候可以保留前500名的数据,防止需求变化。然后不断的往其中添加新数据,每当集合中的元素达到1000条的时候,进行一次trim操作,将集合的元素数量压缩成500。当获取前30名的时候,同样用redis做一个缓存,缓存时间设成30秒等。

redis zset数据结构支持的操作包括:
– 添加/删除/统计数量
– 修改score
– 获得score/排名
– 获取排名在某个区间的元素集合
– 获取score在某个范围的元素集合/数量
– 清理score/排名在某个区间外的元素
– 交集/并集运算

Tags: ,

Copyright © 2012 苇叶舟 All rights reserved. Theme by Laptop Geek.