Производительность повторных вызовов геттера против сохранения значения в локальной переменной

<!DOCTYPE html>
<html lang="zh-Hans">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta content="telephone=no" name="format-detection" />
    <title>QRcode</title>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript" src="jquery.qrcode.min.js"></script>
</head>

<body>
    <div id="qrDiv" style="display: none;"></div>
    <div id="imagQrDiv"></div>
    <script>
        $("#qrDiv").qrcode({
            width: 120, //宽度 
            height: 120, //高度 
            text: "111" //任意内容 
        });
    </script>
    <script>
        //从 canvas 提取图片 image
        function convertCanvasToImage(canvas) {
            //新Image对象,可以理解为DOM
            var image = new Image();
            // canvas.toDataURL 返回的是一串Base64编码的URL,当然,浏览器自己肯定支持
            // 指定格式 PNG
            image.src = canvas.toDataURL("image/png");
            return image;
        }
        //获取网页中的canvas对象
        var mycanvas1 = document.getElementsByTagName('canvas')[0];
        //将转换后的img标签插入到html中
        var img = convertCanvasToImage(mycanvas1);
        $('#imagQrDiv').append(img); //imagQrDiv表示你要插入的容器id
    </script>
</body>

</html>

0
задан Ray Zhang 19 January 2019 в 16:06
поделиться

2 ответа

Компилятор может быть достаточно умен, чтобы оптимизировать вариант A во что-то похожее на вариант B, так что здесь я предполагаю, что компилятор не оптимизирует.

Вариант A включает в себя множество вызовов в getText и множество обращений к полю text. Опция B вызывает getText один раз и обращается к переменной text много раз. Следовательно, опция A займет больше времени, поскольку вызов метода происходит не сразу. Метод должен быть добавлен в стек вызовов, а когда он вернется, извлечется из стека.

Но имеет ли значение эта разница в скорости ? Вы должны проверить сами, используя профилировщик. В случае сомнений используйте профилировщик. Если это на самом деле не вызывает узких мест в производительности, то переход с варианта A на B не поможет.

Если у вас сейчас даже нет проблем с производительностью, перестаньте беспокоиться об этом. Подождите, пока не увидите, что ваш код работает медленно, а затем проверьте с помощью профилировщика.

0
ответ дан Sweeper 19 January 2019 в 16:06
поделиться

В этой ситуации я готов предложить вам продумать все углы здесь,

Вариант A - это прямой вызов функции getText() при выполнении System.out.println(), некоторые говорят, что это Это плохая практика при написании так много строк, если вам не нужно для простой задачи. некоторые говорят, что он быстро останавливает линию и делает что-то еще, а затем возвращается сюда.

С другой стороны, вариант B - он создает новую переменную в памяти и сохраняет данные, которые почти потребляют время и память, но когда вы печатаете данные, это происходит очень быстро.

Я не могу сказать, что хорошо работает, в то время как у людей разные предпочтительные сценарии на разных уровнях задач.

Вместо этого я могу помочь вам с некоторой информацией, которая поможет вам в будущем: Некоторые концепции загрузки данных

Я надеюсь, что это поможет.

0
ответ дан Fahim Uddin 19 January 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: