无cookieless域使用自定义javascript函数减少CSS

无cookieless域使用自定义javascript函数减少CSS,javascript,css,sass,less,cookieless,Javascript,Css,Sass,Less,Cookieless,我想使用less()而不是sass()来预处理css。我有一组静态资源的无cookieless域。例如:0.mydomain.com、1.mydomain.com、2.mydomain.com等。我希望使用较少的代码来编译CSS,以便将无cookieless域注入到编译后的CSS输出中。我发现可以使用@function在sass文档中创建自定义函数。是否存在价格更低的等价物(我找不到)?我需要一个函数来执行哈希算法,将文件名转换为对应于无cookieless域(X.mydomain.com)的数

我想使用less()而不是sass()来预处理css。我有一组静态资源的无cookieless域。例如:0.mydomain.com、1.mydomain.com、2.mydomain.com等。我希望使用较少的代码来编译CSS,以便将无cookieless域注入到编译后的CSS输出中。我发现可以使用@function在sass文档中创建自定义函数。是否存在价格更低的等价物(我找不到)?我需要一个函数来执行哈希算法,将文件名转换为对应于无cookieless域(X.mydomain.com)的数字X。如何使用更少的资源来实现这一点

下面的例子是为了说明:

在my.less文件中:

@function domainX(path) {
    //configs
    var protocol = "http://";
    var domain = ".mydomain.com"
    var N = 4; //4 cookieless domains

    var sum = 0;
    var s = path.substr(path.lastIndexOf("/") + 1);
    for (var i = 0; i < s.length; i++) {
        sum += s[i].charCodeAt();
    }
    @return protocol + (sum % N) + domain + path;
}

.myItem {background-image:url(domainX('/images/background.jpg')) }
SASS的例子是

参见“功能指令”一节

下面是与LESS文档最接近的示例,但是没有构造基本url的函数

@base-url: "http://assets.fnord.com";
background-image: url("@{base-url}/images/bg.png");
也许解决方案中也有一个较少的+Node.js部分


谢谢

No.LESS的功能比Sass少得多(没有函数,没有循环)。您必须使用mixin来远程执行类似的操作。Sass可以做到这一点,但它没有内置任何字符串操作函数,因此您必须编写一些Ruby代码来添加这些函数。

您应该能够使用较少的嵌入js的能力来实现这一点:

.background(@path) {
    background-image: ~`(function(){ var protocol = "http://"; var domain = ".mydomain.com"; var N = 4; var sum = 0; var s = @{path}.substr(@{path}.lastIndexOf("/") + 1); for (var i = 0; i < s.length; i++) { sum += s[i].charCodeAt(); } return "url(" + protocol + (sum % N) + domain + @{path} + ")";})()`;
}

.myItem {
    .background("/images/background.jpg");
}
.background(@path){
背景图像:~`(function(){var protocol=“http://”var domain=“.mydomain.com”;var N=4;var sum=0;var s={path}.substr(@{path}.lastIndexOf(“/”)+1);for(var i=0;i
不知道性能会是什么样子,但是如果您正在处理服务器端,您不会在意,而客户端缓存了,所以应该不会有问题

.background(@path) {
    background-image: ~`(function(){ var protocol = "http://"; var domain = ".mydomain.com"; var N = 4; var sum = 0; var s = @{path}.substr(@{path}.lastIndexOf("/") + 1); for (var i = 0; i < s.length; i++) { sum += s[i].charCodeAt(); } return "url(" + protocol + (sum % N) + domain + @{path} + ")";})()`;
}

.myItem {
    .background("/images/background.jpg");
}