Tag: 缓存

编译速度提高60%:强制Xcode在Bitrise上使用缓存!

让我们迈出新一步,使Xcode的构建速度提高60%! 🏎 Xcode在派生数据文件夹(〜/ Library / Developer / Xcode / DerivedData)中存储和使用所有与构建相关的缓存文件和杂项数据,除非您运行导出命令。 但是缓存此路径并不是我们唯一要做的事情,因为Xcode缓存取决于项目结构及其所有属性,例如文件修改时间,内容等。 当您在Bitrise上克隆存储库以进行构建时,所有文件的修改时间都将设置为当前时间(git clone的时间),因此,即使大多数文件都已被修改 ,所有新构建的所有文件都将被视为已更改 。内容在构建之间完全没有变化。 为了避免更改文件修改时间,我们创建了一个名为“ 递归缓存缓存” 的新步骤 。 它有2个输入: 目录的路径(默认情况下:“ $ BITRISE_SOURCE_DIR”) 时间(默认为:“ 2017–09–01T15:00:00 + 00:00”)输入字段 此步骤将在给定目录下设置所有文件修改时间,因此在您随后开始的构建中,文件的修改时间将相同。 如果要使用适当的Xcode缓存,则必须设置两个步骤: 递归缓存缓存步骤-保留两次构建之间的项目文件修改时间。 这应该在您的Xcode单元测试步骤之前进行 Cache:Pull,Cache:Push —缓存派生的数据路径(将以下路径同时放入Cache:Push步骤的缓存路径,并忽略路径输入:〜/ Library / Developer / Xcode / DerivedData)。 您如何确认缓存是否按预期工作? 缓存之前,日志如下所示: 如果缓存正在工作,它将是这样的: === BUILD TARGET ios-simple-objc OF PROJECT ios-simple-objc WITH CONFIGURATION Debug === Check […]

HanekeSwift iOS

简介 : iOS中有很多图像缓存库,很多库都是用Objective-C编写的,但是HenekeSwift是用swift编写的,非常易于缓存,它为UIImage,NSData,JSON,字符串或可以作为数据读取或写入的任何其他类型。 特点: 通用缓存,具有对UIImage,NSData,JSON和String的开箱即用支持 使用NSCache的一级内存缓存 使用文件系统的二级LRU磁盘缓存 从网络或磁盘异步获取原始值 所有磁盘访问均在后台执行 线程安全 根据内存警告或磁盘容量自动将缓存逐出 全面的单元测试 通过定义自定义格式,支持其他类型或实现自定义提取程序可扩展 对于图像: 零配置UIImageView和UIButton扩展以使用缓存,针对UITableView和UICollectionView单元重用进行了优化 调整背景图片的大小和解压缩 图片: 特别是Haneke擅长处理图像。 它包括一个具有自动调整大小的零配置图像缓存。 一切都在后台完成,从而实现快速响应的滚动。 您可以加载,调整大小,在共享缓存中缓存并显示来自url的适当大小的图像是: imageView.hnk_setImageFromURL //设置远程图像 您可以使用键手动设置图像。需要提供键。 imageView.hnk_setImage(图像,键:键) 上面的行照顾: 1)如果图像url或图像缓存在内存中,它将基于图像内容模式或此任务在后台执行的图像视图范围检索图像 2)如果未缓存图像,则从Web或源获取原始图像并根据imageview大小生成图像。从共享NSURLCache检索的远程图像(如果有)。 3)缓存结果图像 4)如果磁盘已满或其他任何问题,它将清除缓存中最近最少使用的图像 您还可以使用imageCache instance设置图像 。 例如 , 让imageCache = Shared.imageCache imageCache.set(值:UIImage(名称:“您在此处输入图像字符串”),键:“ image”) 使用获取图像 imageCache.fetch(key:“ image”)。onSuccess {(image)in //在这里设置图片 } .onFailure {(错误) //如果图片不可用则报错 } NSData: 您可以使用dataCache实例设置和获取NSData。 例如, 创建NSData缓存 let […]

实验:iOS网络缓存

现在一段时间以来,我一直在进行网络架构方面的实验。 我已经按照自己的喜好构建了一个,它提供了灵活性和可读性。 我缺少的第一步是持久层。 具有强大的持久层,随后对同一网络资源的调用可以依赖于存储的数据,而不是浪费数据和时间。 对我们来说幸运的是,如果您使用URLSession则默认配置已使用NSURLRequestUseProtocolCachePolicy 。 它是这样的: 如果没有存储响应,它将从网络中获取内容。 如果存储了一个响应并且它是有效的,它将使用该响应。 如果存在已存储的响应并且该响应无效,它将从网络获取以使用并也会更新已存储的响应。 除了存在一个问题外,它还很整洁:并非所有服务器都能正常运行并提供cache header 。 没有它,它将不会存储在缓存中。 我们还有另一种情况,其中存在高速缓存头,但表示为: no-cache 。 在大多数情况下,我们应该尊重所提供的缓存控制标头,因为服务器应该知道最适合它们所提供的内容。 我遇到了Hacker News Top Stories Endpoint的no-cache标头,这很有意义,因为它是根据投票不断变化的新闻列表。 这就是该帖子被称为“ 实验”的原因。 虽然可以使用,但我不建议在生产应用中使用它。 有更好的缓存数据的方法,但是如果您急于需要快速的默认缓存,则可以选择这种方法。 在本实验中,我使用了https://hacker-news.firebaseio.com/v0/topstories.json端点。 单个请求: 我试图对同一网络资源执行多个请求: 然后使用缓存头修改获取相同的资源100次:

