基于nodejs的雪碧图制作工具的示例代码


Posted in NodeJs onNovember 05, 2018

前颜(yan)

雪碧图(CSS sprite ),就是把很多小图标合并为一张图片。

在Web开发中,使用雪碧图是优化Web性能的一种方法。

比如你可能遇到过这样的一种场景:在你的页面中,使用到了很多的小图标,然后你的每个小图标都是通过 <img src='logo.png'>来引用的。

通过这种方式虽然比较方便,但是存在的一个缺点就是性能问题,即浏览器在解析每个小图标时,都要发起一次http或(https)请求,而这个小图标本身却很小,可能只有十几k甚至几k,那么为每个小图标单独发起http请求,其实有点资源浪费。

为什么会资源浪费呢?

浏览器在与服务器进行http请求的过程中,需要有一个类似握手通信的过程,然后才是真正的获取数据。

举个例子,在这里我把浏览器发起的http图片请求简单分为两个过程,分别为:

1、浏览器与服务器的通信握手过程,假设耗时X ms(毫秒)

2、真正的数据获取过程,假设耗时 Y ms(毫秒)

那么浏览器发起一次http请求的总耗时为:sum(1)=X+Y ms,由于小图标数据很小,可能只有几k,因此通信过程的耗时X是大于Y的。

而当你在网页中引用了很多小图标时,假设有n个小图标,此时总耗时为sum(n)=nX+nY ms,通过对比sum(1)和sum(n),你就会发现,上面所说的资源浪费主要是在于通信握手的时间Y。此时,我就会想,如果我一次性取得所有的小图标,那么总耗时就变成了sum(n)=nX+Y ms,这样就能节省(n-1)Y的http握手通信的时间开销,从而优化了web的响应性能。

一、雪碧图抠图(background-position)

通过前面的介绍,我们知道,雪碧图的原理就是将页面中使用到的小图标合成为一张总图。这样的话当我们想要使用雪碧图中的某一个小图标,应该通过如何实现呢?

答案是通过css的background-position,background-position的默认坐标是(0,0),关于background-position的详细使用,大家可以网上搜索一下,资料很多。(这次主要讲雪碧图制作工具)

二、雪碧图制作工具 simple-sprite

那么如何合成雪碧图呢?怎样才能更方便的合成雪碧图呢?

因为懒,我的想法是,每次当我需要合成雪碧图时,我只要经过以下尽量简单的步骤就可以快速合成,并且可以导出各个小图标在雪碧图中的background-position css样式。为此,我用nodejs写了一个雪碧图制作工具:simple-sprite,并打包生成npm包发布至npm官网。

雪碧图制作步骤如下:

1 创建雪碧图生成工程

mkdir sprite-generator
cd sprite-generator

2 初始化工程

npm init

3 把所有小图标放到imgs中

mkdir imgs && 把所有的小图标放到imgs中

4 下载simple-sprite npm包

npm install --save simple-sprite

5 运行生成雪碧图

let sprite = require('simple-sprite');

sprite.generateSprite('./imgs');

simple-sprite:https://www.npmjs.com/package/simple-sprite

三、github源码

构建工具:rollup

github源码:https://github.com/SimpleCodeCX/simple-sprite#readme

(如果你点开了我的github源码连接,顺便也帮我点个star哦!哈哈)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 NodeJs
Nodejs学习笔记之入门篇
Apr 16 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 #NodeJs
nodejs中函数的调用实例详解
Oct 31 #NodeJs
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
Oct 17 #NodeJs
Nodejs实现多文件夹文件同步
Oct 17 #NodeJs
深入理解NodeJS 多进程和集群
Oct 17 #NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 #NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 #NodeJs
You might like
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
php5新改动之短标记启用方法
2008/09/11 PHP
PHP session会话的安全性分析
2011/09/08 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
ext 代码生成器
2009/08/07 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
3种python调用其他脚本的方法
2020/01/06 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
护士找工作求职信
2014/07/02 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
亮剑观后感
2015/06/05 职场文书
保外就医申请书范文
2015/08/06 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书