CN108197160B - 一种图片加载方法及装置 - Google Patents

一种图片加载方法及装置 Download PDF

Info

Publication number
CN108197160B
CN108197160B CN201711317391.XA CN201711317391A CN108197160B CN 108197160 B CN108197160 B CN 108197160B CN 201711317391 A CN201711317391 A CN 201711317391A CN 108197160 B CN108197160 B CN 108197160B
Authority
CN
China
Prior art keywords
target picture
picture
queue
index
target
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711317391.XA
Other languages
English (en)
Other versions
CN108197160A (zh
Inventor
柯灵杰
赵桢阳
夏胜飞
刘小龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201711317391.XA priority Critical patent/CN108197160B/zh
Publication of CN108197160A publication Critical patent/CN108197160A/zh
Application granted granted Critical
Publication of CN108197160B publication Critical patent/CN108197160B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching

Abstract

本发明涉及智能终端技术,特别涉及一种图片加载方法及装置,用以避免发生缓存污染,以及提高图片加载效率。该方法为:先将目标图片的索引保存在第一队列中,若目标图片被再次请求加载,则将目标图片的索引移至第二队列中,以及确定目标图片继续被请求加载时,基于第二队列中记录的目标图片的索引,获取相应的目标图片并进行显示,其中,每确定上述目标图片被请求加载一次,则将目标图片的索引由当前位置转存移至第二队列的头部,并定期清除第二队列末尾的数据。这样,可以避免由于偶发性批量加载操作而导致第一队列被清空,从而避免了发生缓存污染,同时又可以迅速从第一队列或第二队列获取目标图片并进行加载,进而有效提高了图片加载及显示效率。

Description

一种图片加载方法及装置
技术领域
本发明涉及智能终端技术,特别涉及一种图片加载方法及装置。
背景技术
目前,智能终端上的各类应用程序通常采用SDWebImage作为图片加载工具,SDWebImage用于为应用程序中嵌入的图像组件(UIImageView)加载各类图片并且对图片的缓存进行管理。
已有技术中,SDWebImage采用最近最少使用(Least Recently Used,LRU)队列作为内存缓存的基本数据结构。在LRU队列中,访问次数最少的数据会被末位淘汰,因此,现有的图片保存方式会存在以下问题:当存在偶发性批量操作时,会导致LRU队列清空,从而导致缓存数据意外丢失,进而在下一次访问的造成显示效率不高。
例如,假设智能终端在运行某一应用程序并打开页面X后立即退出,从而造成了页面X的一次性访问,然而,即使是一次性访问,智能终端也会在下载页面X包含的各类图片,并加载至相应的图片组件内。
通常情况下,智能终端会对首次访问的页面包含的各类图片进行全部下载及缓存,因此,智能终端会将从页面X下载的各类图片全部保存在LRU队列中,如果图片数量过多,则会造成LRU队列中的原始数据的清空,从而造成缓存污染;其中,若原始数据中保存有智能终端经常访问的网页Y包含的各类图片的缓存数据,那么,智能终端在下次再访问网页Y时,就需要重新下载图片,这会造成网页Y的显示效率不高,缓存图片命中率低,并且智能终端需要根据用户的访问习惯,再经过相当长一段时间,才能重新收集恢复上述原始数据,进而造成了用户的使用不便,降低了用户体验。
发明内容
本发明实施例提供一种图片加载方法及装置,用以在通过图片组件加载图片的过程中,避免发生缓存污染,以及提高图片加载效率。
本发明实施例提供的具体技术方案如下:
第一方面,一种图片加载方法,包括:
接收图片加载请求后,基于所述图片加载请求获取目标图片;
将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;
确定所述目标图片再次被请求加载时,将所述目标图片的索引转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;
确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据。
可选的,接收图片加载请求后,基于所述图片加载请求获取目标图片,包括:
基于所述图片加载请求,获得所述目标图片的URL地址;
基于所述URL地址,确定所述目标图片未保存于本地的缓存数据中时,基于所述URL地址从网络侧下载图片原始数据;
对所述图片原始数据进行解析,获得所述目标图片。
可选的,基于所述URL地址从网络侧下载所述图片原始数据,包括:
获取所述URL地址包含的域名;
判断所述域名是否记录在本地;
若是,则基于已记录的域名和服务器IP地址之间的映射关系,获取所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据;
否则,将所述域名发往域名系统DNS服务器进行DNS解析,确定所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据,以及对所述服务器IP地址和所述域名之间的映射关系进行记录。
可选的,对所述图片原始数据进行解析,获得所述目标图片,包括:
在下载所述图片原始数据的过程中,确定已下载数据量达到设定阈值后,开始对已下载的数据进行解码,直到所述图片原始数据下载完毕以及解码完毕;
按照指定的图片组件的显示区域的大小,对所述图片原始数据的解码数据进行调整,获得所述目标图片。
可选的,进一步包括:
将所述图片原始数据保存在磁盘缓存中;
以及将所述目标图片保存在内存中,并生成所述目标图片的索引。
可选的,将所述目标图片保存在内存中,包括:
根据中央处理器CPU的位数,采用字节对齐方式将所述目标图片保存在内存中。
可选的,进一步包括:
对应所述目标图片绑定相应的释放标记,以及对应所述目标图片设置相应的弱指针容器;所述弱指针容器用于对所述释放标记进行监测;
通过所述弱指标容器获知所述释放标记被系统释放时,确定所述目标图片被系统释放,则释放所述弱指标容器。
可选的,进一步包括:
确定所述目标图片再次被请求加载时,判断是否存在对应所述目标图片设置的弱指针容器;
若是,则通过所述弱指针容器获取所述目标图片并进行加载;
否则,在所述第一队列和第二队列中查找是否存在所述目标图片的索引,确定存在时,在所述第一队列或所述第二队列中基于所述目标图片的索引获取所述目标图片并进行加载。
第二方面,一种图片加载装置,包括:
获取单元,用于接收图片加载请求后,基于所述图片加载请求获取目标图片;
处理单元,用于将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;以及用于确定所述目标图片再次被请求加载时,将所述目标图片的索引转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;以及还用于确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据。
可选的,接收图片加载请求后,基于所述图片加载请求获取目标图片时,所述获取单元用于:
基于所述图片加载请求,获得所述目标图片的URL地址;
基于所述URL地址,确定所述目标图片未保存于本地的缓存数据中时,基于所述URL地址从网络侧下载图片原始数据;
对所述图片原始数据进行解析,获得所述目标图片。
可选的,基于所述URL地址从网络侧下载所述图片原始数据时,所述获取单元用于:
获取所述URL地址包含的域名;
判断所述域名是否记录在本地;
若是,则基于已记录的域名和服务器IP地址之间的映射关系,获取所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据;
否则,将所述域名发往域名系统DNS服务器进行DNS解析,确定所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据,以及对所述服务器IP地址和所述域名之间的映射关系进行记录。
可选的,对所述图片原始数据进行解析,获得所述目标图片时,所述获取单元用于:
在下载所述图片原始数据的过程中,确定已下载数据量达到设定阈值后,开始对已下载的数据进行解码,直到所述图片原始数据下载完毕以及解码完毕;
按照指定的图片组件的显示区域的大小,对所述图片原始数据的解码数据进行调整,获得所述目标图片。
可选的,所述处理单元进一步用于:
将所述图片原始数据保存在磁盘缓存中;
以及将所述目标图片保存在内存中,并生成所述目标图片的索引。
可选的,将所述目标图片保存在内存中时,所述处理单元用于:
根据中央处理器CPU的位数,采用字节对齐方式将所述目标图片保存在内存中。
可选的,所述处理单元进一步用于:
对应所述目标图片绑定相应的释放标记,以及对应所述目标图片设置相应的弱指针容器;所述弱指针容器用于对所述释放标记进行监测;
通过所述弱指标容器获知所述释放标记被系统释放时,确定所述目标图片被系统释放,则释放所述弱指标容器。
可选的,所述处理单元进一步用于:
确定所述目标图片再次被请求加载时,判断是否存在对应所述目标图片设置的弱指针容器;
若是,则通过所述弱指针容器获取所述目标图片并进行加载;
否则,在所述第一队列和第二队列中查找是否存在所述目标图片的索引,确定存在时,在所述第一队列或所述第二队列中基于所述目标图片的索引获取所述目标图片并进行加载。
第三方面,一种存储介质,存储用于实现图片存储的程序,所述程序被处理器运行时,执行以下步骤:
接收图片加载请求后,基于所述图片加载请求获取目标图片;
将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;
确定所述目标图片再次被请求加载时,将所述目标图片的索引转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;
确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据。
第四方面,一种通信装置,包括一个或多个处理器;以及一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被所述一个或多个处理器执行时,使得所述装置执行第一方面中提及的任一项所述的方法。
本发明实施例中,在对目标图片存储时,采用双队列缓存方式保存目标图片,即先将目标图片的索引保存在第一队列中,若目标图片被再次请求加载,则将目标图片的索引移至第二队列中,以及在确定目标图片继续被请求加载时,基于第二队列中记录的目标图片的索引,获取相应的目标图片并进行显示,其中,在第二队列中,每确定上述目标图片被请求加载一次,则将目标图片的索引由当前位置转存至第二队列的头部,并定期清除第二队列末尾的数据。这样,可以避免由于偶发性批量加载操作而导致第一队列被清空,从而避免了发生缓存污染,当目标图片被再次请求访问时,可以迅速从第一队列或第二队列获取目标图片并进行加载,进而有效提高了图片加载及显示效率。
附图说明
图1为本发明实施例中图片加载界面示意图;
图2A为本发明实施例中图片加载方法基本流程示意图;
图2B为本发明实施例中图片加载方法详细流程示意图;
图3为本发明实施例中双队列算法示意图;
图4为本发明实施例中智能缓存工作原理示意图;
图5和图6为本发明实施例中智能终端功能结构示意图。
具体实施方式
为了避免发生缓存污染,以及提高图片加载效率,本发明实施例中,采用双队列对下载的图片进行缓存,从网页上下载的各类图片均先保存至第一队列中,而只有在第一队列中被再次访问的图片,才会被存入第二队列,而第二队列采用基于访问次数的末位淘汰制,将不经常访问的图片从第二队列中删除。
下面结合附图对本发明优选的实施例作出进一步详细说明。
参阅图1所示,在一个应用程序的操作界面中,运行着各种图片组件,智能终端便需要从网络、磁盘缓存、内存缓存等存储位置加载相关的图片加载至各类图片组件。
参阅图2A所示,本发明实施例中,对目标图片进行存储以及加载的基本流程如下:
步骤20:接收图片加载请求,基于图片加载请求获取目标图片;
步骤21:将目标图片的索引存储至内存缓存中的第一队列中;第一队列用于保存最新的被请求加载的目标图片的索引。
可选的,第一队列可以采用先入先出(First Input First Output,FIFO)队列,后续实施例中将沿用这一称谓,将不再赘述。
另一方面,所谓最新的被请求加载的目标图片,是指智能终端最新接收到的图片加载请求所关联的图片,即每接收一次图片加载请求,就需要将相应的目标图片的索引在第一队列中保存一次。
例如,假设FIFO队列中最多可保存3张目标可保存,那么:
假设智能终端启动后,依次接收到针对图片1、图片2和图片3的图片加载请求,那么,智能终端就会将图片1、图片2和图片3的索引保存在FIFO队列中。
接着,假设智能终端又接收到图片4的图片加载请求,那么,智能终端就会采用图片4的索引对最先接收的图片1的索引进行覆盖,此时,FIFO队列中保存了图片2、图片3和图片4的索引。
之后,假设智能终端又在同一时期接收到图片5、图片6和图片7的图片加载请求,
那么,智能终端就会采用图片5、图片6和图片7的索引对图片2、图片3和图片4的索引进行覆盖。
……
以类类推,FIFO中一直保存的是最新的被请求加载的目标图片的索引。
步骤22:确定上述目标图片再次被请求加载时,将上述目标图片的索引从第一队列转存至内存缓存中的第二队列中,第二队列用于保存多次被请求加载的目标图片的索引。
可选的,第二队列可以采用LRU队列,后续实施例中将沿用这一称谓,将不再赘述。
另一方面,所谓多次被请求加载的目标图片,是指至少两次作为目标图片被请求加载的图片,即一张图片只有被请求加载至少两次,智能终端才会将这一张图片由FIFO队列转移保存至LRU队列中。
例如,假设FIFO队列中当前保存了图片5、图片6和图片7的索引,而此时智能终端再次接收到了针对图5的图片加载请求,那么,智能终端会将图5的索引由FIFO队列转移至LRU队列中。
步骤23:确定上述目标图片继续被请求加载时,基于第二队列中记录的上述目标图片的索引,获取相应的目标图片并进行显示;其中,在第二队列中,每确定上述目标图片被请求加载一次,将上述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除第二队列末尾的数据。
具体的,在将目标图片的索引由FIFO队列转存至LRU队列之后,目标图片还有可能继续被请求加载,那么,智能终端每确定目标图片被请求加载一次,就会将目标图片的索引重新存储至LRU队列的头部,这样,可以保证被请求加载次数相对较多的目标图片的索引被保留在LRU队列的头部,而被请求加载次数相对较少的目标图片的索引则被保留在LRU队列的尾部,被请求加载次数最少的目标图片将会被定期清空,以避免占用LRU队列资源的时间过长。
本发明实施例中,上述FIFO队列和LRU队列均是设置在内存缓存中的队列。
进一步地,在图片批量请求加载的场景下,内存缓存可能会由于资源过少而无法支持批量保存目标图片的索引,针对这一情况,可选的,智能终端可以将目标图片的原始数据保存在磁盘缓存中,后续流程中可以按照目标图片的索引直接大磁盘缓存中调用原始数据进行解码处理后进行显示。
更进一步地,进一步地,还可以通过在内存中配置智能缓存,针对目标图片设置弱指针容器,用于对目标图片的资源占用情况进行监测,只要通过弱指针容器确定目标图片未被系统释放,即可以迅速获取到目标图片并进行加载及显示。
参阅图2B所示,本发明实施例中,对图片进行加载及存储的详细流程如下:
步骤200:智能终端接收图片加载请求,该图片加载请求中携带有目标图片的URL地址。
具体的,智能终端启动某一应用程序后,应用程序中的各类图片组件便开始运行,运行过程中需要开始加载图片,待加载的各个图片的统一资源定位符(Uniform ResourceLocator,URL)地址可以是默认设置的,也可以是由用户自定义设置的,那么,应用程序便可以将携带有图片的URL地址的图片加载请求发送给智能终端。
步骤201:智能终端在缓存数据中查找是否已存在目标图片,若是,则执行步骤202;否则,执行步骤203。
本发明实施例中,智能终端会按照以下顺序在各类缓存中查找目标图片:智能缓存->内存缓存->磁盘缓存;智能缓存和内存缓存均为内存的一部分,智能缓存用于对目标图片的使用情况进行监测,具体作用将在后续实施例中进行详细介绍。
步骤202:智能终端在缓存数据中获取目标图片,接着,执行步骤213。
可选的,智能缓存中保存的是目标图片的已解码及已经图片处理的数据,可以直接作为目标图片使用。
同理,内存缓存中保存的也是目标图片的已解码及已经图片处理的数据,亦可以直接作为目标图片使用。
而磁盘缓存中保存的是目标图片的原始数据,因此,需要对原始数据进行文件解码及进行图片处理后,获得目标图片再使用。
另一方面,保存在智能缓存、内存缓存及磁盘缓存中的目标图片的文件名,可以是目标图片的URL地址的MD5值。
步骤203:智能终端生成向网络侧发送的图片下载请求,该图片下载请求中携带有目标图片的URL地址。
步骤204:智能终端判断图片下载请求中的URL地址包含的域名对应的IP地址是否已保存在本地,若是,则执行步骤206;否则,执行步骤205。
通常情况下,智能终端在首次接收到某一图片的图片下载请求时,会将图片下载请求中携带的目标图片的URL地址中包含的域名发往域名系统(Domain Name Server,DNS)服务器进行DNS解析,获得上述域名对应的服务器IP地址,再按照该服务器IP地址发起http请求或https请求,从相应的服务器下载所需的目标图片。
步骤205:智能终端将图片下载请求中URL地址包含的域名发往DNS服务器进行域名解析,获得相应的服务器IP地址。
步骤206:智能终端将图片下载请求中URL地址包含的域名替换为对应的服务器IP地址。
智能终端通常会在本地维护一个域名和服务器IP地址之间的查询映射表,智能终端再次接收到图片下载请求时,会先判断图片下载请求中携带的URL地址包含的域名是否记载在本地的查询映射表中,确定存在时,则会直接采用域名对应的服务器IP地址对URL地址中的域名进行替换,并按照该服务器IP地址发起http请求或https请求,从相应的服务器下载所需的目标图片。
这样,可以避免再次进行DNS解析,令智能终端可以直接访问服务器进行图片下载,从而达到了加快图片下载速度的目的。
步骤207:智能终端向服务器发送图片下载请求,从服务器下载目标图片的原始数据。
步骤208:智能终端将目标图片的原始数据保存在磁盘缓存中。
本发明实施例中,在磁盘缓存中保存目标图片的原始数据,是为了防止在短时间内突发批量下载,而内存缓存无力承担的情况发生。
在磁盘缓存中保存目标图片的原始数据后,其文件名可以记录为相应的URL地址的MD5值,这样,智能终端在下一次接收到应用程序发出的图片加载请求时,便可以通过图片加载请求中携带的URL地址的MD5值,来判断本地是否缓存数据中是否保存有相应的目标图片(对应于步骤101),若存在则可以直接提取后进行加载,从而能大幅度提升图片的二次加载速度。
步骤209:智能终端对目标图片的原始数据进行文件解码。
本发明实施例中,智能终端会维护一个任务队列和一个线程池,在目标图片的原始数据需要被解码时,智能终端会将任务加入任务队列中,而任务队列中正在运行的任务数量,小于当前CPU的核心数的时候,智能终端会从线程池中取出一个未被占用的线程,分配给下一个任务,保证智能模块的解码硬件总是以最高效率在运行。
进一步地,已有技术中,通知是将目标图片的原始数据全部下载后再开始进行解码,这会造成解码效率低,速度慢等问题。可选的,本发明实施例中,智能终端在下载目标图片的原始数据的过程中,可以一边保存至磁盘缓存,一边进行文件解码,如,已下载数据量达到设定阈值后,便可以开始执行文件解码操作,这样,可以有效提升文件解码效率。
步骤210:智能终端对目标图片的解码数据进行图片处理,获得目标图片,并保存在内存中。
可选的,所谓图片处理,即是指按照图片控件的显示区域大小对目标图片的解码数据进行调整,转变为显示区域的大小,从而获得目标图片。
当然,若下载的目标图片的数量不多,或者,下载的目标图片的图片数据无需解码及进行图片调整,则也可以不将目标图片保存至磁盘缓存中,而是直接执行步骤211保存至内存缓存中,以方便后续的快速操作,在此不再赘述。
步骤211:智能终端将目标图片的索引作为缓存数据保存在内存缓存中。
具体的,内存缓存为内存中的一部分,目标图片保存在内存中,而目标图片的索引则保存在内存缓存中,这样,在后续流程中,当目标图片再次被请求加载时,智能终端可以直接在内存缓存中查找是否存在目标图片的索引,并链接至相应的存储位置提取目标图片。
进一步地,在内存中保存目标图片时,需要根据CPU的位数,采用字节对齐方式保存目标图片,即将目标图片的数据绘制拷贝到字节对齐的区域中。
字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数,而字节按照设定规则在空间上排列就是字节对齐。
例如,假设CPU位数为32位,且预设规则为:以32位为单位进行字节对齐;那么,假设目标图片的数据大小为18位,就需要进行位数补充至32位后再进行保存,又假设目标图片为40位,就需要进行位数补充致64位后再进行保存。
另一方面,在内存缓存中保存目标图片的索引时,可选的,可以采用双队列模式。具体如下:
参阅图3所示,设置一个FIFO队列及一个LRU队列以及一个哈希地图(hashmap)组成,使用双队列缓存淘汰算法解决缓存污染问题,其中,hashmap采用key-value形式构建,用于保存目标图片的索引和存储位置之间的映射关系。
具体的,智能终端会将初次获得的各个目标图片插入至FIFO队列中,本发明实施例中,FIFO队列用于保存最新的被请求加载的目标图片的索引;
在FIFO队列中,若智能终端确定一张目标图片被再次请求加载,则将会上述一张目标图片的索引移至LRU队列中,可选的,移至LRU队列的头部;本发明实施例中,LRU队列用于保存多次(至少两次)被请求加载的目标图片的索引;
按照这种方式,在FIFO队列中一直没有被再次请求加载的目标图片的索引,会最终按照FIFO规则被淘汰;
而在LRU队列中,智能终端每确定一张目标图片被再次请求加载一次,则会将上述一张目标图片的索引由当前位置移至LRU队列的头部,即LRU队列头部的索引对应的目标图片,均是最新的被再次请求加载的目标图片。
进一步地,智能终端会按照设定周期淘汰LRU队列末尾的目标图片的索引。
当目标图片再次被请求加载时,智能终端会在FIFO队列或LRU队列中查找是否存在对应的索引,如果存在,则基于索引和上述hashmap,查找到目标图片在内存中的存储位置,以便读取目标图片。
基于上述方法,在FIFO队列中,只有最少被访问两次的目标图片的索引才会由FIFO队列移到LRU队列,而在LRU队列中,只有被访问次数最多的目标图片的索引才会保持在LRU队列的头部,从而避免被淘汰。这样,即使存在偶发性批量操作时,也只会导致FIFO队列被清空,而FIFO队列中经常被访问的目标图片的索引早已移致LRU队列中,从而避免了LRU队列中缓存数据的意外丢失,令LRU队列始终保持缓存清洁,进而在下一次访问的有效保证了目标图片的显示效率。
步骤212:智能终端将用于监测目标图片的弱指针容器作为缓存数据保存在智能缓存中。
本发明实施例中,智能缓存也是内存的一部分,之所以要建立智能缓存,是为了采用资源弱引用的方式对内存资源的释放进行监视维护,使得智能缓存几乎不再占用额外的存储空间,且能够在合适的时机自动被清除,达到节约资源,以及提高图片显示效率的作用。
参阅图4所示,智能缓存由弱指针索引表、弱指针容器、目标图片(内存中的缓存数据)、释放通知器(又可称为释放标记)四个部分组成。在智能缓存中维护了一个弱指针索引表,这是一个Hash表,在弱指针索引表中每一个元素都是一个弱指针容器,一个弱指针容器可以弱引用了一个目标图片,并将一个释放通知器绑定在目标图片上。
所谓弱引用即是指,对目标图片的引用关系不会导致目标图片无法被系统释放。由于无法对目标图片直接进行监测(会导致目标图片无法被释放),因此,弱指针容器可以通过对释放通知器的资源使用情况进行监测,从而实现对与释放通知器绑定的目标图片的监测,即通过对已知对象的监测实现对未知对象的监测。
当目标图片被系统释放时,与目标图片绑定的释放通知器将通知相应的弱指针容器,而弱指针容器会将自身从弱指针索引表中移除,若目标图片始终未被系统释放,那么,当目标图片再次被请求加载时,智能终端会直接通过智能缓存中对目标图片进行弱引用的弱指针容器,在系统中找到相应的目标图片并进行加载。
简言之,智能终端会对应目标图片绑定相应的释放标记(即释放通知器),以及对应目标图片设置相应的弱指针容器,并通过弱指针容器用于对释放标记进行监测,以及在通过弱指标容器获知释放标记被系统释放时,确定目标图片被系统释放,进而释放相应的弱指标容器。
实际应用中,由于在内存缓存中的FIFO队列和LRU队列会按照设定规则删除队列中的数据,因此,FIFO队列和LRU队列中保存的数据量有限,那么,某些目标图片即使没有被系统释放,其相应的索引也有可能已不在FIFO队列和LRU队列中保存了,因此,本发明实施例中,采用智能缓存这种无额外内存占用的弱引用缓存,可以直接找到未被系统释放的目标图片,令目标图片再次被请求加载时,无需重新下载和解码,极大地提升了图片显示速率。
另一方面,实际应用中,若系统中展示的目标图片数量不多或者目标图片的被访问次数不频繁,内存缓存足以支撑目标图片的缓存操作时,也可以不设置智能缓存,在此不再赘述。
步骤213:智能终端在图片组件中显示目标图片。
基于上述实施例,实际应用中,当步骤213中提及的目标图片再次被请求加载时(即再次被访问)时,智能终端会执行以下操作:
先在智能缓存中判断是否存在对应目标图片设置的弱指针容器;
若是,则通过弱指针容器获取目标图片并进行加载;
此时,说明系统并未释放目标图片,可以通过弱指针容器直接获取。
否则,在上述FIFO队列或LRU队列中查找是否存在目标图片的索引,确定存在时,基于目标图片的索引在相应的存储位置获取目标图片并进行加载。进一步地,若FIFO队列或LRU队列中也没有保存目标图片的索引,则智能终端会按照目标图片的文件名(如,URL地址的MD5值)在磁盘缓存中查找是否保存有目标图片的原始数据,若存在,则再次对目标图片的原始数据进行解码和图片处理,获得目标图片后进行加载,若不存在,则再次向网络侧发送图片下载请求,重新下载并加载目标图片,在此不再赘述。
参阅图5所示,本发明实施例中,图片加载装置(如,智能终端)至少包括获取单元50和处理单元51,其中,
获取单元50,用于接收图片加载请求后,基于所述图片加载请求获取目标图片;
处理单元51,用于将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;以及用于确定所述目标图片再次被请求加载时,将所述目标图片的索引转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;以及还用于确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据。
可选的,接收图片加载请求后,基于所述图片加载请求获取目标图片时,获取单元50用于:
基于所述图片加载请求,获得所述目标图片的URL地址;
基于所述URL地址,确定所述目标图片未保存于本地的缓存数据中时,基于所述URL地址从网络侧下载图片原始数据;
对所述图片原始数据进行解析,获得所述目标图片。
可选的,基于所述URL地址从网络侧下载所述图片原始数据时,获取单元50用于:
获取所述URL地址包含的域名;
判断所述域名是否记录在本地;
若是,则基于已记录的域名和服务器IP地址之间的映射关系,获取所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据;
否则,将所述域名发往域名系统DNS服务器进行DNS解析,确定所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据,以及对所述服务器IP地址和所述域名之间的映射关系进行记录。
可选的,对所述图片原始数据进行解析,获得所述目标图片时,获取单元50用于:
在下载所述图片原始数据的过程中,确定已下载数据量达到设定阈值后,开始对已下载的数据进行解码,直到所述图片原始数据下载完毕以及解码完毕;
按照指定的图片组件的显示区域的大小,对所述图片原始数据的解码数据进行调整,获得所述目标图片。
可选的,处理单元51进一步用于:
将所述图片原始数据保存在磁盘缓存中;
以及将所述目标图片保存在内存中,并生成所述目标图片的索引。
可选的,将所述目标图片保存在内存中时,处理单元51用于:
根据中央处理器CPU的位数,采用字节对齐方式将所述目标图片保存在内存中。
可选的,处理单元51进一步用于:
对应所述目标图片绑定相应的释放标记,以及对应所述目标图片设置相应的弱指针容器;所述弱指针容器用于对所述释放标记进行监测;
通过所述弱指标容器获知所述释放标记被系统释放时,确定所述目标图片被系统释放,则释放所述弱指标容器。
可选的,处理单元51进一步用于:
确定所述目标图片再次被请求加载时,判断是否存在对应所述目标图片设置的弱指针容器;
若是,则通过所述弱指针容器获取所述目标图片并进行加载;
否则,在所述第一队列和第二队列中查找是否存在所述目标图片的索引,确定存在时,在所述第一队列或所述第二队列中基于所述目标图片的索引获取所述目标图片并进行加载。
基于同一发明构思,本发明一个实施例中,提供一种存储介质,存储用于实现图片存储的程序,所述程序被处理器运行时,执行以下步骤:
接收图片加载请求后,基于所述图片加载请求获取目标图片;
将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;
确定所述目标图片再次被请求加载时,将所述目标图片的索引移至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置转存至所述第二队列的头部,并定期清除所述第二队列末尾的数据。
基于同一发明构思,参阅图6所示,本发明一个实施例中,提供一种通信装置,包括一个或多个处理器;以及一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被所述一个或多个处理器执行时,使得所述装置执行上述实施例中提及的任一种方法。
具体的,可读介质可以是磁盘缓存、内存缓存以及智能缓存。
本发明实施例中,在对目标图片存储时,采用双队列缓存方式保存目标图片,即先将目标图片的索引保存在第一队列中,若目标图片被再次请求加载,则将目标图片的索引移至第二队列中,以及确定目标图片继续被请求加载时,基于第二队列中记录的目标图片的索引,获取相应的目标图片并进行显示,其中,在第二队列中,每确定上述目标图片被请求加载一次,则将目标图片的索引由当前位置移至第二队列的头部,并定期清除第二队列末尾的数据。这样,可以避免由于偶发性批量加载操作而导致第一队列被清空,从而避免了发生缓存污染,当目标图片被再次请求访问时,可以迅速从第一队列或第二队列获取目标图片并进行加载,进而有效提高了图片加载及显示效率。
进一步地,还可以通过配置智能缓存,针对目标图片设置弱指针容器,用于对目标图片的资源占用情况进行监测,当弱指针容器确定与目标图片绑定的释放标记被释放进,即判定目标图片被系统释放,进而将自身占用的内存资源也进行释放,这样,当目标图片被再次请求访问时,只要通过弱指针容器确定目标图片未被系统释放,即可以迅速获取到目标图片并进行加载及显示,从而即减少了目标图片在内存中占用的空间,又进一步提升了图片的加载及显示效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (9)

1.一种图片加载方法,其特征在于,包括:
接收图片加载请求,基于所述图片加载请求获取目标图片;
将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;
确定所述目标图片再次被请求加载时,将所述目标图片的索引从所述第一队列转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;
确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据;
其中,所述方法进一步包括:
对应所述目标图片绑定相应的释放标记,以及对应所述目标图片设置相应的弱指针容器;所述弱指针容器用于对所述释放标记进行监测;
通过所述弱指针 容器获知所述释放标记被系统释放时,确定所述目标图片被系统释放,则释放所述弱指针 容器;
其中,所述方法进一步包括:
确定所述目标图片再次被请求加载时,判断是否存在对应所述目标图片设置的弱指针容器;
若是,则通过所述弱指针容器获取所述目标图片并进行加载;
否则,在所述第一队列和第二队列中查找是否存在所述目标图片的索引,确定存在时,在所述第一队列或所述第二队列中基于所述目标图片的索引获取所述目标图片并进行加载。
2.如权利要求1所述的方法,其特征在于,接收图片加载请求后,基于所述图片加载请求获取目标图片,包括:
基于所述图片加载请求,获得所述目标图片的统一资源定位URL地址;
基于所述URL地址,确定所述目标图片未保存于本地的缓存数据中时,基于所述URL地址从网络侧下载图片原始数据;
对所述图片原始数据进行解析,获得所述目标图片。
3.如权利要求2所述的方法,其特征在于,基于所述URL地址从网络侧下载所述图片原始数据,包括:
获取所述URL地址包含的域名;
判断所述域名是否记录在本地;
若是,则基于已记录的域名和服务器IP地址之间的映射关系,获取所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据;
否则,将所述域名发往域名系统DNS服务器进行DNS解析,确定所述域名对应的服务器IP地址,并基于所述服务器IP地址访问相应的服务器下载所述图片原始数据,以及对所述服务器IP地址和所述域名之间的映射关系进行记录。
4.如权利要求2所述的方法,其特征在于,对所述图片原始数据进行解析,获得所述目标图片,包括:
在下载所述图片原始数据的过程中,确定已下载数据量达到设定阈值后,开始对已下载的数据进行解码,直到所述图片原始数据下载完毕以及解码完毕;
按照指定的图片组件的显示区域的大小,对所述图片原始数据的解码数据进行调整,获得所述目标图片。
5.如权利要求2所述的方法,其特征在于,进一步包括:
将所述图片原始数据保存在磁盘缓存中;
以及将所述目标图片保存在内存中,并生成所述目标图片的索引。
6.如权利要求5所述的方法,其特征在于,将所述目标图片保存在内存中,包括:
根据中央处理器CPU的位数,采用字节对齐方式将所述目标图片保存在内存中。
7.一种图片加载装置,其特征在于,包括:
获取单元,用于接收图片加载请求后,基于所述图片加载请求获取目标图片;
处理单元,用于将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;以及用于确定所述目标图片再次被请求加载时,将所述目标图片的索引转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;以及还用于确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据;
所述处理单元,还用于对应所述目标图片绑定相应的释放标记,以及对应所述目标图片设置相应的弱指针容器;所述弱指针容器用于对所述释放标记进行监测;通过所述弱指针 容器获知所述释放标记被系统释放时,确定所述目标图片被系统释放,则释放所述弱指针 容器;
所述处理单元,还用于确定所述目标图片再次被请求加载时,判断是否存在对应所述目标图片设置的弱指针容器;若是,则通过所述弱指针容器获取所述目标图片并进行加载;否则,在所述第一队列和第二队列中查找是否存在所述目标图片的索引,确定存在时,在所述第一队列或所述第二队列中基于所述目标图片的索引获取所述目标图片并进行加载。
8.一种存储介质,其特征在于,存储用于实现图片存储的程序,所述程序被处理器运行时,执行以下步骤:
接收图片加载请求后,基于所述图片加载请求获取目标图片;
将所述目标图片的索引存储至内存缓存中的第一队列中;所述第一队列用于保存最新的被请求加载的目标图片的索引;
确定所述目标图片再次被请求加载时,将所述目标图片的索引转存至内存缓存中的第二队列中,所述第二队列用于保存多次被请求加载的目标图片的索引;
确定所述目标图片继续被请求加载时,基于所述第二队列中记录的所述目标图片的索引,获取相应的目标图片并进行显示;
其中,在所述第二队列中,每确定所述目标图片被请求加载一次,将所述目标图片的索引由当前位置移至所述第二队列的头部,并定期清除所述第二队列末尾的数据;
其中,所述程序被处理器运行时,进一步执行以下步骤:
对应所述目标图片绑定相应的释放标记,以及对应所述目标图片设置相应的弱指针容器;所述弱指针容器用于对所述释放标记进行监测;
通过所述弱指针 容器获知所述释放标记被系统释放时,确定所述目标图片被系统释放,则释放所述弱指针 容器;
其中,所述程序被处理器运行时,进一步执行以下步骤:
确定所述目标图片再次被请求加载时,判断是否存在对应所述目标图片设置的弱指针容器;
若是,则通过所述弱指针容器获取所述目标图片并进行加载;
否则,在所述第一队列和第二队列中查找是否存在所述目标图片的索引,确定存在时,在所述第一队列或所述第二队列中基于所述目标图片的索引获取所述目标图片并进行加载。
9.一种通信装置,其特征在于,包括一个或多个处理器;以及一个或多个计算机可读介质,所述可读介质上存储有指令,所述指令被所述一个或多个处理器执行时,使得所述装置执行如权利要求1至6中任一项所述的方法。
CN201711317391.XA 2017-12-12 2017-12-12 一种图片加载方法及装置 Active CN108197160B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711317391.XA CN108197160B (zh) 2017-12-12 2017-12-12 一种图片加载方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711317391.XA CN108197160B (zh) 2017-12-12 2017-12-12 一种图片加载方法及装置

Publications (2)

Publication Number Publication Date
CN108197160A CN108197160A (zh) 2018-06-22
CN108197160B true CN108197160B (zh) 2022-11-25

Family

ID=62574197

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711317391.XA Active CN108197160B (zh) 2017-12-12 2017-12-12 一种图片加载方法及装置

Country Status (1)

Country Link
CN (1) CN108197160B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109241219A (zh) * 2018-08-17 2019-01-18 广州城市信息研究所有限公司 一种地图动态切片及序列化缓存方法、装置及存储介质
CN111931095A (zh) * 2020-08-26 2020-11-13 重庆帮企科技集团有限公司 一种Android系统的图片加载方法
CN112541143B (zh) * 2020-12-17 2022-08-19 青岛以萨数据技术有限公司 异步图片获取方法及系统
CN115878920A (zh) * 2022-11-29 2023-03-31 上海图客科技有限公司 基于WebGL的动态高性能批量图片显示方法、系统及程序产品

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105118020A (zh) * 2015-09-08 2015-12-02 北京乐动卓越科技有限公司 用于快速图片处理的方法及装置
CN106897030A (zh) * 2017-02-28 2017-06-27 郑州云海信息技术有限公司 一种缓存数据管理方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105118020A (zh) * 2015-09-08 2015-12-02 北京乐动卓越科技有限公司 用于快速图片处理的方法及装置
CN106897030A (zh) * 2017-02-28 2017-06-27 郑州云海信息技术有限公司 一种缓存数据管理方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Android中图片的三级缓存策略;qq_20889581;《CSDNhttps://blog.csdn.net/qq_20889581/article/details/51034472》;20160401;第1-4页 *
Android之网络下载与图片解码-----网络图片浏览器;江海细流;《https://blog.csdn.net/fengliang191/article/details/31032089》;20140615;第1-4页 *
缓存淘汰算法--LRU算法;flychao88;《https://www.pudn.com/news/628f82f6bf399b7f351e5c06.html》;20131120;第1-4页 *

Also Published As

Publication number Publication date
CN108197160A (zh) 2018-06-22

Similar Documents

Publication Publication Date Title
CN108197160B (zh) 一种图片加载方法及装置
CN107943594B (zh) 数据获取方法和装置
US20140258375A1 (en) System and method for large object cache management in a network
CN109496418B (zh) 文件下载方法、装置及设备/终端/服务器
CN110247985B (zh) 一种资源下载方法、装置、电子设备及介质
KR101964927B1 (ko) 캐싱 프록시 방법 및 장치
US9648119B2 (en) Methods and devices for exchanging data
CN104735112A (zh) 发送资源文件的方法、缓存资源文件的方法和装置
CN106817388B (zh) 虚拟机、宿主机获取数据的方法、装置及访问数据的系统
CN107026879B (zh) 一种数据缓存方法及后台应用系统
US10771358B2 (en) Data acquisition device, data acquisition method and storage medium
CN110737388A (zh) 数据预读方法、客户端、服务器以及文件系统
US9317470B1 (en) Method and system for incremental cache lookup and insertion
CN106657182B (zh) 云端文件处理方法和装置
CN114553762B (zh) 一种对流表中的流表项处理的方法及装置
US20220214832A1 (en) Prefetching metadata in a storage system
CN107332703B (zh) 一种多应用日志的查看方法及装置
CN112395337B (zh) 一种数据导出方法和装置
CN109344349B (zh) 一种数据缓存方法及装置、电子设备
JP2018511131A (ja) オンライン媒体のための階層的なコストベースのキャッシング
WO2016118269A1 (en) Cooperative management of client device cache memory in an http session
CN113536168B (zh) 组件处理方法及设备
CN111405313B (zh) 存储流媒体数据的方法和系统
CN108846141B (zh) 一种离线缓存加载方法及装置
CN113849125A (zh) 一种cdn服务器磁盘读取的方法、装置及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant