浅谈Web前端针对图片显示的优化方案

电脑杂谈  发布时间:2019-05-02 07:12:24  来源:网络整理

前端项目优化方案_前端网页优化_是spa项目 前端

我在Medium浏览帖子的时候发现他们的图片加载效果真的很赞诶。首先载入一个低像素的模糊图片,然后逐渐转变为高清大图。这个过程体验真的很好,所以我希望能够明白他们是使用什么方法做到的。

2016426101338376.png (476×608)

Medium的技术

我使用WebPageTest测试这个页面的载入过程。如果你希望能够测试同样效果,可以打开Medium的页面,禁用cache减慢图片申请加载的过程,所以加载出原图的时间会稍久。这样就可以清楚看到整个图片的加载效果。

具体执行过程

使用div限定好图片展示的区域,Medium使用<div>标签并加入padding-bottom样式设定对应图片的展示尺寸。通过这样占位的方式可以防止在图片加载后出现整体页面回流的情况。这种方法通常被称为intrinsic placeholders

加载小尺寸(像素低)的图片,此时网页会先请求一个像素质量较低的小号缩略图(大小为原图的20%).这个小图片使用<img />标签,因此浏览器会在标签加载完成后,立即请求图片资源。

只要图片加载完成,它就会被“画”到<canvas />中。图片数据会被main-base.bundle.js文件中自定义的Blur()函数重新计算,可以看到它会产生模糊图片的效果。尽管有些不同,不过该函数与StackBlur的模糊函数实现效果是相似的。在模糊图片生成的同时,浏览器也会开始请求高清原图资源。

前端网页优化_前端项目优化方案_是spa项目 前端

最后原图被加载到页面上,canvas会被隐藏,只展示原图。

最后的最后,感谢CSS的功能,上述所有转变过程会很流畅。

Markup

整个展示图片的结构

PS:实际图片大小要根据设备尺寸来设定。

尝试重新实现同样效果

我在CodePen重新通过使用CSS替代canvas实现同样的加载效果。下面的图片展示了整个加载过程中,图片的转变效果。

2016426101453665.png (593×82)

是spa项目 前端_前端项目优化方案_前端网页优化

这么做是否值?

很明显,现在有许多种方法来实现同样的效果。要知道在几年前如此高性能的方式实现和模糊效果还是不可能的。但事实上,大多数时候延迟瓶颈,并不是设备本身的原因,因此这些技巧值得我们探索。 控制加载图片过程有以下优点:

懒加载:使用JS来请求资源让我们可以灵活控制图片资源选择。小图可以请求同一缩略图,大图则可以根据浏览器视窗大小来选择加载尺寸不同的图片。

更好的占位符: 相比于纯色占位符,使用缩略图添加模糊效果后会有更好的视觉效果,同时图片大小也只有2k左右不会牺牲负载。

裁剪图片大小:Medium根据访问设备的不同,返回不同尺寸的图片,这样可以很好的优化页面的加载速度,同时避免移动设备浪费过多流量。

其他版本

在实现Medium原方法之前,我觉得我可以在我的网站使用其他方法来实现。

内联图片数据

是spa项目 前端_前端网页优化_前端项目优化方案

缩略图的支持:为了减少在同一个view组件里同时加载多张图片的时间,可以调用glide.with(context).load(“图片路径“).thumbnail(“缩略比例“).into(“view组件“)方法加载一个缩略图,还可以控制thumbnail()中的参数的大小,以控制显示不同比例大小的缩略图。关于图片精灵(sprite)技术就和我们工作直接相关,不管是在css中的图片还是在html结构中的图片都会产生http请求,前端优化的第一条就是减少请求数,最直接有效的方法是使用图片精灵(css sprite)。有时页面中的html或css会向服务器请求一个不存在的资源,比如图片或html文件,这会造成浏览器与服务器之间过多的往返请求,类似于:。

模糊效果

