一、概述

在进行了 rap 的基本学习之后,您对 rap 的理解是否进入了更高的一个层次呢,个人觉得,对学习 rap 的人来说,进行 rap 的学习是一个探索的过程,在编程中不断的对其进行理解和分析,下面就 rap 在实际应用中用到的一些知识做一总结,好了,别不多说,下面进入正题, rap 图片、数据缓存的处理。

二、缓存处理的原因

可能你要问为什么要将这个图片、数据的缓存问题提到书面上来呢,作为一个编程人员来将,做缓存的处理不是每个程序员都应该知道的事情吗?但是,我要说正是这个大家觉得习以为常的东西就更要提到书面中来,做一警惕。

三、缓存图片的处理

1 、问题的发生

在我们开发的项目中,发现了这样一个现象,运行 rap 的项目,速度非常的慢,在我们工程的界面上左侧是一棵用 treeViewer 构建的树,树的数据量也不是很大,每个树节点上有图片的信息,打开这棵树的过程就需要 6 到 7 秒的时间。最后发现是每一个树上的节点的创建过程都重新加载了图片引起的。当把图片放入到了缓存中速度明显就提升上来了。具体的看看代码中是怎么的实现吧。

2 、图片缓存的处理

1) 、图片缓存类 ImageUtil ,处理图片从缓存中获取,如果缓存中没有该图片的信息,那么通过图片的路径将图片加载到缓存中来,在从缓存中获取图片的信息,这样就不用每次都加载图片,加载一次可复用多次。

[java] view plaincopy print?
  1. import java.net.MalformedURLException;
  2. import java.net.URL;
  3. import org.apache.log4j.Logger;
  4. import org.eclipse.jface.resource.ImageDescriptor;
  5. import org.eclipse.jface.resource.ImageRegistry;
  6. import org.eclipse.swt.graphics.Image;
  7. /**
  8. *
  9. * 图片工具类
  10. *
  11. */
  12. public class ImageUtil {
  13. private static Logger log = Logger.getLogger(ImageUtil.class);
  14. private static ImageRegistry registry = new ImageRegistry();
  15. /**
  16. * 获取图片
  17. *
  18. * @param fileName
  19. *            图片的名称
  20. * @return 先从缓存对象中查找,若有直接返回,若没有,则将图片加载到缓存中,在从缓存中将图片传给调用着
  21. */
  22. public static Image getImage(String fileName) {
  23. Image image = registry.get(fileName);
  24. if (image == null) {
  25. URL folderURL = null;
  26. try {
  27. folderURL = new URL("file:" + PathUtil.getIconPath(fileName));
  28. image = ImageDescriptor.createFromURL(folderURL).createImage();
  29. registry.put(fileName, ImageDescriptor.createFromURL(folderURL));
  30. }
  31. catch (MalformedURLException e) {
  32. log.error("getImage error:", e);
  33. }
  34. }
  35. return image;
  36. }
  37. }

2) 、处理图片路径的类 PathUtil ,该类处理加载的图片的路径,根据一个图片的名称,寻找图片的路径。

