基于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 Stream 数据流使用手册
Apr 17 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python 编写简单网页服务器的实例
2018/06/01 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
精选干货:Java精选笔试题附答案
2014/01/18 面试题
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
小学竞选班干部演讲稿
2014/08/20 职场文书
人民检察院起诉书
2015/05/20 职场文书
教导处教学工作总结
2015/08/12 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB