powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / насколько eval медленнее чем обычное выполнение сценария js
12 сообщений из 12, страница 1 из 1
насколько eval медленнее чем обычное выполнение сценария js
    #38523296
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

В ходе разработки столкнулся с тем, что не могу обойтись без функции eval (или могу и просто не знаю как? Надо для выполнения динамически загружаемого кода).

Так вот, преимущественно код модулей будет выполняться через eval. Теоретически, на сколько медленнее будет работать такой код (может кто измерял разницу когда-то, или может это от чего-то зависит)?

Заранее спасибо.
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38523319
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

eval сначала парсит код, потом этот код исполняется как обычный.
ну а парсинг такой же, как если бы ты подключил код как <script>

ещё момент - eval(codeStr) выполняет код внутри локального контекста (код будет видеть локальные переменные функции), а (0,eval)(codeStr) - в глобальном. выбирай сам, что более подходит в твоем случае.
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38523331
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

О... круть. Спасибо :)
В моём случае получается разницы нету, дописывать в script или просто эвалом выполнять (по 1 eval на каждый файл).

А насчёт глобального контекста, я сначала стягиваю файл, выполняю его в контексте лоадера (через eval), а когда подходит очередь к исполнению кода файла, выполняю главную функцию данного скрипта в контексте window (через call). Задумка просто добавить удобную модульность проектам.
Всё ради такого "синтаксиса" модулей:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
//файл /application.js
include('module1/myFile.js');
include('module2/anotherFile.js');
include('module3/script.js');

function implementation(){
  // тут сама реализация модуля
}


//файл /module1/myFile.js
include('helper.js') //загрузка файла /module1/helper.js

function implementation(){
  // тут сама реализация вспомогательного функционала
}



Ну то есть хочу сделать (точнее уже сделал, пока ответа ждал) удобную подгрузку include'ов с правильным порядком выполнения кода (в данном случае application.js, myFile.js, helper.js, anotherFile.js, script.js) + асинхронность загрузки (на случай если с каким-то файлом затор случится например).


Пока только не могу побороть проблему удобной отладки. Там trace ошибки немного засоряется (что не приятно), а код, исполняемый через eval в случае возникновения ошибки не может быть отслежен (то есть в консоле нету указания на файл и строку, в которых возникла ошибка, только на названия функций).
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38523846
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрТеоретически, на сколько медленнее будет работать такой код (может кто измерял разницу когда-то, или может это от чего-то зависит)?
Для сравнения используй ресурсы проверки производительности. Например этот
http://jspeed.yanzigitov.ru/

Код: javascript
1.
var val=eval('1+2');


Результат (больше - лучше): ≈ 1 667 340 выполнений/1000 мс

Код: javascript
1.
var val=1+2;


Результат (больше - лучше): ≈ 3 732 822 выполнений/1000 мс
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38523971
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗадумка просто добавить удобную модульность проектам.Со стороны выглядит как способ накидать граблей на ровную полянку =)

Евалить в JS это плохой тон
HTML работает с DOM т.е. хорошим тоном является создание нового узла через .createElement(’script’) желательно в header
На страницу(html приложение) приятно смотреть когда скрипты и стили подключаются в header
а в теле страницы только разметка и текст все разложено по своим полочкам и там где оно должно лежать
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38523978
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин Сергей На страницу(html приложение) приятно смотреть когда скрипты и стили подключаются в header
а в теле страницы только разметка и текст все разложено по своим полочкам и там где оно должно лежатьЭто несущественно, изнанками сайтов любуются лишь специалисты по изнанкам.
Главное style в body не лепить, сафари этого не понимает :)
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38523985
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр, а Вы RequireJS смотрели? Зачем свой лисапед изобретать?
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38524089
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин СергейавторЗадумка просто добавить удобную модульность проектам.Со стороны выглядит как способ накидать граблей на ровную полянку =)

