resource目录文件过大导致Swift Playground 反应慢
swift语言发布时,苹果为之提供了Playground工具。
有了Playground工具,测试API什么的不用开一个项目。iOS 模式可以模拟大部分手机环境,不用启动手机,确实方便了很多。
最近写了一段处理视频文件的例子。
发现Playground 反应很慢。每次输入内容时都会时时分析代码。导致电脑反应很慢,基本没法使用。
有没有屏蔽自动解析的开关。
电脑刚升级了10.11, Xcode刚升级了7.3。以为是操作系统导致Playground变慢,遂作罢。
昨天运行了苹果的Exploring San Francisco例子,发现修改时速度有了不少提升。
而打开以前的例子,发现编辑时反应仍然很慢。
怀疑是项目的独有问题。
测试项目的一个特点就是资源文件里面,导入了几个视频文件,有上百M大小。
把视频文件移动到共享目录下面。
Playground共享目录位置: “~/Documents/Shared Playground Data”
把读取资源的方式从
1 | let videoUrl = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("test", ofType: "mp4")) |
修改为:
1 | let videoUrl = XCPlaygroundSharedDataDirectoryURL.URLByAppendingPathComponent("test.mp4") |
这样做了以后,果然Playground反应速度正常了。
猜测原因:
- Playground编译代码时会像安装手机应用一样拷贝资源。
- Playground编译代码时每次会分析资源文件。
关于Playground的一点知识总结。
Playground像一个模拟的开发项目。resource目录资源会拷贝到虚拟运行环境。
以下是一个运行时sandbox目录例子:
1
2
file:///var/folders/xs/lyvcj45d7d913dnc_b_2_n7h0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.SwiftDemo-CC8C8EED-BC7C-4848-8D2A-08AEEA660B2C/sandbox 目录下又一个Documents目录,和手机开发时目录类似
Documents目录下又一个“Documents/Shared Playground Data”目录,该目录link到“~/Documents/Shared Playground Data”。
所以“~/Documents/Shared Playground Data”目录的文件对所有的Playground实例都是可见的。
- 测试涉及到异步执行的代码时,为了等待异步任务执行完毕,需要设置Playground为持续执行状态。
1 | //设置永久执行标志 |
- 显示UIViewController实例的View内容
1 | XCPlaygroundPage.currentPage.liveView = vc.view |
- 任何的改动,都会导致Playground重新编译执行。重新编译执行会导致正在执行的进程终止。如果测试的例子会产生临时文件,记得经常清理,免得造成空间的浪费。创建视频、压缩文件都会产生临时文件。