淘宝首页优化之iconfont的蜕化操作

很多国外的网站,访问的时候可以看到,页面先是大面积白一下,然后恢复正常。原因是网页上用到了 webfont,这些页面很多情况都是直接引用 google 的 webfont 地址,中华大局域网下,由于网络原因,页面虽已经全部加载,引用的 webfont 资源却还未下载成功,这就导致了使用了 webfont 的内容呈现空白状态,没有被渲染出来。

如,访问该网站:http://zurb.com/playground/foundation-icon-fonts-3

为啥国内很少有这种事儿发生?英文字符并不多,生成 webfont 所占用的 unicode range 很小,故英文字体的 webfont 体积是很小的。而中文字符却有好几千个,一个完整中文的 webfont 至少有 2-3M,没人会在自己的网站上使用如此庞大的 webfont 的字体。

但 webicon 就不一样了,根据页面的需要,只摘取几个 unicode 段位,体积自然也是很小了。为了不影响正常字符的展示,webicon 的制作一般会选用空白的 unicode 段位,这些 unicode 在浏览器下默认展示为 “”,一个乱码的符号。那么同样的问题就出现了,由于 CDN 的服务不太稳定或者用户网络原因,页面打开之后,部分 webicon 的资源还未加载成功,那么那些使用到 webicon 的位置便会出现乱码,如果图标较大,体验是十分不好的。

? iconfont 制作的基本原理

Unicode 码表是一个很大的表格,每个表格都对应一个 Unicode 字符,每个字符都有一个 Unicode 码值对应,如 “李” 对应 “\u674e”, “靖” 对应 “\u9756”。因为码表很大,有部分表格并没有对应的字符,但是它有自己的码值。iconfont 的制作,首先将绘制的图形(可以是一张图片、也可以是一个 svg 描述)通过工具或者程序生成文字icon,然后将文字icon对应到码表之中,为了不干预码表中已有的字符,我们通常会把文字icon对应到没有字符的表格中,最后导出我们额外对应的表格信息,生成iconfont。如下图所示:

                              Unicode 码表
                           +-----------------+
           ...             |     |     |     |
                           |     |     |     |
   图形icon     文字icon    +-----------------+
  +-------+    +------+    |     |     |     |
  |icon a +---->   A  +-----------> Ua |     |
  +-------+    +------+    |     |     |     |
                           +-----------------+
  +-------+    +------+    |     |     |     |
  |icon b +---->   B  +-----> Ub +     |     +------> iconfont
  +-------+    +------+    |     |     |     |
                           +-----------------+
  +-------+    +------+    |     |     |     |
  |icon C +---->   C  +-----> Uc |     |     |
  +-------+    +------+    |     |     |     |
                           +-----------------+
           ...             |     |     |     |
                           |     |     |     |
                           +-----------------+

图中,三个icon分别对应到 Unicode 码表中码值为 Ua Ub Uc 的三个表格,那么最后导出的 iconfont 也就只包含这三个字符信息,这个体积是很小的。

延伸阅读:再探@font-face及webIcon制作

? iconfont 的蜕化处理

正常的情况下是一堆漂亮的 icon 图标,而当网络较慢或者 CDN 不稳定的时候,用户看到的是图示乱码的框框,优化之后,用户可以看到我们对 iconfont 的蜕化操作。效果预览:

# 绑定 hosts
2.2.2.2 at.alicdn.com
# 然后访问淘宝首页,可以看到效果

了解了iconfont 的制作之后,理解上图就不难了。中间乱码的那张图里,每个图标对应的都是无字符的码表表格,页面默认的字体呈现这些字符的状态就是 “”。这里我们提到的蜕化处理,只需要在对应 Unicode 码表时,将每个图标对应到有字符的码表表格中,就会看到最上层那张图片的效果。

有人会问,那些蜕化的图标是从哪里来的?对应的键值又是多少?

除了 emoji 外,我们输入法能够输出的所有文字在 web 上也都是能够正常显示的,所谓的正常显示就是不会出现 “”。平时常用的搜狗输入法/百度输入法都提供了很多的特殊字符,我们可以在这些特殊字符中找到最能表现icon的字符,当然,甚至可以使用文字、字母来替代。

比如音乐icon可以使用 “?” 替代,计算字符码值的方式是:

var code = "?".charCodeAt(0).toString(16);
// htmlEncodedStr 便可以作为icon的内容
var htmlEncodedStr = "&#x" + code + ";";

以国内目前做的最好的 iconfont 网站为例,演示如何便捷的修改文字icon对应的默认码值:

修改完之后保存,此时这个 icon 对应的码值就已经变化了。

? 小结

很多网站都承载着日均几百上千万的流量,用户的网络环境复杂,每个细节问题都会在部分用户面前暴露无遗,我们要做的就是去优化那些概率性看到的"小问题",这些"小问题"在庞大的用户群体中会变成一个很大的问题,必须引起重视。

时间: 2024-10-12 21:06:42

淘宝首页优化之iconfont的蜕化操作的相关文章

淘宝首页性能优化实践

