我已删除禁用缓存标记,并且仍会在每次视频循环迭代时发出请求(仅限Chrome)。
Chrome检查员网络部分中Initiator: Other
的含义是什么?第一次从主机加载视频,但之后所有请求都从Other
加载。
每个迭代视频大小都相同,而不是(来自缓存)。这是否意味着浏览器每次都下载它?
如果没有在localStorage中保存视频,我可以以某种方式避免它(我在类似的问题中看到它),因为这个解决方案不能在私有浏览器模式下工作,localStorage有大小限制吗?
更新
更新
错误报告:https://bugs.chromium.org/p/chromium/issues/detail?id=680063
答案 0 :(得分:1)
这意味着另一个流程而不是Chrome initiated the request:
某些其他进程或操作已启动请求,例如用户 通过链接导航到页面,或在地址中输入URL 杆
对于Chrome,video is decoded using ffmpeg可能是此其他进程。该过程很可能从缓存重新打开文件,这就是启动请求的原因,或者,如果文件很大并且必须重新流,缓存只保留文件的后一部分(或者总和的最大内容长度)部分内容重复 - 但是,您声明当禁用缓存时,这不会发生。
localStorage
的大小非常有限,不太适合存储视频数据(它只能保存字符串,所以视频必须编码为mime-64,大小增加33%+每个字符占用两个字节由于unicode)。
更好的选择是使用IndexedDB - 这可以容纳更大的数据,并以二进制格式(Blob)存储数据。但它带有localStorage
的初始限制,但与后一种方法相反,您可以请求更大的尺寸,用户需要确认。我没有测试过,但我认为你会遇到私有模式和其他存储机制一样的限制。
答案 1 :(得分:0)
昨天我遇到了同样的问题。我发现几分钟后Chrome的标签崩溃了。它看起来只有在选中 execute(query).mapTo[Vector[((A, Option[B]), Option[C])]]
.flatMap { insideFuture =>
insideFuture.groupBy(_._1._1).mapValues { values =>
//scala groupBy losts ordering
val orderedB = values.groupBy(_._1._2).toSeq.sortBy(_._1.map(_.id)).toMap
orderedB.mapValues(_.map(_._2))
}.headOption match {
case Some(data) => Future.successful {
data._1.copy(bList = data._2.map {
case (Some(bElement), optionCElements) =>
bElement.copy(cList = optionCElements.toList.flatten)
case _ =>
throw new Exception("Invalid query result. Unable to find B elements")
}.toList)
}
case None => Future.failed(new Exception("Unable to find A with next id " + incomigAId))
}
}
}
时才会发生,但如果仍然存在问题,您可以将视频存储到本地存储中。更多代码in this answer。