巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验

简介: 巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验

这篇文章介绍一种使用代理设计模式(Proxy Design Pattern)的方法来改善您的前端应用里图片加载的体验。


假设我们的应用里需要显示一张尺寸很大的图片,位于远端服务器。我们用一些前端框架的Image这个控件类去显示图片。如果直接调用控件类的代码


image.setSrc(“http://www.bigfile.gif”), 那么在这张具体的图片真正加载到本地之前,UI上显示一片空白,这个用户体验不好。


我们日常生活中其实已经能感觉到,很多优秀的前端应用,在加载大尺寸图片或者执行其他费时的后台操作时,前台都会有一些动画效果。


今天我们就来动手做一个类似的效果出来。


有一个按钮。点了之后,会触发一张大尺寸图片的加载。image.png在这张图片的加载过程中,一直显示一张本地的gif图片作为加载动画:image.png加载完毕后,动画消失,实际图片才显示出来(4.1MB大)image.png项目完整代码在我github上:


https://github.com/i042416/FioriODataTestTool2014/tree/master/WebContent/buttontutorial/view


看一些关键步骤。


1. Image控件定义在XML视图里,ID为jerryImage。我用的SAP UI5前端框架。大家只要领会了思路,可以容易地迁移到其他任何前端框架去。


id为jerryButton的button控件,点击事件处理函数onPress:image.png. 再看控制器的代码:onPress执行loadImageWithProxy。image.pngoadImageWithProxy调用injectProxy,传入的输入参数image就是XML视图里定义的Image控件。image.png在injectProxy里,代码第30行创建了一个隐藏的Image代理对象,然后在第36行用真实的Image控件去显示本地的gif文件,以在UI上显示出动画效果,然后第37行用隐藏的Image代理对象去悄悄地加载大尺寸文件,这件事情终端用户并不知情。等到这个大尺寸图片加载完毕后,Image代理对象的onload回调函数会被浏览器触发,此时再让真实的Image控件把加载好的大尺寸文件显示出来。 效果就实现了。



相关文章
|
5月前
|
设计模式 缓存
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
|
3月前
|
前端开发 搜索推荐 UED
单页面应用(SPA)与多页面应用(MPA)的区别及优缺点
单页面应用(SPA)与多页面应用(MPA)的区别及优缺点
40 1
|
JSON 缓存 JavaScript
webpack拓展篇(六十九):vite 的构建原理(完结)
webpack拓展篇(六十九):vite 的构建原理(完结)
137 0
webpack拓展篇(六十九):vite 的构建原理(完结)
|
设计模式 中间件 PHP
外观设计模式-Laravel Request实践:优雅的设置全局变量
model层封装消费逻辑,需要区分是Android端的请求还是iOS端的请求,分别扣除不同账户的金币 要精简代码逻辑,不想需要调用的地方都一层一层的传值到消费model,这样太繁琐了。
166 0
|
缓存 前端开发 JavaScript
挑战21天手写前端框架 day9 50行代码实现页面状态保持 keepalive
挑战21天手写前端框架 day9 50行代码实现页面状态保持 keepalive
364 0
挑战21天手写前端框架 day9 50行代码实现页面状态保持 keepalive
|
Java Android开发
Android Studio live template巧用动态模板也能大大提高你的开发效率
Android Studio live template巧用动态模板也能大大提高你的开发效率
132 0
Android Studio live template巧用动态模板也能大大提高你的开发效率
URL URI傻傻分不清楚,dart告诉你该怎么用
URL URI傻傻分不清楚,dart告诉你该怎么用
|
设计模式 XML 前端开发
巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验
巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验
145 0
巧用代理设计模式(Proxy Design Pattern)改善前端图片加载体验
|
Java Android开发
Android插件化开发基础之Java动态代理(proxy)机制的简单例子
Android插件化开发基础之Java动态代理(proxy)机制的简单例子
230 0