我的电子书由setTimeout
驱动动画。 (我在使用时使用requestAnimationFrame
,而不是在运行iOS 5的旧版iPad上使用它)。本书由大约100个单独的XHTML文件组成,以确保分页符恰好发生在应有的位置,这在iBooks中是一个不确定的命题。
在打开书之后,动画非常缓慢(例如每步一秒,而不是50毫秒),但是在将书打开一段时间后(一分钟左右?),动画以预期的速度奔跑。
我找到的原因:iBooks显然是预装了书中的所有页面(我想是为了获取页码,或加快翻页)。预加载似乎干扰了我的动画 - 窃取setTimeout
插槽,就像它一样。
我原本以为问题可能是在加载时为每个文档设置动画所需的时间,但是对它们进行了计时,发现每页只有几毫秒。问题可能是在100多个页面中的每个页面上都有一个半大的脚本(100K),我想iBooks会在预加载每个页面时反复解析。
我已经考虑过在查看每个页面时动态包含大脚本的选项,但是我们一直在想办法告诉它是什么时候这样做的。我们在Safari中没有PageVisibility API,并且focus
事件不会在初始页面加载时触发,因此如何判断页面实际被查看的时间,而不是iBooks在后台隐藏预先加载?
我的下一步尝试是将单个XHTML页面的数量减少到1或者几个,并利用我page-break-*
及其同类的机会来处理分页。
我需要的是一种方法(1)告诉iBooks 不预先加载书中的其他页面或(2)给我的setTimeout
请求优先级< / strong>超过iBooks为预加载页面排队的那些或(3)知道何时显示页面,所以我可以在那个时间点注入脚本。
另请参阅epub 3, how to prevent pages from running in background ? (iBooks / Readium)和FInding out when page is being viewed in EPUB FXL via Javascript。