我打算从服务器缓存图像,并将其显示为我的应用程序中的排序幻灯片放映.我将异步加载图像.
我有两个选择:
哪一个会更好?
如果您对缓存图像有任何建议,请告诉我.
我认为之前有人询问过,但仍有一些我无法理解的事情.
我尝试了两种不同的方法:
在2.它只是清理它们有时第二次我分配它们!而且我没有分配太多 - 30-40张50x50像素的图像.
所以我坚持一个.问题是限制是什么?
我正在使用Kingfisher库来下载和缓存图像.我在实施中面临一些问题:
图像是否缓存在内存和磁盘中?
是否有任何规定只在磁盘上缓存图像?
我已经阅读了多篇关于此的帖子,但找不到任何解决方案.
我一直试图找出一个外部图像是否在js上缓存在浏览器上,这是我到目前为止的代码:
<html>
<head></head>
<body>
<script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script>
function cached( url ) {
$("#imgx").attr({"src":url});
if(document.getElementById("imgx").complete) {
return true;
} else {
if( document.getElementById("imgx").width > 0 ) return true;
}
return false;
}
</script>
<img id="imgx" src="" />
<script>
$(document).ready(function(){
alert(cached("http://www.google.com/images/srpr/nav_logo80.png"));
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它在firefox上完美运行,但它总是在chrome上返回false.
有人知道如何使用chrome吗?
我已经问过什么时候从urlcache的内存和磁盘中删除了什么?
现在我还有一些后续问题:
内存缓存受iPhone的内存(通常为2Gb)限制.但磁盘持久性受到64Gb或128Gb的限制.那是对的吗?
持久性比内存存储更有意义吗?如果您不想拥有较高的内存占用(并且不希望应用程序从其挂起状态终止),即允许从磁盘存储中恢复缓存然后返回持久结果,它是否有用?
控制点击后,URLCache.shared我看到以下评论:
- 内存容量:4兆字节(4*1024*1024字节)
- 磁盘容量:20兆字节(20*1024*1024字节)
- 磁盘路径:
(user home directory)/Library/Caches/(application bundle id)没有特殊缓存要求或约束的用户应该可以找到可接受的默认共享缓存实例.如果此默认共享缓存实例不可接受,
+setSharedURLCache:则可以调用NSURLCache此实例以设置从此方法返回的其他实例.调用者应该注意确保在没有其他调用者具有对先前设置的共享URL缓存的引用时调用setter.这是为了防止存储缓存数据变得意外无法恢复.
所以我认为我的理由是正确的.
读取/写入/恢复缓存的整个过程如何工作?
我的意思是当我第一次发出网络请求时,整个响应/错误/数据是否被写入 /存储在缓存中然后进入持久性?
下次如果我想读取它然后它首先从缓存开始然后如果响应不是陈旧/过期然后它将返回它.磁盘存储没有任何改变.
如果它已过期,那么它将发出新请求,并且只有在获得成功响应后,它才会清除内存和磁盘的响应,并将新响应写入缓存和磁盘.如果新请求失败,那么它将不会被清除,而是只保留过期/过期数据,所以如果我们想要(加载过期响应)它将从那里加载?
当应用程序终止时,内存将被刷新.除非设备内存不足或已达到大小限制,否则磁盘存储将保持不变.在下次启动应用程序时,内存会将磁盘存储中的任何内容重新加载到缓存中.
此缓存恢复将开始加载已存储的最新数据,然后移动到较旧的数据,直到它达到其大小限制或仅到达存储在磁盘上的项目的末尾.对?
我问这一切是因为我想改善应用程序中的缓存体验并提高我的整体理解,所以我不会过多地增加应用程序的内存使用量*因此它不会从内存中刷新内存暂停状态由于我的应用程序高内存使用或其他需要的应用程序.
*:我们的一些网络请求将下载缩略图,因此当我增加缓存大小限制时,我需要考虑周到.
我正在编写一个脚本,div在激活指向它的缩略图之前等待内容加载到隐藏中.
Run Code Online (Sandbox Code Playgroud)$('#preload img:first-child') .bind('load',activateThumb) .each(function(){ if(this.complete || this.complete===undefined) $(this).load()});
该each部件触发load()缓存中图像的事件.我必须添加它才能使页面在某些浏览器中工作,而这些浏览器不会触发load()缓存的图像.
这里还有一个插件本质上做同样的事情,通过触发加载事件而不是"手动"但通过重置src属性.
从编程的角度来看,这是更优雅的解决方案吗?
我一直在尝试从https://github.com/kean/Nuke尝试用于图像缓存的Nuke框架,在整个文档中,我无法弄清楚如何从缓存(磁盘和内存)中删除图像,我可以找到缓存类“ removeAll”中的一种方法,用于从缓存中删除图像,但是我有两个问题:
在尝试之前,我没有尝试过要检查文档的任何内容,所以投反对票是因为我没有附加代码是不合理的。
我正在使用FastImage缓存图像,并且在按预期缓存数据后加载图像的速度非常快。但是我的服务器每次都为相同的图像生成新的 uri(s3 预签名 url)。
因此,FastImage 将其视为新图像并尝试每次下载,这会影响我的应用程序性能。
我的问题是,有没有什么乐观的方法可以在不缓存的情况下尽可能快地渲染图像?
我正在使用Internet Explorer 的WebDevHelper工具栏来解决我的SSL站点上的HTTP请求/往返问题,并注意到IE重新下载我的CSS:每次触发时悬停图像.这导致了大量的往返.
我怎样才能防止这种情况发生?
编辑: 所有静态内容都使用缓存控制:public,因此图像,javascript等在Firefox和Chrome中缓存.这个问题是IE特有的.
这个问题是我之前提出的问题答案的结果.
我被要求使用Eclipse MAT来调查吃掉堆的东西.以下是我的观察(热门消费者):
class sun.awt.SunToolkit 333.7 MB
com.tennisearth.service.impl.CacheManagerServiceImpl 136 MB
org.apache.jasper.servlet.JspServlet 91.5 MB
Run Code Online (Sandbox Code Playgroud)
我已经解决了这个问题CacheManageServiceImpl,但需要帮助SunToolkit.
下面是创建Image对象的代码(内部使用SunToolkit.imgCache)
Image img = new ImageIcon(imagePath).getImage();
int imageWidth = img.getWidth(null);
int imageHeight = img.getHeight(null);
Run Code Online (Sandbox Code Playgroud)
Plz注意,仅创建Image对象以获取图像的宽度/高度,稍后在某些逻辑中需要该宽度/高度.
有没有办法禁用SunToolkit图像缓存?更好的是,有没有办法清除这个缓存?或者有更好的方法可以检索这些信息吗?
BTW供您参考,我使用下面的命令来运行jboss(请注意堆大小参数):
java -Dprogram.name=run.sh -server -Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m -verbose:gc -Xloggc:/data1/logs/jboss/GC.log -XX:+HeapDumpOnOutOfMemoryError -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dorg.apache.catalina.STRICT_SERVLET_COMPLIANCE=false -Djava.net.preferIPv4Stack=true -Djava.library.path=/usr/local/java/jboss-4.2.2.GA/bin/native -Djava.endorsed.dirs=/usr/local/java/jboss-4.2.2.GA/lib/endorsed -classpath /usr/local/java/jboss-4.2.2.GA/bin/run.jar:/usr/local/java/jdk1.6.0_06/lib/tools.jar org.jboss.Main -c default -b <IP_ADDRESS> -Djboss.messaging.ServerPeerID=1
Run Code Online (Sandbox Code Playgroud)
萨米特
image-caching ×10
ios ×4
caching ×3
image ×3
jquery ×2
swift ×2
amazon-s3 ×1
android ×1
css ×1
ipad ×1
iphone ×1
java ×1
javascript ×1
kingfisher ×1
memory ×1
nsurlcache ×1
react-native ×1
ssl ×1
uiimage ×1