Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPad/Phonegap DHTML游戏的JavaScript速度优化?_Javascript_Safari_Cordova - Fatal编程技术网

iPad/Phonegap DHTML游戏的JavaScript速度优化?

iPad/Phonegap DHTML游戏的JavaScript速度优化?,javascript,safari,cordova,Javascript,Safari,Cordova,我正在使用Phonegap为iPad创建一个游戏,这意味着我在iPad的Safari中使用JavaScript/CSS/HTML。基本上,我在1024x768分辨率上移动了很多img元素(有时会更改它们的src),只是没有任何网络连接的本地文件。在桌面Safari上,一切都很顺利,但在iPad上,我的setInterval感觉延迟和闪烁。你有什么速度优化的建议我可以试试吗?谢谢 PS:我知道切换到iOS的原生Objective-C可能会快得多,但我真的很想用标准的JS/HTML/CSS试试。你遇

我正在使用Phonegap为iPad创建一个游戏,这意味着我在iPad的Safari中使用JavaScript/CSS/HTML。基本上,我在1024x768分辨率上移动了很多img元素(有时会更改它们的src),只是没有任何网络连接的本地文件。在桌面Safari上,一切都很顺利,但在iPad上,我的setInterval感觉延迟和闪烁。你有什么速度优化的建议我可以试试吗?谢谢


PS:我知道切换到iOS的原生Objective-C可能会快得多,但我真的很想用标准的JS/HTML/CSS试试。

你遇到了一个最常见的浏览器脚本问题,即动画网页

应用程序速度减慢的原因是浏览器是单线程环境。一旦你忘了你会有麻烦的

setInterval
使您相信您的操作将像在多线程环境中一样并行进行。但是真正发生的是
setInterval
将操作推送到UI堆栈,以便稍后处理。但是,如果一次有太多的东西进入这个堆栈,一些操作就会滞后。
setInterval
将继续推动新动作,但旧动作仍将存在,整个渲染过程将变得缓慢混乱

至于何时发生,则取决于硬件/软件能力。很明显,iPad的马力比台式PC低得多

为避免滞后而可以做的事情

  • 以平滑度换取速度:提高间隔之间的延迟,以避免UI堆栈中的累积操作

  • setTimeout:此选项与
    setInterval
    非常类似,只是它不确保重复之间有给定的间隔,而是关注浏览器在重复操作之前应该等待多长时间。因此,为了使其更像
    setInterval
    ,您可能需要跟踪操作之间经过的时间,并计算必须注意的更改的度量

  • 组动画:您可以为一些相关动画设置一个间隔(您可以为它们管理一个小队列),因此您可以减少实际的setInterval调用,并获得更多控制比赛条件的能力

  • 还要确保阅读这篇文章:


    (script.aculo.us的创建者Thomas Fuchs)

    您在动画网页中遇到了最常见的浏览器脚本问题之一

    应用程序速度减慢的原因是浏览器是单线程环境。一旦你忘了你会有麻烦的

    setInterval
    使您相信您的操作将像在多线程环境中一样并行进行。但是真正发生的是
    setInterval
    将操作推送到UI堆栈,以便稍后处理。但是,如果一次有太多的东西进入这个堆栈,一些操作就会滞后。
    setInterval
    将继续推动新动作,但旧动作仍将存在,整个渲染过程将变得缓慢混乱

    至于何时发生,则取决于硬件/软件能力。很明显,iPad的马力比台式PC低得多

    为避免滞后而可以做的事情

  • 以平滑度换取速度:提高间隔之间的延迟,以避免UI堆栈中的累积操作

  • setTimeout:此选项与
    setInterval
    非常类似,只是它不确保重复之间有给定的间隔,而是关注浏览器在重复操作之前应该等待多长时间。因此,为了使其更像
    setInterval
    ,您可能需要跟踪操作之间经过的时间,并计算必须注意的更改的度量

  • 组动画:您可以为一些相关动画设置一个间隔(您可以为它们管理一个小队列),因此您可以减少实际的setInterval调用,并获得更多控制比赛条件的能力

  • 还要确保阅读这篇文章:


    (script.aculo.us的创建者托马斯·福斯)

    使用使用GPU加速的CSS3动画。。。这将对任何动画产生巨大影响

    使用使用GPU加速的CSS3动画。。。这将对任何动画产生巨大影响

    您是否尝试过,而不是更改“src”引用,将图像(如果可能)组合成单个大图像,然后使用CSS在视口中定位图像?是的,CSS精灵通常更适合HTML游戏。不过,不要担心iPad。我不认为它们会成为问题,因为它们是本地文件。好吧@galambalazs,我无论如何都会尝试一下,因为布局引擎可以更轻松地重新定位已经解压缩的图像文件,而不是打开和解压缩完全不同的图像。我不认为是这样的原因是因为OP说:“我正在移动很多img元素(有时更改它们的src)”。因此,变化可能不是这里的问题。我宁愿说setInterval无法处理操作的数量。看我的答案。你有没有尝试过,而不是改变“src”引用,将图像(如果可能)组合成一个大图像,然后使用CSS在视口中定位图像?是的,CSS精灵通常更适合HTML游戏。不过,不要谈论iPad。我不认为它们会成为问题,因为它们是本地文件。不管怎样@galambalazs我都会尝试,因为布局引擎可以更轻松地重新定位图像文件,因为它已经解压缩了