mailru / fest

javascript templates
Other
128 stars 28 forks source link

Микрооптимизация #88

Open monolithed opened 10 years ago

monolithed commented 10 years ago

1.

Добавить враппер:

var global = function (global) {
   return global;
}(this);

2.

Чтобы неймспейс fest не терялся при минификации, нужно заменить:

if (!x.fest) 
     x.fest = {};

x.fest['index'] = function(__fest_context) {
    ...

На:

if (!x['fest']) 
     x['fest'] = {};

x['fest']['index'] = function(__fest_context) {
    ...

3.

file = file.replace(/\'/g, "\\'").replace(/\"/g, '\\"').replace(/\\/g, '\\'); // \', \", \

Мне кажется что так не только лучше, но и правильней:

file = file.replace(/['"\\]/g, '\\$&'); // \', \", \\
RubaXa commented 10 years ago

Саша, всё отлично, присылай pull request.

RubaXa commented 10 years ago

@latrekc, посмотри 1, а то у меня сомнения. @eprev, а ты 3 :]

latrekc commented 10 years ago

@latrekc, посмотри 1, а то у меня сомнения.

s.tugovikov@win49:~/cloud.mail.ru (i18n *)$ node -e 'console.log((function(global) { return global })(this) === global)'
true
s.tugovikov@win49:~/cloud.mail.ru (i18n *)$ 

console.log((function(global) { return global })(this) === window)
true

@eprev, а ты 3 ок, хотя я бы заматчил в скобки

eprev commented 10 years ago

В тред призывается @termi ! Егор, не ты ли нашел в свое время, что в Опере нужно было через Function('return this') получать указатель на window?

RubaXa commented 10 years ago

@eprev , Вроде это был @latrekc

monolithed commented 10 years ago

Все-таки, наверно стоит оставить конструктор Function. Т.к. фиг знает как этот враппер будет использоваться. Я имею ввиду, что гарантировано получение ссылки на глобальный объект возможно только через Function/eval.

void function () {
  'use strict';
  return function (global) {
     return global;
   }(this); // undefined
}();

...

void function () {
  'use strict';
   Function('return this')(); // Window
}();

В принципе, в Function нет ничего плохого, т.к. этот код будет оптимизирован компилятором как и весь остальной (в отличии от eval).

upd: ревертнул получение ссылки старым способом.