开源故事:从缓存中的可缓存到通用存储

目录 快取 可携带 异步 JSON格式 Swift 4中的可编码 责任链 什么是TypeWrapper? StorageAware协议 同步与异步 但是图像不符合Codable 解决 怎么样? 数据可转换怎么样? 数据生产者呢? 通用存储 转换类型 存储感知 变压器 转换功能 从这往哪儿走 我们从事开源已有一段时间了,您可能已经在GitHub上遇到了我们的一些工作或阅读了一些故事。 我们并没有尝试重新发明轮子,但是有许多我们需要专门用于工作流的组件,或者需要针对正在构建的应用程序进行自定义的组件。 因此,我们构建了许多框架和应用程序。 当我们在生产应用程序中使用它们时,我们认为与世界分享它们可能是一个好主意。 这是双赢的局面,因为我们回馈了社区,同时获得了很多反馈和建议。 作为一个小型的iOS团队,全职进行客户项目,同时尝试腾出一些空闲时间来从事开源工作是非常具有挑战性的。 开源就是建立抽象。 通过分离职责并创建可重用的框架,我们可以充分了解Swift的知识,并掌握有关正在使用的API的一些精妙的细节。 但是我们从未告诉过我们如何做事。 因此,将会有一系列我们的开源故事,详细介绍我们工作背后的技术方面,只要有开源经验即可。 首先,让我们谈谈缓存,一种持久化对象的框架。 在这里,我们将学习如何开发API以支持Swift语言和iOS,tvOS平台的新功能,同时确保它们足够灵活和可维护。 缓存并没有声称在该区域是唯一的,但是它并不是另一个为您提供神力的怪物库。 除了缓存,它什么也没做,但它做得很好。 它提供了良好的公共API,具有现成的实现方式和巨大的自定义可能性 在iOS平台上可以有许多用于缓存的解决方案,例如SQLite,CoreData或Realm或其他第三库。 我们想要从Cache中获得的是一种简单的方法,可以将一些JSON数据存储到磁盘,到期管理和我们熟悉的API。 从用户的角度来看,我想使用键可靠地保存和加载对象,并具有同步或异步执行此操作的能力。 这是我们旨在实现的API。 在第一个版本中,由于对象应该被序列化并反序列化为用于磁盘存储的Data ,因此我们引入了Cachable协议。 我们还使大多数原始类型都符合Cachable,因此用户不必自己执行此操作。 对于内存存储,我们在NSCache使用NSCache ,因此对象将按原样保存。 缓存基于具有前缓存和后缓存的概念。 对前端缓存的请求应减少时间和内存消耗(此处默认使用NSCache )。 正面和背面缓存之间的区别在于,背面缓存用于超出应用程序生命周期的内容。 看到它更像是一种方便的方法,用于存储应在应用程序启动期间持续存在的用户信息。 磁盘缓存是这里最可靠的选择 HybridCache具有具有Cachable类型约束的泛型函数,因此对于所有Cachable一致性它都是类型安全的 甚至对于自定义类型和UIImage 异步 […]

SwiftBits:缓存图像

我将开始一系列简短的文章,在这些文章中我分享一小段代码。 这些将是简短的读物,并将重点放在一个主要思想上。 在本系列的第一篇文章中,我们将着眼于通过使用缓存更有效地在应用程序中加载图像。 URLCache类通过将NSURLRequest对象映射到CachedURLResponse对象来实现对URL加载请求的响应的缓存。 它提供了内存中和磁盘上缓存的组合,并允许您操纵内存和磁盘上部分的大小。 UrlCache使我们能够缓存对URL请求的响应。 我们可以使用此缓存来存储所有响应数据。 它不限于图像。 对于本文,我们仅将其用于图像。 创建一个名为UIImageView + Cache.swift的文件。 然后创建UIImageView的扩展,并添加以下代码。 首先,我们根据传递给函数的字符串创建URL。 如果URL无法实例化,我们将返回并且不执行任何进一步的操作。 我们从共享URLCache创建缓存。 这是适用于大多数使用情况的默认缓存。 接下来,我们从URL创建一个URLRequest 。 我们利用userInitiated队列来完成工作。 这样做是为了在加载图像时,我们不会阻塞主线程,也不会阻塞应用程序UI。 首先,我们检查我们要请求的图像是否已经在缓存中。 如果它在缓存中,则显示图像。 我们将在下一节中讨论过渡功能的实现。 当在缓存中找不到图像时,我们继续使用URLSession对该图像进行请求 。 我们检查是否有数据和响应。 在执行任何工作之前,我们还确认响应是成功的响应。 最后,我们根据响应和数据创建cachedData并将其存储到缓存中。 然后调用过渡 。 在我们上面为UIImageView创建的扩展内部,添加以下函数。 请注意,在上面调用该函数时,该函数始终位于主线程上。 在这里,我们创建了一个辅助函数,该函数将交叉溶解转换应用于UIImageView。 这将使图像以平滑的动画显示而不是仅仅显示。 这样的小事情可以改善用户体验,并使您的应用脱颖而出。 希望您喜欢这篇文章,并从中受益匪浅。 😊 进一步阅读: URLCache –基础| Apple开发人员文档 该类按原样使用,但是如果有特殊需要,可以将其子类化。 例如,您可能想要… developer.apple.com NSURLCache NSURLCache为应用程序的URL请求提供了一种组合的内存中和磁盘上缓存机制。 作为一部分… nshipster.com GCD 101:async()–一个免费的Swift黑客教程 通过这些免费教程学习iOS的Swift编码 www.hackingwithswift.com 源代码: