最近有个项目需求,需要改变小程序所有文字的字体。

查了资料后发现,本地加载字体文件导致小程序太大。动态加载文件,苹果真机完美,但是在安卓的真机上引入的外部字体加载会很慢,会有很明显的默认字体切换到外部字体的过程,体验极差。

最后采用小程序分包的形式完美解决,所以做下总结,希望帮助到有需要的人。

引入外部字体,已知的有两种方式。

1.本地加载。

将外部字体文件(类型为.ttf、.eot等)上传至https://transfonter.org/网站,转化为base64码的形式,然后将转化后的css文件中的64码粘贴至小程序的公共app.css样式文件中引用。

(这里注意:在网站中转换字体为64码的时候,勾选的后缀越多(如ttf、woff),生成的64码大小越大,这里不知道勾选不一样会有什么区别,我想的应该是适用的环境不一样可能就会出现一些区别,有明白的老哥希望不吝赐教。我当时为了极致小,只勾选了woff,生成了1M的64码,安卓和苹果都暂时未出现显示问题。)

引入方式为:

@font-face {

font-family: 'FZBYS';

src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAADTxgABAAAAAW4twAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNA后面一长串省略。。。

(font-family:'FZBYS’中的FZBYS为变量名,可自行设置。)

引用方式为:

(不需要在css文件顶部写@import ‘…/…/…’)

page{

font-family:'FZBYS';

}

优点:1.加载方式为本地加载,加载速度快。进入小程序页面(包括安卓)字体已经被新的字体替换,不会有转变过程。

缺点:1.大部分从网上直接下载下来的源文件都较大,3-8M左右,甚至10多M,被转化的64码代码大小和字体文件差不多,所以大部分情况引入64码后,小程序大小会超过2M,导致无法上传。

解决办法:只需将自己需要改变字体的文字内容从字体源文件中"脱离"出来,减小字体文件大小,因为字体源文件中大部分复杂字和符号我们都用不到。具体方法为使用Node字体压缩插件font-spider,附上一篇font-spider使用的参考链接

https://www.jianshu.com/p/b5f9605951f5

2.动态加载

动态加载分为两种

1.css链接外部字体

在公共css样式文件中写入下面代码,然后在需要引用字体样式的css文件中使用。

引入方式为:

@font-face {

font-family:'FZBYS';

src:url('https://***.com/***/***/FZBYS.TTF') format('truetype');

}

引用方式为:

page{

font-family:'FZBYS';

}

2.js链接外部字体

引入方式为:

wx.loadFontFace({

family: 'FZBYS',

source: 'url("https://***.****.com/font/FZBYS.TTF")',

success: function (e) {

console.log(e, '动态加载字体成功')

},

fail: function (e) {

console.log(e, '动态加载字体失败')

},

})

引用方式为:

page{

font-family:'FZBYS';

}

优点:1.不需要将字体文件转化为64码,比较方便。

缺点:1.动态加载字体文件,苹果真机上完美,但是在安卓的真机上引入的外部字体加载会很慢,会有明显的默认字体切换到外部字体的过程,体验教差,特别是字体文件越大,加载的速度越慢,有些小程序页面甚至无法加载成功。

解决办法:1.将字体文件压缩小一点 2.若不在乎体验,那这个字体切换的过程也就不用在意 3.建议使用本地加载。

最后我的情况的解决办法是将小程序进行分包,如何分包可参考下面这条链接https://blog.csdn.net/weixin_44510465/article/details/89208139

分包的基本要求是将小程序的大小限制从2M扩大到8M,小程序的结构从没有包,变成由一个主包和多个子包构成,子包可以有2个、3个、4个,很多个,只要总体大小不超过8M,并且每个子包大小不超过2M。

本地加载字体文件,将已经转化成64码的字体样式放入app.wxss里后(app.wxss属于主包内,详情参考上面分享的链接),只要主包的大小不超过2M,就算成功了。

对android小程序的结论,微信小程序引入外部字体总结(针对安卓加载缓慢问题)...相关推荐

  1. css3如何链如外部字体,微信小程序引入外部字体总结(针对安卓加载缓慢问题)...

    最近有个项目需求,须要改变小程序全部文字的字体. 查了资料后发现,本地加载字体文件致使小程序太大.动态加载文件,苹果然机完美,可是在安卓的真机上引入的外部字体加载会很慢,会有很明显的默认字体切换到外部 ...

  2. Android 框架学习5:微信热修复框架 Tinker 从使用到 patch 加载、生成、合成原理分析

    这篇文章是基于内部分享的逐字稿内容整理的,现在比较喜欢写逐字稿,方便整理成文章. 文章目录 目录 Tinker 介绍 使用 TinkerApplicaition ``SampleApplicaitio ...

  3. 微信 android兼容性问题怎么解决方案,微信小程序兼容性问题

    本文我们来谈谈微信小程序系统兼容性的那些坑. 微信小程序兼容性问题 微信小程序发布一周多了,兼容性问题,特别是 Android 平台兼容性问题特别严重.据我观察,好多小程序掉到兼容性的坑里.掉坑里不要 ...

  4. 微信小程序开发学习笔记001--认识微信小程序,第一个微信小程序

    第一天,认识微信小程序,第一个微信小程序 1.什么是微信小程序? 是h5网页嘛?不是 微信张小龙说: 小程序是一种不需要下载安装即可使用的应用, 它实现了应用"触手可及"的梦想,用 ...

  5. [转]微信小程序之购物车 —— 微信小程序实战商城系列(5)

    本文转自:http://blog.csdn.net/michael_ouyang/article/details/70755892 续上一篇的文章:微信小程序之商品属性分类  -- 微信小程序实战商城 ...

  6. 微信小程序全选,微信小程序checkbox,微信小程序购物车

    微信小程序,这里实现微信小程序checkbox,有需要此功能的朋友可以参考下. 摘要: 加减商品数量,汇总价格,全选与全不选 设计思路: 一.从网络上传入以下Json数据格式的数组  1.标题titl ...

  7. python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...

    原标题:干货 | 微信小程序自动化测试最佳实践(附 Python 源码) 本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善, ...

  8. 微信小程序之组件 —— 微信小程序教程系列(19)

    什么是组件: 组件是视图层的基本组成单元. 组件自带一些功能与微信风格的样式. 一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内. <tagname property ...

  9. 微信小程序的文件结构 —— 微信小程序教程系列(1)

    文件结构 示例目录:HelloWorld *******************************************************分割线********************* ...

最新文章

  1. c语言程序设计第二版第五章课后答案甘勇,郑州工程技术学院副院长甘勇来校讲学和指导工作...
  2. coverage代码覆盖率测试工具:基本原理分析与使用
  3. mysql选出重复的字段_mysql查询表里的重复数据方法:
  4. Django Admin 录入中文错误解决办法
  5. ThreadLocal管理Connection
  6. RGB_D_开发征程(使用Kinect)
  7. UI代码练习-视图的层次关系
  8. golang如何生成随机数
  9. ArrayList 动态数组 0119
  10. echarts隐藏之后的显示问题
  11. mysql8.0.17压缩包安装教程_mysql 8.0.17 解压版安装配置方法图文教程
  12. android textview显示表情,在Android TextView中显示表情符号/情感图标
  13. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(二)XenServer7.5安装
  14. IT软件开发人员必去的10个社区
  15. StringUtil工具类 之 字符串长度截取函数
  16. mysql好玩的代码_搞一些好玩的东西redis
  17. 学术论文的word排版
  18. 机器视觉的四大类应用
  19. matlab中在xls单元格中填充颜色,!Excel中如何根据某一列的值对整行进行颜色填充?...
  20. 计算机管理 未分配磁盘,磁盘显示未分配怎么办?

热门文章

  1. P1969 [NOIP2013 提高组] 积木大赛(差分+贪心)
  2. Spring Boot+JSP项目中静态资源配置
  3. 网络视频直播平台怎么开发、有什么难点
  4. C# 调用USB摄像头
  5. 白话说CC-信息安全通用标准CC是什么?评估保障级EAL有是什么?如何获得信息安全认证证书
  6. 质量保证(QA)和质量控制(QC)的区别
  7. 基于大数据的精准营销
  8. GeForce GTX 970 硬件特性
  9. 手机通过wifi获取电脑共享的文件----诺基亚远程驱动器篇
  10. meteor构建app程序_在Meteor.js中构建Slack克隆:实时数据