Евалить в JS это плохой тон
HTML работает с DOM т.е. хорошим тоном является создание нового узла через .createElement(’script’) желательно в header
На страницу(html приложение) приятно смотреть когда скрипты и стили подключаются в header
а в теле страницы только разметка и текст все разложено по своим полочкам и там где оно должно лежать

Хорошим тоном считается отделение логики от разметки :) потому "а в теле страницы только разметка и текст" у меня полностью соблюдается, так как код js изначально вынесен в отдельный файл, который грузится как главный модуль приложения.
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38524102
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyГлавное style в body не лепить, сафари этого не понимает :)

Какой сафари? Часто об этом слышал, но вживую никогда не видел, пришло время восполнить пробел.
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38524177
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПрограмёр, а Вы RequireJS смотрели? Зачем свой лисапед изобретать?

Нет. Только что посмотрел. Он работает по аналогии с include_once в php? Просто не совсем понимаю.

и, по поводу самого стиля... мне удобнее так:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
include('configs.js', true); //аналог include_once
include('myfile1.js');
include('myfile2.js');
include('myfile3.js');

implementation(){
  //код
}



чем так:
Код: javascript
1.
2.
require(["configs", "myfile1", "myfile2", "myfile3"], function(configs, myfile1, myfile2, myfile3) {
});



На любителя разумеется.
А вообще, это всего лишь одна из задумок, которая уже реализована, так что не особо понимаю в чём лисапедность :)
Тем более, что делается то не какой-то гигант... кода то фигня:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
/*****************************************
 * Реализация include начало             *
 *****************************************/
function Loader(){
  // this._ - создание функции с автовалидацией переданных аргументов
  this._(['String', ['Loader', null]], function init(path, parent){
    this.ext(TObject, []);
    this.parent = parent || null;
    this.includes = [];
    var pathElement = path.split('/');
    pathElement.pop();
    this.fileName = path;
    this.path = pathElement.join('/')+'/';
    this.waitFinish = false;
  });
  
  this._(['String', ['Boolean', false]], function include(path, once){
    var el = new Loader(this.path+path, this);
    el.once = once;
    this.includes.push(el);
    (function(el){
      window.loadFile(el.fileName, function(src){
        var hash = src.hashCode(); //функция hashCode определена немного ранее. Аналог хэша в java
        if (!el.once || typeof(window.__loader.hash[hash])==='undefined'){
          window.__loader.hash[hash] = 1;
          el.evaluate(src);
        }
        if(el.includes.length==0){
          el.waitFinish = true;
          if(el.parent!=null)
            el.parent.tryFinish();
        }
      });
    })(el);
  });
  
  this._([], function tryFinish(){
    if(this.includes[0].waitFinish==true){
      if(this.includes[0].implementation)
        this.includes[0].implementation.call(window);
      this.includes.shift();
    }
    if(this.includes.length==0){
      this.waitFinish = true;
      if(this.parent!=null)
        this.parent.tryFinish();
    }
  });
  
  this._(['String'], function evaluate(src){
    var include = this.include;
    var __fileName__ = this.fileName;
    eval(src);
    this.implementation=implementation;
  });
  
  this.init.apply(this, arguments);
}

window.__loader = new Loader('');
window.__loader.hash = [];

/*****************************************
 * Реализация include конец              *
 *****************************************/
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38524321
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрХорошим тоном считается отделение логики от разметки :) Кем считается? Заказчиков и пользователей это не волнует, а мнение посторонних значения не имеет.

В исходниках нужно разделять, не буду спорить, а в финальной разметке зачем это должно быть видно? Мало ли каким образом она собирается? Может и eval там к месту.
...
Рейтинг: 0 / 0
насколько eval медленнее чем обычное выполнение сценария js
    #38524324
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
st_stAntonariyГлавное style в body не лепить, сафари этого не понимает :)

Какой сафари? Часто об этом слышал, но вживую никогда не видел, пришло время восполнить пробел.Да вроде любой. Сам тоже не видел, только слышал :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / насколько eval медленнее чем обычное выполнение сценария js
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]