Информация об изменениях

Сообщение Re[3]: JS. Откуда такая разница в скорости? от 09.06.2024 19:24

Изменено 09.06.2024 19:26 Pauel

Re[3]: JS. Откуда такая разница в скорости?
Здравствуйте, Codealot, Вы писали:

P>>Подозреваю. все что в гобальном скопе, вообще полностью исполняется интерпретатором


C>Зачем? И как это проверить точно?


Оборачиваете в функцию, и всё, второй блок внезапно ускоряется

class BaseClass
        {
            constructor()
            {
                this.Value = BaseClass.Counter++;
            }

            TestMethod()
            {
                return this.Value;
            }

            static Counter = 0;
        }

        var func = function()
        {
            var sum = 0;
            for (var i = 0; i < 100_000_000; i++)
            {
                var obj = new BaseClass();
                var val = obj.TestMethod();
                sum += val;
            }
            console.log(sum);
        };

        {
            var watch = performance.now();

            func();
            
            var time = performance.now() - watch;
            console.log(`1: ${time}`);
        }

        BaseClass.Counter = 0;

        (function x() {
            var watch = performance.now();

            var sum = 0;
            for (var i = 0; i < 100_000_000; i++)
            {
                var obj = new BaseClass();
                var val = obj.TestMethod();
                sum += val;
            }
            console.log(sum);

            var time = performance.now() - watch;
            console.log(`1: ${time}`);
        }) ();
Re[3]: JS. Откуда такая разница в скорости?
Здравствуйте, Codealot, Вы писали:

P>>Подозреваю. все что в гобальном скопе, вообще полностью исполняется интерпретатором


C>Зачем? И как это проверить точно?


Оборачиваете в функцию, и всё, второй блок внезапно ускоряется

Оборачиваем только второй блок
class BaseClass
        {
            constructor()
            {
                this.Value = BaseClass.Counter++;
            }

            TestMethod()
            {
                return this.Value;
            }

            static Counter = 0;
        }

        var func = function()
        {
            var sum = 0;
            for (var i = 0; i < 100_000_000; i++)
            {
                var obj = new BaseClass();
                var val = obj.TestMethod();
                sum += val;
            }
            console.log(sum);
        };

        {
            var watch = performance.now();

            func();
            
            var time = performance.now() - watch;
            console.log(`1: ${time}`);
        }

        BaseClass.Counter = 0;

        (function x() {
            var watch = performance.now();

            var sum = 0;
            for (var i = 0; i < 100_000_000; i++)
            {
                var obj = new BaseClass();
                var val = obj.TestMethod();
                sum += val;
            }
            console.log(sum);

            var time = performance.now() - watch;
            console.log(`1: ${time}`);
        }) ();


Оборачиваем всё, тот же эффект
(function x() {class BaseClass
        {
            constructor()
            {
                this.Value = BaseClass.Counter++;
            }

            TestMethod()
            {
                return this.Value;
            }

            static Counter = 0;
        }

        var func = function()
        {
            var sum = 0;
            for (var i = 0; i < 100_000_000; i++)
            {
                var obj = new BaseClass();
                var val = obj.TestMethod();
                sum += val;
            }
            console.log(sum);
        };

        {
            var watch = performance.now();

            func();
            
            var time = performance.now() - watch;
            console.log(`1: ${time}`);
        }

        BaseClass.Counter = 0;

        
            var watch = performance.now();

            var sum = 0;
            for (var i = 0; i < 100_000_000; i++)
            {
                var obj = new BaseClass();
                var val = obj.TestMethod();
                sum += val;
            }
            console.log(sum);

            var time = performance.now() - watch;
            console.log(`1: ${time}`);
        }) ();