Javascript.RU

Эвристическое переименование свойств

Где-то посередине между продвинутым и обычным сжатием находится эвристическое переименование.

При его использовании Google Closure Compiler переименует все свойства объекта и прототипа, кроме тех, которые начинаются с _подчеркивания.

Эти свойства оптимизатор считает публичными (да-да, не приватными а публичными) и не переименует вообще.

Например, объявим класс Animal. Он будет состоять из конструктора и методов в прототипе.

/** @constructor */
function Animal() { }
Animal.prototype = {
  speed: 10,
   
  calculateDistance: function(time, speed) {
    return time*speed;
  },
  
  _setSpeed: function(speed) {
    this.speed = speed
  },  
  
  _run: function(time) {     
     alert(this.calculateDistance(time, this.speed))
  }
}

После обычной оптимизации:

function Animal() {
}
Animal.prototype = {speed:10, calculateDistance:function(a, b) {
  return a * b
}, _setSpeed:function(a) {
  this.speed = a
}, _run:function(a) {
  alert(this.calculateDistance(a, this.speed))
}};

После оптимизации с эвристическим переименованием:

function Animal() {
}
Animal.prototype = {a:10, b:function(a, b) {
  return a * b
}, _setSpeed:function(a) {
  this.a = a
}, _run:function(a) {
  alert(this.b(a, this.a))
}};

Как видите, все свойства, кроме _setSpeed, _run были переименованы.

При этом компилятор учел, что speed переименовано в a и также переименовал this.speed в this.a.

Оптимизация касается прототипов и объектов в литеральной нотации {prop: 'val', ...}.

Для определения, какие свойства экспортируемые, а какие нет, Closure Compiler использует класс GoogleCodingConvention, метод isExported которого можно поменять на удобный вам. Например, наоборот сделать экспортируемыми методы без подчеркивания.

Переименованием занимается класс RenamePrototypes, логика методов canRenamePrototypeProperty и canRenameObjLitProperty также в вашем распоряжении.

Чтобы включить эвристическое переименование, можно создать соответствующий флаг.

Этот флаг включен в сборку MyCompiler под именем property_renaming_policy:

--property_renaming_policy=AGGRESSIVE_HEURISTIC

Есть также значение HEURISTIC, но в нем вообще мало смысла, даже рассматривать нет резона.

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

То есть, по возрастающей идут:

  • Простая оптимизация - сжимаются локальные свойства.
  • Эвристическое переименование (при простой оптимизации) - дополнительно сжимаются все свойства, кроме начинающихся с подчеркивания.
  • Продвинутая оптимизация - сжимается все.

Возможно, эвристическое переименование было промежуточным этапом в разработке компилятора, до продвинутой оптимизации.

Мне было интересно разобраться в этом режиме, но сложно придумать ему применение. Если вам придет в голову что-то дельное - напишите


Автор: vlad0 (не зарегистрирован), дата: 13 января, 2010 - 12:56
#permalink

попробовал я --property_renaming_policy=AGGRESSIVE_HEURISTIC
на моем проекте вываливается с ошибкой "ERROR - Rename prototypes and inline variables cannot be used together"