[java] view plaincopy print?
  1. import org.apache.log4j.Logger;
  2. import org.eclipse.core.runtime.FileLocator;
  3. import org.eclipse.core.runtime.Platform;
  4. import telecomui.application.Activator;
  5. /**
  6. * 路径工具类
  7. *
  8. *
  9. */
  10. public class PathUtil
  11. {
  12. private static Logger log = Logger.getLogger(PathUtil.class);
  13. /**
  14. * 获得平台相对绝对路径
  15. *
  16. * @param pluginID
  17. * @return
  18. */
  19. public static String getRoot() {
  20. String path = null;
  21. try {
  22. path = FileLocator.toFileURL(Platform.getBundle(Activator.PLUGIN_ID).getEntry(""))
  23. .getPath();
  24. path = path.substring(path.indexOf("/") + 1, path.length());
  25. }
  26. catch (Exception e) {
  27. log.error("getRoot method :", e);
  28. }
  29. return path;
  30. }
  31. /**
  32. * 获得icon目录下的文件路径
  33. *
  34. * @param fileName
  35. * @return 绝对路径
  36. */
  37. public static String getIconPath(String fileName) {
  38. String rootPath = getRoot();
  39. return rootPath
  40. + "icons/" + fileName;
  41. }
  42. }

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 图片、数据缓存处理相关推荐

  1. 喜马拉雅第三方客户端开发(接口和接口数据解析)。

    前言:最近闲来无事,看了网上豆瓣的第三方客户端,手有点痒,决定自己动手开发一个客户端,比较了荔枝和喜马拉雅,决定开发喜马拉雅的第三方客户端. 客户端使用了WPF开发. 1.抓取接口: 首先得解决接口数 ...

  2. 用 Webpack 和 ES6 转换快速开发 Rails 的富客户端

    2019独角兽企业重金招聘Python工程师标准>>> Fast Rich Client Rails Development With Webpack and the ES6 Tra ...

  3. 富途实习面试(客户端开发)

    富途是近期实习面试中,面试体验最好的了!而且也顺利拿到了offer,IOS客户端开发.但是由于疫情原因,无法实习,已拒. 一共三面: 技术一面: (面试官主要用C++面试,但是底层原理相差不大) 主要 ...

  4. 使用JacpFX和JavaFX2构建富客户端

    创建快速且可扩展的桌面客户端始终是一个挑战,特别是在处理大量数据和长时间运行的任务时. 尽管Eclipse RCP和Netbeans RCP是已建立的平台,但其想法是建立一个轻量级的框架来异步处理组件 ...

  5. 什么是RIA?介绍几种RIA客户端开发技术

    什么是RIA? RIA(Rich Interface Applications)富界面应用,俗称胖客户端或者富客户端. RIA的优势 RIA 具有的桌面应用程序的特点包括:在消息确认和格式编排方面提供 ...

  6. 高性能网页开发的14条军规

    高性能网页开发的14条军规 作者:Yahoo! 来源:西风坊 酷勤网收集 2008-05-13 摘要 酷勤网 1. 尽可能的减少 HTTP 的请求数 2. 使用 CDN(Content Deliver ...

  7. C# 海康DVR客户端开发系列(2)—— 封装API

    前言 从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释.由于工作忙也只能一天抽出那么半个小时一个小时来整理, ...

  8. Apache Spark学习:利用Eclipse构建Spark集成开发环境

    介绍了如何使用Maven编译生成可直接运行在Hadoop 2.2.0上的Spark jar包,而本文则在此基础上, 介绍如何利用Eclipse构建Spark集成开发环境 . 不建议大家使用eclips ...

  9. 行代码入门python_新浪微博Android客户端开发视频教程(36讲)

    教程名称:新浪微博Android客户端开发视频教程(36讲) 课程目录: [IT教程网]新浪微博Android客户端介绍 [IT教程网]新浪微博Android客户端相关资料 [IT教程网]新浪微博An ...

最新文章

  1. 超越PVT、Swin,南大开源高效Transformer:ResT​
  2. 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...
  3. 计算机专业人大学排名,计算机专业学校排名哪些大学计算机专业比较好
  4. SpringBoot底层注解-@ImportResource导入Spring配置文件
  5. jquery插件 --- 图表 表格
  6. mydate97设置时间
  7. matlab水蒸气焓值计算_暖通干货,巧析焓湿图,焓湿图如何应用?一读就懂不容错过...
  8. Cocos Shader 图片去色变成灰色
  9. CSS+HTML如何写一个类似于淘宝的简单导航栏?
  10. 善于做“加减法”的百分点科技 成就数据智能的先行者
  11. ios备忘录下载安卓版_如何下载和平精英国际服?
  12. 用深度强化学习玩FlappyBird
  13. Unity插入视频音频
  14. Eclipse如何从官网获取历史版本
  15. 简易时间计时器的实现
  16. 【通信原理| OFDM技术的最简讲解(上)】窄带、宽带与频分复用、多载波调制的讲解
  17. 企业微信支付功能怎么开通?
  18. CAD梦想画图中的的“绘图工具——绘线命令”
  19. SQL 注入攻击:简介与原理
  20. 2017江苏高职计算机分数线,2017—2019江苏高考招生投档分数线(体育高职专科院校).docx...

热门文章

  1. oracle中的Number的长度定义
  2. java resultset转json_ResultSet到JSON的最有效转换?
  3. 祁飞机器人_转自祈飞:什么是智能机器人
  4. python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...
  5. 同一个浏览器打开不同端口的程序登录_【BI报表制作】单点登录与个性化开发...
  6. mysql 5.7.13 安装配置方法图文教程(linux)
  7. 普通用户的sudo权限,禁止root用户登录
  8. C++ 二进制文件写操作
  9. 数据结构之malloc()函数动态内存分配复习
  10. ElasticSearch 聚合查询