javascript - 如何让javascript在Galaxy S3上流畅运行?

标签 javascript jquery html performance galaxy

我有一个 javascript 游戏,有 15 个移动的 div。它在我的台式机和 iPhone 上运行顺利,但当我在 Galaxy S3 上测试它时,它看起来非常不稳定。奇怪的是,它在两种设备上都以 60 FPS 的速度运行。如何使其在 Galaxy S3 上流畅?就好像它正在运行代码以每秒更改 div 的“左侧”60 次,但它并不总是明显地做到这一点。

我尝试过将transform3d添加到div中,但这只会让情况变得更糟。

http://curtastic.com/test5.html

<html>
    <head>
        <meta name="viewport" content="width=device-width" />
    </head>
    <body style='margin:0;width:640px;'>
        <div id=fps></div>
        <style>
            .block {
                -webkit-transform: translate3d(0, 0, 0);
                -webkit-backface-visibility: hidden;
                -webkit-perspective: 1000;
            }
        </style>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script>
            var blocks = [];
            var angle=0;

            var fpsFrames = 0;
            var fpsTime = 0;

            function gameLoop() {
                var now = new Date();
                fpsFrames++;
                if (now - fpsTime >= 1000) {
                    $('#fps').html("FPS: "+fpsFrames);
                    fpsFrames = 0;
                    fpsTime = now;
                }

                var block;
                for(var i in blocks) {
                    block = blocks[i];
                    block.x += 3;
                    if (block.x >= $(window).width()-50) {
                        block.x = 0;
                    }
                    block.canvas.css('left', block.x);
                    block.canvas.css('top', block.y);
                }
            }

            $(document).ready(function() {
                var block;
                for(var i=0; i<15; i++) {
                    $("body").append("<div id=block"+i+" style='position:absolute;width:33px;height:33px;background:green' class=block></div>")
                    block = [];
                    block.canvas = $('#block'+i);
                    block.x = Math.random()*($(window).width()-50);
                    block.y = Math.random()*($(window).height()-50);
                    blocks[i] = block;
                }

                window.requestAnimFrame = (function(){
                  return  window.requestAnimationFrame       ||
                          window.webkitRequestAnimationFrame ||
                          window.mozRequestAnimationFrame    ||
                          function( callback ){
                            window.setTimeout(callback, 1000 / 60);
                          };
                })();


                (function animloop() {
                    requestAnimFrame(animloop);
                    gameLoop();
                })();

            });

        </script>
    </body>
</html>

最佳答案

使用 css 过渡而不是 js 来移动物体。 CSS 过渡是 GPU 优化的,而 js 则是全部 CPU 优化的。我可以推荐 http://rekapi.com/作为一个 api。

关于javascript - 如何让javascript在Galaxy S3上流畅运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245184/

相关文章:

java - 从弹出窗口刷新主窗口

javascript - 通过其父类使用 JavaScript 获取子输入的值

jquery - 允许使用 jquery 重叠元素

javascript - Meteor.Error 正文不能超过 3000 个字符

javascript - 如何在 Stripe webhook 中获取产品 ID

jquery - 在移动设备上单击向上/向下滑动 div,并在桌面上以模态视图查看相同的 div

javascript - jQuery 脚本仅适用于产品目录上的一个按钮

javascript - 如何将事件附加到新创建的对象

javascript - 如何在另一个匿名函数中扩展函数?

javascript - Mongoose 错误 : Operation 'featureds.find()` buffering timed out after 10000ms