• Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理


    一、概述

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

    二、缓存处理的原因

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

    三、缓存图片的处理

    1 、问题的发生

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

    2 、图片缓存的处理

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

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

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

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

     

    3 、用法

    在用到图片的地方,调用工具类 ImageUtil 中的 getImage(fileName) 就可以了,其中参数 fileName 是图片的名称。此外需要注意下,所有图片是放到 icons 目录下的。具体的实现类在这就不列出代码了。

    四、数据缓存的处理

    数据缓存的原理很简单,就是将要加载的数据先存到一个位置,用的时候直接从这个位置中取出就可以了,不用每次用的时候都要创建连接数据库的信息并从数据库中读数据,若想要更新的数据,就要出现个刷新按钮了,刷新一下,从数据库中读出新数据更新缓存,用的时候还是从缓存中取数据信息。

    下面说说我们项目中用到的数据缓存的实现原理。

    因为我们项目中用到的数据基本上是组装树结构的数据,所以将数据以 list 的形式存放的。具体思路是:从数据库中查询出来的数据存放到 list 中,当项目中调用数据库数据的时候就是从这个 list 中取得,当刷新数据的时候在更新对应的 list 中的数据就可以了。

    代码的实现也是很简单,这里就不粘代码了,简单介绍下实现方案。定义一个缓存 list 存放数据,提供一个方法 a 将数据存放到这个 list 中来,并对外提供一个获得这个 list 的接口方法 b ,外界来调用这个接口方法 b 获得数据,当要刷新数据的时候就直接调用 a 方法。

     

  • 相关阅读:
    网页媒体播放利器
    iframe截取网站部分内容实现思路及代码
    网站如何添加访客统计代码
    Javascript写入txt和读取txt文件示例
    常见JS挂马方法及如何防止网站被黑客挂马?
    最新挂木马的10大操作方法
    Javascript教程:js异步模式编程的4种解决方法
    JavaScript对象属性的基础教程指南
    jsp中的JSTL与EL表达式用法
    Java 连接 SqlServer工具类
  • 原文地址:https://www.cnblogs.com/dengyungao/p/7503661.html
Copyright © 2020-2023  润新知