今天是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%,小了不是一点点,棒棒哒!!!

前端加载自定义字体及速度优化相关推荐

  1. java加载字体文件_Java的加载自定义字体文件(.TTF)

    我在下面这段代码中使用,并将其与该堆栈跟踪出现:Java的加载自定义字体文件(.TTF) java.io.FileNotFoundException: font.ttf (No such file o ...

  2. html自定义字体缓存,PixiJS:加载自定义字体

    Environement: Xampp,Firefox,Pixijs,HTML,CSS 现在我尝试加载自定义字体. 我第一次加载我的Pixijs项目应运行的页面时,字体没有显示,控制台显示一些错误消息 ...

  3. java加载自定义字体java.io.IOException: Problem reading font data.

    异常信息 load font error:{} java.io.IOException: Problem reading font data.at java.awt.Font.createFont0( ...

  4. Flutter 动态加载自定义字体

    Flutter中使用自定义字体 场景1, 加载特定字体,在开发前字体文件就已确定,可以使用 参考 flutter开发文档Use a custom font | Flutter,这里就不再描述. 场景2 ...

  5. Android加载自定义字体出错,Android设置自定义字体的解决方案

    找了很多解决方案,但是都会报错,只好边借鉴着前辈们的思路,边自己尝试改代码了QWQ 前面准备:要先把使用的字体文件放入到工具中 新建一个名叫assets的文件夹,然后把字体文件复制到里面,如图 成功放 ...

  6. 在 Umi 中打包与加载自定义字体

    使用 Webpack 打包字体文件的时候需要使用 file-loader 来处理打包文件,在 UmiJS 3 中可通过配置文件中的 chainWebpack 函数来自定义 Webpack 的配置. 首 ...

  7. C# 从TTF文件加载自定义字体

    原文地址:http://www.cnblogs.com/twzy/p/4922962.html

  8. arcgis前端(2)----->基础篇--发布一个自定义地图及加载自定义地图/底图

    arcgis前端(2)----->基础篇–发布一个自定义地图及加载自定义地图/底图 文章目录 arcgis前端(2)----->基础篇--发布一个自定义地图及加载自定义地图/底图 前言 & ...

  9. 微信小程序加载第三方字体

    1.加载本地字体 做小程序项目时,有时为了提升页面展示效果,会引入一些第三方字体,引入方式如下代码片段 /*每个页面公共css */ @font-face {font-family: "al ...

最新文章

  1. Hystrix降级逻辑中如何获取触发的异常?
  2. java二重循环换行_Java零基础系列教程05Java二重循环
  3. html列表逆序输出,JS实现倒序输出的几种常用方法示例
  4. Leetcode每日一题:190.reverse-bits(颠倒二进制位)
  5. ssis 表达式任务_在SSIS中执行SQL任务:SqlStatementSource表达式与可变源类型
  6. 一口气带你踩完五个 List 的大坑,处处坑!| 原力计划
  7. 新版微信不停跳转到小程序_微信又有大动作,小程序跳转功能将受限?
  8. fedora安装java
  9. 合并Python列表的魔幻12法
  10. 畅想物联网未来 | 百度云天工智能物联网沙龙圆满落幕
  11. Nide.js安装配置
  12. 随时牵手 不要随意分手[转帖]
  13. 面了一个4年经验的测试工程师,自动化都不会也要15k,我真是醉了...
  14. ssh时提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”
  15. 排序评估指标——NDCG和MAP
  16. 齐次坐标表示向量与坐标理解
  17. Ubuntu无法重启:教你用u盘系统修复ubuntu
  18. juyter显示决策树图形_在Jupyter Noteb中绘制交互式决策树
  19. 如何快捷得去除代码中的行号?
  20. CCNP知识点总结——OSPF

热门文章

  1. 2019年数学建模国赛(国一)经历总结
  2. 蓝桥杯魔方旋转问题(python)
  3. 有限元方法求解二维矩形区域椭圆方程
  4. onedrive登陆以后是白板,我下载了onedrive以后,安装到登陆界面,输入账号,提示:我们的系统中没有 - Microsoft Community...
  5. 计算机交换机配置实验心得,网络配置实验心得
  6. wordpress文章自动同步天涯博客插件wp2Tianya发布
  7. 买礼物(线段树+set维护)
  8. 解决cv2.error: OpenCV(4.5.1) /tmp/pip-req-build-n_alixql/opencv/modules/highgui/问题
  9. 课本剧剧本和计算机专业相关,【课本剧】 高中课本剧剧本大全
  10. Python+Vue计算机毕业设计报刊征订管理系统uu609(源码+程序+LW+部署)