в сорцах нашел упоминание
if (isInliningForbidden()) {
// In old renaming schemes, inlining a variable can change whether
// or not a property is renamed. This is bad, and those old renaming
// schemes need to die.
return new ErrorPass(compiler, CANNOT_USE_PROTOTYPE_AND_VAR);


Автор: Илья Кантор, дата: 13 января, 2010 - 16:12
#permalink

Видимо вы врубили одновременно ADVANCED оптимизацию.


Автор: Гость (не зарегистрирован), дата: 7 мая, 2010 - 12:11
#permalink

Подтверждаю - если при компиляции указаны опции AGGRESSIVE_HEURISTIC или HEURISTIC - не работает и вываливается с той же ошибкой.
ERROR - Rename prototypes and inline variables cannot be used together

--compilation_level SIMPLE_OPTIMIZATIONS

В режиме же

--compilation_level WHITESPACE_ONLY

просто ничего не делается.


Автор: Гость (не зарегистрирован), дата: 7 мая, 2010 - 12:21
#permalink

Закомментировал вызовы isInliningForbidden - все равно ничего не происходит. Опция совершенно мёртвенькая.


Автор: Zenitchik, дата: 15 июля, 2013 - 12:45
#permalink

В какой версии это ещё работало?


Автор: Durring (не зарегистрирован), дата: 22 июня, 2020 - 11:54
#permalink

что speed переименовано в a и также переименовал this.speed в this.a. cookie clicker


Автор: tiny fishing (не зарегистрирован), дата: 1 марта, 2021 - 13:09
#permalink

Wonderful post. This post is one of the best posts according to my point of view. Your work is so good and impressive. Thanks for it tiny fishing


Автор: justicehwrknz807, дата: 10 января, 2022 - 10:29
#permalink

There is a certain unity to this work that I really appreciate. Please keep creating this amazing content. Commercial Concrete Contractors Tampa


Автор: bolukat (не зарегистрирован), дата: 24 января, 2022 - 09:29
#permalink

Thank you very much for sharing your knowledge and information; it has greatly aided me in my job and personal life. run 3


Автор: steven sanders (не зарегистрирован), дата: 15 апреля, 2022 - 06:03
#permalink

On mobile devices, the site performs very well. If you find it difficult to copy a ringtone from your computer and then transfer it to your phone, you can use Dzwoneknatelefon on your phone to do it for you. After inputting the song name or sound type in the search box, you will see a list of ringtones sorted by category or popularity. Select the tone that appeals to you and click Download. Simply open the ringtone that you wish to download, select the option "Save to Phone" and then choose a unique name for it. The downloaded ringtone will be on your phone and the following steps will be simple. Please keep note of the folder where you saved the ringtone.


Автор: antiguans2000, дата: 30 июня, 2022 - 17:21
#permalink

This is interesting! We should try this one. www.backpay.biz/phoenix, drywall repair


Автор: Jason Hawker (не зарегистрирован), дата: 18 июля, 2022 - 13:33
#permalink

The Suonerietelefono is the perfect way to add a personal touch to your mobile phone. With over 200 free ringtones to choose from, you can find the perfect one for any situation. Whether you're looking for something fun and energetic for a night out, or something more subdued for work or school, there's a Suonerietelefono ringtone for you. And best of all, they're all free to download. So what are you waiting for? Find your perfect ringtone today with Suonerietelefono!


Автор: antiguans2000, дата: 2 сентября, 2022 - 09:33
#permalink

Thank you for sharing this helpful info. We can use this in radon mitigation dayton ohio work.


Автор: Ruiz Angelina (не зарегистрирован), дата: 17 сентября, 2022 - 13:24
#permalink

KlingeltoneMp3 is the best place to find free MP3 ringtones. With a huge selection of ringtones divided into different categories, you're sure to find your favorite in minutes. Whether you're looking for Android, Iphone, Marimba Remix, Samsung, Tiktok, Holiday, Electronica, Classic, Message Tones, Sound Effects, Uncategorized, Whatsapp, HipHop, Funny, Pop, Synthetic or Entertainment ringtones, KlingeltoneMp3 has you covered.


Автор: Winifred Beck (не зарегистрирован), дата: 23 сентября, 2022 - 04:49
#permalink

traditional arcade a new version of snake io is released for playing special online live events. In this well-liked mobile version of the cherished arcade game, slither to the top of the leaderboard!


Автор: 바카라사이트 (не зарегистрирован), дата: 23 сентября, 2022 - 04:58
#permalink

Your writing is perfect and complete. 바카라사이트 However, I think it will be more wonderful if your post includes additional topics that I am thinking of. I have a lot of posts on my site similar to your topic. Would you like to visit once?


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
5 + 3 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum