基于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 相关文章推荐
windows下安装nodejs及框架express
Aug 07 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
利用nodejs监控文件变化并使用sftp上传到服务器
Feb 18 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
nodeJS实现路由功能实例代码
Jun 08 NodeJs
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
Sep 19 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 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
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
JavaScript实现移动端轮播效果
2017/06/06 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
python实现从字典中删除元素的方法
2015/05/04 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Python 闭包的使用方法
2017/09/07 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
python list多级排序知识点总结
2019/10/23 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
银行演讲稿范文
2014/01/03 职场文书
二手房购房意向书范本
2014/04/01 职场文书
请假条格式范文
2014/04/10 职场文书
教师对学生的评语
2014/04/28 职场文书
nginx静态资源的服务器配置方法
2022/07/07 Servers