第三步,如果默认浏览器防护已开启,但锁定的默认浏览器不是百度,您可以直接关闭默认浏览器防护或将百度锁定为默认浏览器。说明:jquery模拟iphone手机放大效果特效代码,iphone放大镜.这只是仿的,不过效果挺逼真的,与以往的图片放大大同小异,在固定区域内放大图像,有兴趣的一看.。 a参数编码复杂 b参数多 c数据量小 d数据量大 对图像放大或缩小图像内容不会出现模糊现象 容易对画面上的对象进行移动、缩放、旋转和扭曲等变换 适合表现含有大量细节的画面 一般来说位图文件比矢量图文件要小 位图图像比较适合于表现含有大量细节的画面 并可直接、 快速地显示在二维制作软件 flash 以矢量图形作为其的基础 矢量图放大后不会出现马赛克现象 基于图像处理的软件 photoshop 功能强大可以用于处理矢量图形 6 63. 有关 windows 下标准格式 avi 文件的叙述正确的是_____。

[…]the browser would render it in a way that didn’t make it look blocky[…] from Google Developers.

当然这是一个非标准属性,以后可能会更改,目前在 chrome、safari 是有效的,firefox 上不生效。 livereload浏览器扩展程序可以从 免费获取chrome,firefox和safari的插件。尽管safari和ie9可以支持h.264 格式的视频,firefox 和opera却仍然坚持theora 和vorbis格式。

下面我们看看如何做到光滑效果。图片只有27px宽,并且像素非常低,将它放大会产生很可怕的效果。事实却并没有。如果上述效果能满足你的要求,那你就不需要更复杂的效果替换了。

上述图片模糊效果也可以使用CSS Filter Effects实现,它还支持IE浏览器哦(IE一生黑)。我相信Medium在使用canvas方法之前一定也尝试过使用这个功能更强的方法。但是可能是出于一定原因他们放弃了这一方法。前端项目优化方案这一方法的优点是你可以设定模糊度,并且可以通过CSS达成其他目的。

也可以使用SVG的filter来达成同样目的,如The “Blur Up” Technique for Loading Background Images 和 Textured Gradients in Pure CSS两篇文章提到的。

前端项目优化方案_前端网页优化_是spa项目 前端

其他办法提升占位符:Google 图片搜索

2016426101703990.jpg (765×566)

氢os和smartisan os一样都没有采用传统的图片作为桌面壁纸,后者以纯色或不同材质的纹理作为桌面背景,最新改进为允许采用图片作为背景但是会加入毛玻璃特效,而氢os则根据“氢视窗”壁纸提炼出五种主色调可供用户选择,用作桌面底色,而主屏外的桌面也可使用图片模糊效果来作为桌面背景。妮子对图片的要求向来是在精而不在多,过多的图片会增加页面的体积,影响网页的加载速度,直接会影响到用户体验。所以,seo站站们一定要控制好网站内图片的数量,不易放入过多,过多的话会增加页面的体积,影响网页的加载速度及用户体验,相信很多的企业都知道用户体验对于企业的重要性。

更先进的方法:Facebook的200 byte技术

年初Facebook发表过一篇"The technology behind preview photos"的文章,这篇文章主要说明如何预览一个没有JPEG头的42 * 42px的图片。 使用场景有些不同,这“图片”被用于Facebook的手机端,它知道如何组成一个有效的JPEG图片。此处我们在Web端使用的话需要编写JavaScript代码,这样做同样会增加存储资源。当然我们可以通过在服务器端组成这个图片解决这一问题,但是这样仍需要一些JavaScript代码发送申请图片资源的请求。

无论如何,这个方法对于Web端来说有点大材小用,但我还是希望能够将其作为一个参考。Using WebP for generating this preview images同样可以节省内存,并且不需要使用如此创造性的解决方法。

LQIP: Low Quality Image Placeholders

它定义了图像必须显示为块级元素,高度将与图像高度相同,图像的最大宽度是 100%,来限制图像根据它所在的设备来呈现。就是细节的问题,绘画大图然后压缩成小3倍的成品图的话,图像会显得更加细腻。采用尺寸较大的线性结构元对图像进行先腐蚀处理后膨胀处理可以将车道线及与其相似的特征从图像上去除,而将其它信息加以凸显。

总结

然而这种技巧有一个非常不好的体验问题,那就是随着页面加载的进行,图片占据的高度会有一个从0到计算高度的图片变化,视觉上会有明显的元素跳动,代码层面会有布局重计算。如何在加载页面的时候显示进度(相似于ajax的一个加载的图片+加载中......(动态)居中显示),页面加载完成,此内容消失,要求js实现。它通过各式各样的标记对页面上的文字、图片、表格、声音等元素进行描述(例如字体、颜色、大小),而浏览器则对这些标记进行解释并生成页面,于是就得到你现在所看到的画面。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-95632-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...