想必很多人都已经看到了新版的淘宝首页,它与以往不太一样,这一版页面中四处弥散着个性化的味道,由于独特的个性化需求,前端也面临各方面的技术挑战: 数据来源多 串行请求渲染一个模块 运营数据和个性化数据匹配和管理 数据兜底容灾 本次淘宝首页改版,虽已不再支持 IE6 和 IE7 等低版本的古董浏览器,但依然存在多个影响首页性能的因素: 依赖系统过多,数据的请求分为三块,其一是静态资源(如 js/css/image/iconfont 等):其二是推到 CDN 的静态数据(如运营填写的数据.前端配置信息

《淘宝首页性能优化实践》文章阅读

想必很多人都已经看到了新版的淘宝首页,它与以往不太一样,这一版页面中四处弥散着个性化的味道,由于独特的个性化需求,前端也面临各方面的技术挑战: 数据来源多 串行请求渲染一个模块 运营数据和个性化数据匹配和管理 数据兜底容灾 本次淘宝首页改版,虽已不再支持 IE6 和 IE7 等低版本的古董浏览器,但依然存在多个影响首页性能的因素: 依赖系统过多,数据的请求分为三块,其一是静态资源(如 js/css/image/iconfont 等):其二是推到 CDN 的静态数据(如运营填写的数据.前端配置信息

聊一聊淘宝首页和它背后的一套

聊一聊淘宝首页和它背后的一套 作者: 小胡子哥 2016-06-02 12:00:00本文发布时间为2016年06月02日12时00分00秒 分类: 前端杂烩 标签: 淘宝首页 下面是正文内容评论数: 12条评论 从 14 年双十二结束开始接手淘宝首页,到如今差不多 1 年半时间,不久前完成了首页相关工作的交接.期间经历了两次改版和一次从 PHP 到 Node 的迁移,还是颇有感受,下面给大家分享下.我要说话 文章好像有点长,列个大纲会比较好:我要说话 一.相关背景介绍二.淘宝首页的整理变迁

从PHP到Node,聊一聊淘宝首页背后的技术

从 2014 年双十二结束开始接手淘宝首页,到如今差不多 1 年半时间了,不久前完成了首页相关工作的交接.经历了两次改版和一次从 PHP 到 Node 的迁移,还是颇有感受,下面给大家分享下. 一.相关背景介绍 淘宝首页是淘宝的门面,承载着几乎淘系所有业务的入口,流量很大,量级单位为亿.近几年无线端崛起,业务重点开始向无线终端偏移(目前不能叫偏移,基本以无线为主了),所以淘宝 PC 端首页的流量也有削减,不过即便如此,它的日均 PV 依然相当高. 淘宝首页一向是内部平台和技术的试验田,它一直在变

一起来看看淘宝首页的个性化

随着互联网技术以及软硬件技术的快速发展,网络已经成为人们生活中不可或缺的一部分,在长期的互联网冲浪中,网民对网络信息的辨识度日益增进,网络信息提供方也必须与时俱进,抓住用户的要害. 就拿我们淘宝的业务来看,几年前看到最多的是以商品为维度分类.分层:而现在,一切以人为中心,围绕用户做产品,帮助用户挖掘消费区间,帮助用户找到自己感兴趣的东西.淘宝首页就被拿出来开了一刀,作为淘宝的门户,它承载了万千入口,如何让用户直达兴趣之地?那自然少不了千人千面地展现内容.今年淘宝首页的改版,无处不散发个性化的味道

一天造出10亿个淘宝首页,阿里工程师如何实现?

阿里妹导读:双十一手淘首页个性化场景是推荐生态链路中最大的场景之一,在手淘APP承载了整体页面的流量第一入口,对用户流量的整体承接.分发.调控,以及用户兴趣的深度探索与发现上起着至关重要的作用. 原文:http://mp.weixin.qq.com/s/vpxLTcwenvlIvj5D-8uolg 双11手淘首页的几个重要推荐场景截图如下: 如上图所示,左一场景为AIO综合会场,包括AIO日常场景(淘抢购.有好货.清单等).双11人群会场及行业会场:中间为AIOplus场景卡片综合会场,包括5张

6.4 DIV布局制作淘宝首页

为了加深对DIV层布局的理解,下面就来体验一把什么是DIV层布局. 使用Dreamweaver来绘制如图1所示的层布局页面,具体操作岁骤如下: 图1 DIV层布局页面 (1) 打开Dreamweaver,新建一个空白文档. (2) 在插入栏的“布局”类别中单击“绘制层”按钮. (3) 在“文档”窗口的“设计”视图中,执行下列操作之一: ●  按下鼠标左键拖动以绘制一个层. ●  通过按住Ctrl键并按下鼠标左键进行拖动来连续绘制多个层(只要不松开Ctrl键,就可以继续绘制新的层). (4) 绘制

js实现淘宝首页图片轮播效果

原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>淘宝首页图片轮播效果</title> <style> <!-- * {margin: 0;padding:0;} body

Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片

Android中仿淘宝首页顶部滚动自定义HorizontalScrollView定时水平自动切换图片 自定义ADPager 自定义水平滚动的ScrollView效仿ViewPager 当遇到要在ViewPager中添加多张网络请求图片的情况下,不能进行复用,导致每次都要重新去求情已经请求过的数据致使流量数据过大 自定义的数据结构解决了这个问题,固定传递的图片数据之后进行统一请求,完成后进行页面切换数据复用 代码中涉及网络请求是用的Volley网络请求框架 PicCarousel是网络数据请求的U