Проблемы с производительностью на Samsung Smart TV - PullRequest
0 голосов
/ 16 октября 2018

В настоящее время я разрабатываю веб-приложение в Samsung Smart TV IDE, я тестировал его на эмуляторе IDE, и оно отлично работает.Но когда я пробую это на реальном телевизоре (модель: UE32H4500AW), производительность сильно замедляется, требуется много времени для обработки входных событий, когда нужно перевести огромное количество простых делений.Вот код, где он замедляется:

    <!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Test</title>
        <script type="text/javascript" src="$MANAGER_WIDGET/Common/API/Widget.js"></script>
        <script type="text/javascript" src="$MANAGER_WIDGET/Common/API/TVKeyValue.js"></script>
        <script type="text/javascript" src="$MANAGER_WIDGET/Common/API/Plugin.js"></script>
        <style type="text/css">
            *{
                padding: 0;
                margin: 0;
                border: 0;
                color: white;
                background: black;
            }
             body{
                overflow: hidden;
             }
             #wrapper {
                 position: relative;
                width: 70vw;
                height: 70vw;
                overflow: hidden;
             }
             #EPG-channel-wrapper {
                vertical-align: top;
                width: 20%;
                box-sizing: border-box;
                display: inline-block;
            }           
            .EPG-channel {
                height: 50px;
                width: auto;
                padding: 15px;
                border: 2px solid white;
                white-space: nowrap;
                overflow: hidden;
                vertical-align: top;
                text-overflow: ellipsis;
            }
            .EPG-channel-title-wrapper {
                display: inline-block;
                vertical-align: top;
            }
            .EPG-channel-title {
                vertical-align: top;
            }
            #EPG-program-wrapper {
                vertical-align: top;
                display: inline-block;
                position: relative;
                width: 75%;
                left: 3%;
                box-sizing: border-box;
                overflow-x: hidden;
            }
            .EPG-channel-programs {
                height: 84px;
                box-sizing: border-box;
                border: 2px solid yellow
            }
            .EPG-program {
                border: 2px solid cyan;
                height: 100%;
                width: 30%;
                box-sizing: border-box; 
                display: inline-block;
            }
            .EPG-program-context {
                display: inline-block;
            }
        </style>
        <script type="text/javascript">
            var widgetAPI = new Common.API.Widget();
            var tvKey = new Common.API.TVKeyValue();
            var Main = {};
            Main.onLoad = function()
            {
                // Enable key event processing
                document.onkeydown = Main.keyDown(event);
                widgetAPI.sendReadyEvent();
                Main.loadDivs();
            };
            Main.loadDivs = function() {
                var addChannels = [];
                var addPrograms = [];
                var width = 0;
                for(var i = 0; i< 140; i++){
                    addChannels[addChannels.length] = "<div class='EPG-channel'>";
                    addChannels[addChannels.length] = "<img alt='' src='' class='EPG-channel-img'>";
                    addChannels[addChannels.length] = "<div class='EPG-channel-title-wrapper'><div class='EPG-channel-title'>Test " + i +" </div></div></div>";
                    addPrograms[addPrograms.length] = "<div class='EPG-channel-programs'>";
                    for( var j = 0; j< 100; j++){
                        width = 200;
                        addPrograms[addPrograms.length] = "<div class='EPG-program' style='width:"+width+"px'>";
                        addPrograms[addPrograms.length] = "<div class='EPG-program-title'>Test program "+ i + " - " + j + " </div>";
                        addPrograms[addPrograms.length] = "<div class='EPG-program-duration'>00.00 - 00.00</div></div>";
                    };
                    addPrograms[addPrograms.length] = "</div>";
                };
                document.getElementById("EPG-channel-wrapper").innerHTML = addChannels.join('');
                document.getElementById("EPG-program-wrapper").innerHTML = addPrograms.join('');
            };
            Main.translate = 0;
            Main.keyDown = function(event)
            {
                var keyCode = event.keyCode;

                switch(keyCode)
                {
                    case tvKey.KEY_LEFT:
                        var elements = document.getElementsByClassName("EPG-program");
                        for (var i = 0; i < elements.length; i++){
                            elements[i].style.display = "";
                        }
                        break;
                    case tvKey.KEY_RIGHT:
                        var elements = document.getElementsByClassName("EPG-program");
                        for (var i = 0; i < elements.length; i++){
                            elements[i].style.display = "none";
                        }
                        break;
                    case tvKey.KEY_UP:
                        var translate = --Main.translate * document.getElementsByClassName("EPG-channel")[0].offsetHeight;
                        document.getElementById("EPG-channel-wrapper").style["-webkit-transform"] = "translate(0, -"+translate+"px)";
                        document.getElementById("EPG-program-wrapper").style["-webkit-transform"] = "translate(0, -"+translate+"px)";
                        break;
                    case tvKey.KEY_DOWN:
                        var translate = ++Main.translate * document.getElementsByClassName("EPG-channel")[0].offsetHeight;
                        document.getElementById("EPG-channel-wrapper").style["-webkit-transform"] = "translate(0, -"+translate+"px)";
                        document.getElementById("EPG-program-wrapper").style["-webkit-transform"] = "translate(0, -"+translate+"px)";
                        break;
                    default:
                        break;
                }
            };
        </script>
    </head>

    <body onkeydown="Main.keyDown(event)" onload="Main.onLoad();">
        <div id="wrapper">
            <div id="EPG-channel-wrapper"></div>
            <div id="EPG-program-wrapper"></div>
        </div>
    </body>
</html>

Когда нажата правая клавиша, она скрывает все программы и производительность работает нормально.

Есть ли утечка памяти, которую я мог бы пропустить илиДругой способ перевести это количество divs более эффективно?Заранее спасибо!

...