Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理
一、概述
在进行了 rap 的基本学习之后,您对 rap 的理解是否进入了更高的一个层次呢,个人觉得,对学习 rap 的人来说,进行 rap 的学习是一个探索的过程,在编程中不断的对其进行理解和分析,下面就 rap 在实际应用中用到的一些知识做一总结,好了,别不多说,下面进入正题, rap 图片、数据缓存的处理。
二、缓存处理的原因
可能你要问为什么要将这个图片、数据的缓存问题提到书面上来呢,作为一个编程人员来将,做缓存的处理不是每个程序员都应该知道的事情吗?但是,我要说正是这个大家觉得习以为常的东西就更要提到书面中来,做一警惕。
三、缓存图片的处理
1 、问题的发生
在我们开发的项目中,发现了这样一个现象,运行 rap 的项目,速度非常的慢,在我们工程的界面上左侧是一棵用 treeViewer 构建的树,树的数据量也不是很大,每个树节点上有图片的信息,打开这棵树的过程就需要 6 到 7 秒的时间。最后发现是每一个树上的节点的创建过程都重新加载了图片引起的。当把图片放入到了缓存中速度明显就提升上来了。具体的看看代码中是怎么的实现吧。
2 、图片缓存的处理
1) 、图片缓存类 ImageUtil ,处理图片从缓存中获取,如果缓存中没有该图片的信息,那么通过图片的路径将图片加载到缓存中来,在从缓存中获取图片的信息,这样就不用每次都加载图片,加载一次可复用多次。
- import java.net.MalformedURLException;
- import java.net.URL;
- import org.apache.log4j.Logger;
- import org.eclipse.jface.resource.ImageDescriptor;
- import org.eclipse.jface.resource.ImageRegistry;
- import org.eclipse.swt.graphics.Image;
- /**
- *
- * 图片工具类
- *
- */
- public class ImageUtil {
- private static Logger log = Logger.getLogger(ImageUtil.class);
- private static ImageRegistry registry = new ImageRegistry();
- /**
- * 获取图片
- *
- * @param fileName
- * 图片的名称
- * @return 先从缓存对象中查找,若有直接返回,若没有,则将图片加载到缓存中,在从缓存中将图片传给调用着
- */
- public static Image getImage(String fileName) {
- Image image = registry.get(fileName);
- if (image == null) {
- URL folderURL = null;
- try {
- folderURL = new URL("file:" + PathUtil.getIconPath(fileName));
- image = ImageDescriptor.createFromURL(folderURL).createImage();
- registry.put(fileName, ImageDescriptor.createFromURL(folderURL));
- }
- catch (MalformedURLException e) {
- log.error("getImage error:", e);
- }
- }
- return image;
- }
- }
2) 、处理图片路径的类 PathUtil ,该类处理加载的图片的路径,根据一个图片的名称,寻找图片的路径。
- import org.apache.log4j.Logger;
- import org.eclipse.core.runtime.FileLocator;
- import org.eclipse.core.runtime.Platform;
- import telecomui.application.Activator;
- /**
- * 路径工具类
- *
- *
- */
- public class PathUtil
- {
- private static Logger log = Logger.getLogger(PathUtil.class);
- /**
- * 获得平台相对绝对路径
- *
- * @param pluginID
- * @return
- */
- public static String getRoot() {
- String path = null;
- try {
- path = FileLocator.toFileURL(Platform.getBundle(Activator.PLUGIN_ID).getEntry(""))
- .getPath();
- path = path.substring(path.indexOf("/") + 1, path.length());
- }
- catch (Exception e) {
- log.error("getRoot method :", e);
- }
- return path;
- }
- /**
- * 获得icon目录下的文件路径
- *
- * @param fileName
- * @return 绝对路径
- */
- public static String getIconPath(String fileName) {
- String rootPath = getRoot();
- return rootPath
- + "icons/" + fileName;
- }
- }
3 、用法
在用到图片的地方,调用工具类 ImageUtil 中的 getImage(fileName) 就可以了,其中参数 fileName 是图片的名称。此外需要注意下,所有图片是放到 icons 目录下的。具体的实现类在这就不列出代码了。
四、数据缓存的处理
数据缓存的原理很简单,就是将要加载的数据先存到一个位置,用的时候直接从这个位置中取出就可以了,不用每次用的时候都要创建连接数据库的信息并从数据库中读数据,若想要更新的数据,就要出现个刷新按钮了,刷新一下,从数据库中读出新数据更新缓存,用的时候还是从缓存中取数据信息。
下面说说我们项目中用到的数据缓存的实现原理。
因为我们项目中用到的数据基本上是组装树结构的数据,所以将数据以 list 的形式存放的。具体思路是:从数据库中查询出来的数据存放到 list 中,当项目中调用数据库数据的时候就是从这个 list 中取得,当刷新数据的时候在更新对应的 list 中的数据就可以了。
代码的实现也是很简单,这里就不粘代码了,简单介绍下实现方案。定义一个缓存 list 存放数据,提供一个方法 a 将数据存放到这个 list 中来,并对外提供一个获得这个 list 的接口方法 b ,外界来调用这个接口方法 b 获得数据,当要刷新数据的时候就直接调用 a 方法。
转载于:https://www.cnblogs.com/dengyungao/p/7503661.html
Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理相关推荐
- 喜马拉雅第三方客户端开发(接口和接口数据解析)。
前言:最近闲来无事,看了网上豆瓣的第三方客户端,手有点痒,决定自己动手开发一个客户端,比较了荔枝和喜马拉雅,决定开发喜马拉雅的第三方客户端. 客户端使用了WPF开发. 1.抓取接口: 首先得解决接口数 ...
- 用 Webpack 和 ES6 转换快速开发 Rails 的富客户端
2019独角兽企业重金招聘Python工程师标准>>> Fast Rich Client Rails Development With Webpack and the ES6 Tra ...
- 富途实习面试(客户端开发)
富途是近期实习面试中,面试体验最好的了!而且也顺利拿到了offer,IOS客户端开发.但是由于疫情原因,无法实习,已拒. 一共三面: 技术一面: (面试官主要用C++面试,但是底层原理相差不大) 主要 ...
- 使用JacpFX和JavaFX2构建富客户端
创建快速且可扩展的桌面客户端始终是一个挑战,特别是在处理大量数据和长时间运行的任务时. 尽管Eclipse RCP和Netbeans RCP是已建立的平台,但其想法是建立一个轻量级的框架来异步处理组件 ...
- 什么是RIA?介绍几种RIA客户端开发技术
什么是RIA? RIA(Rich Interface Applications)富界面应用,俗称胖客户端或者富客户端. RIA的优势 RIA 具有的桌面应用程序的特点包括:在消息确认和格式编排方面提供 ...
- 高性能网页开发的14条军规
高性能网页开发的14条军规 作者:Yahoo! 来源:西风坊 酷勤网收集 2008-05-13 摘要 酷勤网 1. 尽可能的减少 HTTP 的请求数 2. 使用 CDN(Content Deliver ...
- C# 海康DVR客户端开发系列(2)—— 封装API
前言 从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释.由于工作忙也只能一天抽出那么半个小时一个小时来整理, ...
- Apache Spark学习:利用Eclipse构建Spark集成开发环境
介绍了如何使用Maven编译生成可直接运行在Hadoop 2.2.0上的Spark jar包,而本文则在此基础上, 介绍如何利用Eclipse构建Spark集成开发环境 . 不建议大家使用eclips ...
- 行代码入门python_新浪微博Android客户端开发视频教程(36讲)
教程名称:新浪微博Android客户端开发视频教程(36讲) 课程目录: [IT教程网]新浪微博Android客户端介绍 [IT教程网]新浪微博Android客户端相关资料 [IT教程网]新浪微博An ...
最新文章
- 超越PVT、Swin,南大开源高效Transformer:ResT​
- 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...
- 计算机专业人大学排名,计算机专业学校排名哪些大学计算机专业比较好
- SpringBoot底层注解-@ImportResource导入Spring配置文件
- jquery插件 --- 图表 表格
- mydate97设置时间
- matlab水蒸气焓值计算_暖通干货,巧析焓湿图,焓湿图如何应用?一读就懂不容错过...
- Cocos Shader 图片去色变成灰色
- CSS+HTML如何写一个类似于淘宝的简单导航栏?
- 善于做“加减法”的百分点科技 成就数据智能的先行者
- ios备忘录下载安卓版_如何下载和平精英国际服?
- 用深度强化学习玩FlappyBird
- Unity插入视频音频
- Eclipse如何从官网获取历史版本
- 简易时间计时器的实现
- 【通信原理| OFDM技术的最简讲解(上)】窄带、宽带与频分复用、多载波调制的讲解
- 企业微信支付功能怎么开通?
- CAD梦想画图中的的“绘图工具——绘线命令”
- SQL 注入攻击:简介与原理
- 2017江苏高职计算机分数线,2017—2019江苏高考招生投档分数线(体育高职专科院校).docx...
热门文章
- oracle中的Number的长度定义
- java resultset转json_ResultSet到JSON的最有效转换?
- 祁飞机器人_转自祈飞:什么是智能机器人
- python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
- 同一个浏览器打开不同端口的程序登录_【BI报表制作】单点登录与个性化开发...
- mysql 5.7.13 安装配置方法图文教程(linux)
- 普通用户的sudo权限,禁止root用户登录
- C++ 二进制文件写操作
- 数据结构之malloc()函数动态内存分配复习
- ElasticSearch 聚合查询