近,我正在浏览Medium上的帖子,我发现了一个很好的图像加载效果。首先,加载一个小的模糊图像,然后转换为大图像。我发现它非常整洁,想要剖析它是如何完成的。
先来一个Demo,看下图片是怎么进行加载的:
https://jmperezperez.com/assets/images/posts/medium-progressive-loading.mp4
我在Medium上对此页面执行了WebPageTest测试,你可以在其中查看它的加载方式.
如果你想亲眼看到它,在你的浏览器中打开Medium的帖子(需要梯子),禁用缓存并限制响应,这样需要更长的时间来获取图像,你可以看到效果。
究竟发生了什么:
先来整体的看一下页面布局结构
<figure>
<div>
<div/> <!-- 图片占位 防止高度塌陷-->
<img/> <!-- 缩略图-->
<canvas/> <!-- 用户绘制设置模糊效果 -->
<img/> <!--大图-->
<noscript/> <!-- fallback for no JS -->
</div>
<figure>
这有一个具体的示例代码,你可以参考下对应的内容
请注意,请求的实际图像大小取决于设备
尝试重现效果
我在CodePen上实现了相同的效果,但是使用CS3过滤器来实现模糊的效果,而不是画布。
你可以在全屏幕上看到它。我建议你打开浏览器中的网络限制并禁用缓存以便完整的看到对应的动画效果。
如下所示:(3g网络环境)
值得这样做么?
很明显,有很多事情可以通过类的方式去加载图像,几年前,以高效的方式完成动画和模糊效果几乎是不可能的,但事实是,多数时延迟才是瓶颈,而不是设备的兼容性,然而我们可以利用这些视觉效果去提升用户体验。
这样控制图片的加载逻辑有哪些优点:
使用Data-url 方式
就是base64 因为缩略图很少 没必要从外部请求,可以直接将缩略图转成base64存放的html中,但这样会增大html文件的大小,但是可以快速的渲染。原作者经过测试,效果和外部请求类同,相差不大。
模糊效果
默认情况下,浏览器将图片放大的在展示的时候会稍微用点模糊效果在图片上,这样的效果也可以取消掉。从而避免让大家觉得如此“粗犷”的完成渲染。参见Google Developers。
当然这种效果可以在Chrome,Firefox,Safari中工作(IE未测试),不过Chrome的效果会更好点。
记住这样的图片只有27像素,并且质量非常低,这样反而可以带来一种极好的效果。但是,如果上面的效果对你而言还不够完美的话,我们可以考虑更为复杂的方案。
我们可以通过使用CSS 滤镜.而且现在有很多浏览器都系支持该特性.我相信Medium的工程师在考虑用canvas之前,一定想到过这样的方式,可能是她们觉得这种方式不值得鼓励,从而放弃使用Css了。
这种方式的主要优点就是你可以通过Css去控制你需要模糊的程度,而且相对容易实现。
还有一种方式是,你可以尝试SVG的模糊效果,详见The “Blur Up” Technique for Loading Background Images和Textured Gradients in Pure CSS.
谷歌是如何使用图片预加载的
当我们搜索图片的时候,我们会看到下面这种情况:
谷歌在进行图片加载的时候会预先将背景渲染出一种固定的颜色,随后才显示完成加载的图片。
他们可能使用的是图片中最主要的色彩,然后将其运用在背景上,从而给人一种快速加载的效果。
Facebook的 200 byte方案
早些时候facebook发表过一篇 图片预览背后的技术,里面阐述了它们是如何展示一张42px x 42px 的并且去掉JPEG头的图片。
由于这些图片是用于服务端,它们知道该如何去添加一个明确的压缩头部的JPEG。但是做网站的我们,只能依靠JavaScript去完成这样的工作。我们可以尝试使用Worker 去完成组装,然后在利用JS去发出图片内容的请求。
无论如何,这都看起来像是对于Web扼杀,但我还是建议大家阅读下使用Webp去生成小的的缩略图。
LQIP(压缩图片优先呈现)
不用等到最终的图片完成渲染,我们可以提供一张高度压缩的图片先展示出来,然后在将其替换掉.这大概就是LQIP的主要内容。其实这和Medium的方式大同小异,只不过这个方案要求更高的图片压缩,但是维持和原图的一致的像素。
结论
随着我们的页面加载越来越多的图像,最好考虑下如何优化图片的加载过程,因为它会影响性能和用户体验。如果我生成了许多大小不同的缩略图,那么你可以实现下,当图片加载时,使用小的缩略图做背景。
原文链接:
https://jmperezperez.com/medium-image-progressive-loading-placeholder/
原文作者: José M. Pérez
TML(英文Hyper Text Markup Language的缩写)中文译为“超文本标签语言”,主要是通过HTML标签对网页中的文本、图片、声音等内容进行描述。
1 HTML骨架格式
日常生活的书信,我们要遵循共同的约定。
同理:HTML 有自己的语言语法骨架格式:
<HTML>
<head>
<title></title>
</head>
<body>
</body>
</HTML>
2 html基本标签
作用:所有HTML中标签的一个根节点。
作用:用于存放:title,meta,base,style,script,link
注意:在head标签中我们必须要设置的标签是title
作用:让页面拥有一个属于自己的标题。
作用:页面在的主体部分,用于存放所有的HTML标签:p,h,a,b,u,i,s,em,del,ins,strong,img
3 颜色的表示方式
第一种方式:使用颜色名称: 仅仅有16种颜色名可用英文字母,其余的要用16进制值。
aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow
第二种方式:RGB模式
第三种:十六进制
#000000 #ffffff #325687 #377405
4 文档类型<!DOCTYPE>(重点)
<!DOCTYPE html>这句话就是告诉我们使用哪个html版本, 我们使用的是 html 5 的版本。 html有很多版本,那我们应该告诉用户和浏览器我们使用的版本号。
标签位于文档的最前面,用于向浏览器说明当前文档使用哪种 HTML 或 XHTML 标准规范,必需在开头处使用标签为所有的XHTML文档指定XHTML版本和类型,只有这样浏览器才能按指定的文档类型进行解析。
5 HTML标签的语义化(重点)
所谓标签语义化,就是指标签的含义。
为什么要有语义化标签:方便代码的阅读和维护,同时让浏览器或是网络爬虫可以很好地解析,从而更好分析其中的内容,使用语义化标签会具有更好地搜索引擎优化
核心:合适的地方给一个最为合理的标签。
语义是否良好: 当我们去掉CSS之后,网页结构依然组织有序,并且有良好的可读性,不管是谁都能看懂这块内容是什么。
遵循的原则:先确定语义的HTML ,再选合适的CSS。
6 总结:(重要知识点)
<html></html>
<head></head>
<title></title>
<body></body>
<table></table>
<tr></tr>
<td></td>
<span></span>
<p></p>
<form></form>
<h1></h1>
<h2></h2>
<h3></h3>
<h4></h4>
<h5></h5>
<h6></h6>
<object></object>
<style></style>
<b></b>
<u></u>
<strong></strong>
<i></i>
<div></div>
<a></a>
<script></script>
<center><center>
<br>
<hr>
<img>
<input>
<param>
<meta>
<link>
1.注释标签:<!–注释–>
-------------------------------------
2.换行标签:<br/>
-------------------------------------
3.段落标签:<p>文本文字
特点:段与段之间有行高
属性:align对齐方式
(left:左对齐 center:居中 right:右对齐)
-------------------------------------
4.水平线标签:<hr/>
属性:
width:水平线的长度(两种:第一种:像素表示;第二种,百分比表示)
size: 水平线的粗细 (像素表示,例如:10px)
color: 水平线的颜色
align:水平线的对齐方式(left:左对齐 center:居中 right:右对齐)
-------------------------------------
5.容器标签(重点)
<div>:块级标签,独占一行,换行
<span>:行级标签,所有内容都在同一行作用
<div>:主要是结合css页面分块布局
<span>:进行友好提示信息
为了使网页更具有语义化,我们经常会在页面中用到标题标签,HTML提供了6个等级的标题,随着数字增大文字逐渐变小,字体是加粗的,内置字号,默认占据一行;
<h1>、<h2>、<h3>、<h4>、<h5>和<h6>
容器里面装载着文字或图表的一种形式,叫列表。列表最大的特点就是 整齐 、整洁、 有序
无序列表 ul (重点)
无序列表标签: <ul></ul>
属性:type :三个值,分别为:
circle(空心圆) ,disc(默认,实心圆),square(黑色方块)
列表项:<li></li>
注意:
<ul></ul>中只能嵌套<li></li>,直接在<ul></ul>标签中输入其他标签或者文字的做法是不被允许的。
<li>与</li>之间相当于一个容器,可以容纳所有元素。
无序列表会带有自己样式属性,放下那个样式,一会让CSS来!
有序列表 ol
有序列表标签:<ol>
属性:type:1、A、a、I、i(数字、字母、罗马数字)
列表项: <li></li>
定义列表dl
\dl>
<dt>名词1
<dd>名词1解释1
<dd>名词1解释2
…
<dt>名词2
<dd>名词2解释1
<dd>名词2解释2
…
</dl>
dl>
名词1
名词1解释1
名词1解释2
... 名词2
名词2解释1
名词2解释2
...
独立标签
属性:
src:图片地址: 相对路径 (同一个网站) 绝对路径 (不同网站)
width:宽度height:高度border:边框align:对齐方式,代表图片与相邻的文本的相当位置(有三个属性值:top middle bottom)
alt:图片的文字说明hspace 和 vspace 设定图片边沿上下左右空白,以免文字或其它图片过于贴近
链接标签
超链接可以是文本,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。(不仅可以创建文本超链接,在网页中各种网页元素,如图像、表格、音频、视频等都可以添加超链接)
属性:
href:跳转页面的地址(跳转到外网需要添加协议);
name:名称,锚点(回到锚点: 顶部,底部,中间),在访问锚点的书写格式:#name的值
target:_self(自己) _blank(新页面,之前页面存在) _
__parent top 默认
self_search相等于给页面起一个名字,如果再次打开时,如果页面存在,则不再打开新的页面。可以是任意名字。
如果当时没有确定链接目标时,通常将链接标签的href属性值定义为“#”(即href="#"),表示该链接暂时为一个空链接。
苹果内存想要更大的,「加钱」买。但是近日,一位中国工程师成功破解了M1处理器的MacBook,将8GB内存升级到16G,将256GB固态硬盘升级到1TB。
一直以来苹果电脑不仅价格贵,配置还不OK,特别是内存和硬盘简直抠门到不行!
它们通常都是焊死在主板上,无法进行更换。
2020新款M1处理器Macbook,更是直接采用内存与处理器融合封装的技术,破解难度非常大。
想要高配怎么办?「加钱」!
现在,有人将M1芯片成功破解,即使不通过苹果官方,也可以升级硬件。
近日,一位中国工程师就破解了M1处理器的MacBook,将8GB内存升级到16G,将256GB固态硬盘升级到1TB。
这位来自中国广州一家手机维修培训机构的工程师在他的微信朋友圈表示,「在变革的时代,胜利属于适应变化的人」。
同样是2020款MacBook,差距怎么那么大呢?
扩容不加钱,就是这么简单
根据苹果官方价格,8GB升级16GB,加1500元。
256GB固态硬盘升级512GB,再加1500元。
升级1TB的话,加3000元。
我们都知道,现在市场上的内存和硬盘的价格都已经很亲民了,只需几百块就能解决。
但是在苹果这儿就加了好几倍的价钱。
我们先来了解一下2020款M1芯片的Macbook的基本配置:配有8GB统一内存,256GB固态硬盘。
由于苹果已经将处理器、显卡和内存一起打包在M1芯片中,我们只能在购买 MacBook 之前选择更大容量的内存和SSD。
购买后,是无法升级内存,只能通过外部硬盘驱动器升级内存。
或许你还没有见过长在Mac里M1芯片的真是样子。
如下图中左边是M1芯片,右边是两个内存条,那个原装银色M1芯片只有一半。
实际上,右侧的矩形芯片是集成的存储芯片8GB SK hynix LPDDR4X内存。将其称为UMA统一内存架构。
中国这位工程师将M1芯片内存和硬盘进行更换。可以看到在更换完成硬盘之后,电脑的硬盘容量从256GB升级到1TB,空间翻了4倍。
这位中国工程师能将集成度如此之高的M1芯片破解成功,并将其内存和储存空间进行升级。
看到这个解决方案,你是否也对Macbook系统能够自己扩容这一消息点燃了热情。
不过小编要提醒你哦,扩容有风险,一定要先做好备份。
Mac「换芯」:苹果最强芯片Mac M1
M1芯片具有划时代意义!
这是苹果历史上第四次为电脑更换芯片。
专为移动设备设计的ARM架构,之前在桌面产品中应用稀少,很大一部分原因是因为担心性能不足。
但Mac M1打破了这个局限。
M1芯片采用台积电目前最先进的5nm工艺制造,搭载了8核CPU、8核GPU以及一个16核的神经网络引擎。CPU、GPU、缓存集成在一起,其中包含160亿个晶体管,数量创造了苹果芯片的新高。
M1芯片采用台积电目前最先进的5nm工艺制造,搭载了8核CPU、8核GPU以及一个16核的神经网络引擎。CPU、GPU、缓存集成在一起,其中包含160亿个晶体管,数量创造了苹果芯片的新高。
M1芯片的8核CPU分为4个高性能核心和4个高效能核心。
每个高性能核心都提供出色的单线程任务处理性能,让摄影师可以飞速编辑高分辨率照片,让开发者能以近乎 3 倍于以往的速度构建 app。当四个核心同时运行,多线程处理性能表现将极大提升。
随着英特尔处理器越来越高的功耗,与苹果Mac产品的理念逐渐背道而驰。
作为一款低能耗芯片,M1 拥有迄今最快的中央处理器核心、最快的个人电脑集成显卡,还有着机器学习超强的 Apple 神经网络引擎。
M1 芯片还采用了统一内存架构,将一切都融入同一个高带宽、低延迟的内存池中。所有的 SoC 技术都可以访问同样的数据,无需在多个内存池之间来回拷贝,从而让性能和能效进一步提升。
苹果表示,它提供了世界上最好的CPU每瓦特的性能。它能以四分之一的功耗提供与典型笔记本电脑CPU相同的峰值性能。
集耗能低、运行快、性能高于一身的M1芯片是苹果的巨大的跨越,但是想要在内存上得到升级,我们只能「加钱」购买。
扩容须谨慎,扩容有风险。
参考资料:
https://www.cnbeta.com/articles/tech/1110533.htm
https://www.163.com/dy/article/FS1NEBKQ0511AMS8.html
*请认真填写需求信息,我们会在24小时内与您取得联系。