前端加载自定义字体及速度优化
今天是2.14情人节,也是另一个重要的日子,那就是我的第一个全栈项目上线啦~~~
www.daren.com
这个是公司的官网,采用Python+Django做后端,前端也用了gulp自动化工作流,使用了前后端分离的开发方式,从年前弄到现在,虽然之后肯定还会有小的迭代和修改,一些轮播等效果还暂时处于display:none的状态,但是终于可以算是第一版上线了!能适配主流浏览器的PC端和移动端,在做官网的过程中,真的学到了很多,之前学的东西都一个个记在博客上了,今天来记一个新的问题,就是字体。
目前前端加载自定义字体越来越多了,我们的官网中也有这个需求,要改变一部分字体,这里来记录一下:
如何加载自定义字体?
CSS3中,使用@font-face即可加载自定义字体了。
推荐的跨浏览器 @font-face CSS 写法:
/*声明 WebFont*/
@font-face {font-family:'YourWebFontName';src:url('../font/YourWebFontName.eot');src:url('YourWebFontName.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */url('YourWebFontName.woff') format('woff'), /* Modern Browsers */url('YourWebFontName.ttf') format('truetype'), /* Safari, Android, iOS */url('YourWebFontName.svg#YourWebFontName') format('svg'); /* Legacy iOS */font-weight:normal;font-style:normal;
}/*使用选择器指定字体*/
.home h1, .demo > .test {font-family:'YourWebFontName';
}
到目前为止都非常简单,但是我引入之后,发现字体的加载非常缓慢,原来,中文字体由于文字数量庞大,所以字体文件也非常之大,我的字体文件就有4M,页面加载之后,还需要很长的时间来下载字体,下载完成之后,才会正确显示,在用户看来,就是打开页面很久之后字体又变了,体验非常不好。
字体文件太大,加载慢,怎么办呢?
这时候就要github一下了,最终发现了一个神器: font-spider
简单来说,font-spider的工作原理是这样的: 中文字体文件之所以很大,是因为英语只有26个字母,而中文的汉字有好多好多个,所以文件相对来说就会大很多。font-spider就是从你的css文件的@font-face入手,去查找字体,然后遍历你的html文件,从css和html文件中就可以找到那些你实际上使用的文字,取出这些文字之后,再将他们单独变成字体文件,这样,就去掉了绝大部分其实用不到的文字,体积也会缩小很多很多。
看完之后发现这东西真是太棒了,赶紧来试试,由于我使用了gulp,就直接用相应的构建工具gulp-font-spider
如何使用 gulp-font-spider
第一步当然是安装了:npm install gulp-font-spider --save-dev
接下来在gulpfile.js中,编写任务:
//font任务,从app复制字体到dist
gulp.task('font', function() {return gulp.src("app/fonts/**/*").pipe(plumber()) .pipe(gulp.dest("dist/static/fonts")).pipe(browserSync.stream());
});
// fontspider任务,在dist中压缩字体文件并替换。成功后会发现dist/fonts中的字体文件比app/fonts中的小了很多
gulp.task('fontspider', function() {return gulp.src('dist/*.html') //只要告诉它html文件所在的文件夹就可以了,超方便.pipe(fontSpider());
});
这两个任务很简单啦:
- font任务是把开发文件夹app里边的字体文件复制到编译之后的文件夹dist中。
- fontspider任务是把dist文件夹中的字体文件,变为压缩后的文件。
显然的,由于这俩任务的关系以及font-spider的工作原理,我们在编写default任务的时候,记得一定要保证html,sass/css,font相关的任务执行完之后,再来执行fontspider任务,不然肯定会出错的啦~
最后,简单看看执行成功的样子:
然后愉快的确认一下效果:
31/3951≈0.7846% 字体文件缩小到了原来的0.7846%,小了不是一点点,棒棒哒!!!
前端加载自定义字体及速度优化相关推荐
- java加载字体文件_Java的加载自定义字体文件(.TTF)
我在下面这段代码中使用,并将其与该堆栈跟踪出现:Java的加载自定义字体文件(.TTF) java.io.FileNotFoundException: font.ttf (No such file o ...
- html自定义字体缓存,PixiJS:加载自定义字体
Environement: Xampp,Firefox,Pixijs,HTML,CSS 现在我尝试加载自定义字体. 我第一次加载我的Pixijs项目应运行的页面时,字体没有显示,控制台显示一些错误消息 ...
- java加载自定义字体java.io.IOException: Problem reading font data.
异常信息 load font error:{} java.io.IOException: Problem reading font data.at java.awt.Font.createFont0( ...
- Flutter 动态加载自定义字体
Flutter中使用自定义字体 场景1, 加载特定字体,在开发前字体文件就已确定,可以使用 参考 flutter开发文档Use a custom font | Flutter,这里就不再描述. 场景2 ...
- Android加载自定义字体出错,Android设置自定义字体的解决方案
找了很多解决方案,但是都会报错,只好边借鉴着前辈们的思路,边自己尝试改代码了QWQ 前面准备:要先把使用的字体文件放入到工具中 新建一个名叫assets的文件夹,然后把字体文件复制到里面,如图 成功放 ...
- 在 Umi 中打包与加载自定义字体
使用 Webpack 打包字体文件的时候需要使用 file-loader 来处理打包文件,在 UmiJS 3 中可通过配置文件中的 chainWebpack 函数来自定义 Webpack 的配置. 首 ...
- C# 从TTF文件加载自定义字体
原文地址:http://www.cnblogs.com/twzy/p/4922962.html
- arcgis前端(2)----->基础篇--发布一个自定义地图及加载自定义地图/底图
arcgis前端(2)----->基础篇–发布一个自定义地图及加载自定义地图/底图 文章目录 arcgis前端(2)----->基础篇--发布一个自定义地图及加载自定义地图/底图 前言 & ...
- 微信小程序加载第三方字体
1.加载本地字体 做小程序项目时,有时为了提升页面展示效果,会引入一些第三方字体,引入方式如下代码片段 /*每个页面公共css */ @font-face {font-family: "al ...
最新文章
- Hystrix降级逻辑中如何获取触发的异常?
- java二重循环换行_Java零基础系列教程05Java二重循环
- html列表逆序输出,JS实现倒序输出的几种常用方法示例
- Leetcode每日一题:190.reverse-bits(颠倒二进制位)
- ssis 表达式任务_在SSIS中执行SQL任务:SqlStatementSource表达式与可变源类型
- 一口气带你踩完五个 List 的大坑,处处坑!| 原力计划
- 新版微信不停跳转到小程序_微信又有大动作,小程序跳转功能将受限?
- fedora安装java
- 合并Python列表的魔幻12法
- 畅想物联网未来 | 百度云天工智能物联网沙龙圆满落幕
- Nide.js安装配置
- 随时牵手 不要随意分手[转帖]
- 面了一个4年经验的测试工程师,自动化都不会也要15k,我真是醉了...
- ssh时提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”
- 排序评估指标——NDCG和MAP
- 齐次坐标表示向量与坐标理解
- Ubuntu无法重启:教你用u盘系统修复ubuntu
- juyter显示决策树图形_在Jupyter Noteb中绘制交互式决策树
- 如何快捷得去除代码中的行号?
- CCNP知识点总结——OSPF
热门文章
- 2019年数学建模国赛(国一)经历总结
- 蓝桥杯魔方旋转问题(python)
- 有限元方法求解二维矩形区域椭圆方程
- onedrive登陆以后是白板,我下载了onedrive以后,安装到登陆界面,输入账号,提示:我们的系统中没有 - Microsoft Community...
- 计算机交换机配置实验心得,网络配置实验心得
- wordpress文章自动同步天涯博客插件wp2Tianya发布
- 买礼物(线段树+set维护)
- 解决cv2.error: OpenCV(4.5.1) /tmp/pip-req-build-n_alixql/opencv/modules/highgui/问题
- 课本剧剧本和计算机专业相关,【课本剧】 高中课本剧剧本大全
- Python+Vue计算机毕业设计报刊征订管理系统uu609(源码+程序+LW+部署)