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

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

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

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

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

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

О... круть. Спасибо :)
В моём случае получается разницы нету, дописывать в 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
13.01.2014, 08:23
    #38523846
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
насколько eval медленнее чем обычное выполнение сценария js
ПрограмёрТеоретически, на сколько медленнее будет работать такой код (может кто измерял разницу когда-то, или может это от чего-то зависит)?
Для сравнения используй ресурсы проверки производительности. Например этот
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
13.01.2014, 11:14
    #38523971
Малыхин Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
насколько eval медленнее чем обычное выполнение сценария js
авторЗадумка просто добавить удобную модульность проектам.Со стороны выглядит как способ накидать граблей на ровную полянку =)

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

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

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

Какой сафари? Часто об этом слышал, но вживую никогда не видел, пришло время восполнить пробел.
...
Рейтинг: 0 / 0
13.01.2014, 12:51
    #38524177
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
насколько eval медленнее чем обычное выполнение сценария js
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
13.01.2014, 14:01
    #38524321
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
насколько eval медленнее чем обычное выполнение сценария js
ПрограмёрХорошим тоном считается отделение логики от разметки :) Кем считается? Заказчиков и пользователей это не волнует, а мнение посторонних значения не имеет.

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

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


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