Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Collection v4 (https://javascript.ru/forum/project/44796-collection-v4.html)

kobezzza 03.02.2014 20:30

Цитата:

Сообщение от cyber (Сообщение 295641)
где можно по читать как это замутить?)

100 раз кидал уже эту ссылку: https://developers.google.com/closur...s-for-compiler

(это официальная дока closure compiler)

cyber 03.02.2014 20:59

kobezzza, а почему не используешь объект для передачи параметров?

kobezzza 03.02.2014 21:18

Цитата:

Сообщение от cyber (Сообщение 295671)
kobezzza, а почему не используешь объект для передачи параметров?

Перечитай приведённые мною примеры и доку:
https://github.com/kobezzza/Collecti...%D 0%BE%D0%B2

Цитата:

Приставка opt_ означает, что параметр является опциональным (соглашение о написание кода на JavaScript от Google). Параметр opt_filter (или просто filter) во всех итераторах может быть представлен как объект входных параметров, т.е.:
{
    filter,
    id,
    mult,
    count,
    from,
    startIndex,
    endIndex,
    reverse,
    inverseFilter,
    notOwn,
    live,
    useForIn,
    vars,
    context
}


т.е. использую.

Для внутренних вызовов юзается вызов с перечислением параметров, т.к. это работает быстрее, а для конечного использования конечно можно использовать объекты-параметры, если нужно.

melky 03.02.2014 23:36

Цитата:

Сообщение от kobezzza
Ещё один слой оптимизации - это оптимизация и сжатие либы в GCC Adv Mode Хз что он там колдует, но после сжатия всё реально шустрее работает

только замучаешься warning'и фиксить

Plovr тоже ничё так :)

cyber 04.02.2014 00:31

kobezzza, не могу понять как сделать что класс не переименовывало, пробывал ставить @constructor но не помогает
(function () {
  /**
  @constructor - пробывал так
 */
  function constr() {// сохранить имя constr

  }

  window.Constr = constr
}())


Цитата:

Сообщение от melky
только замучаешься warning'и фиксить

да ладно, все го то по 1й ошибки на каждые 10 строк кода:)

kobezzza 04.02.2014 09:41

Цитата:

Сообщение от cyber (Сообщение 295704)
kobezzza, не могу понять как сделать что класс не переименовывало, пробывал ставить @constructor но не помогает
(function () {
  /**
  @constructor - пробывал так
 */
  function constr() {// сохранить имя constr

  }

  window.Constr = constr
}())

Ну @constructor тут не причём.

Во первых: http://javascript.ru/optimize/google...d-optimization

Во вторых: @expose
https://developers.google.com/closur...s-for-compiler

Ну и в третьих просто глянул бы, как сделано у меня:
https://github.com/kobezzza/Collecti.../core/core.jsn

(this.Collection; и this.$C; - это для поддержки автокомплита в WebStorm)

kobezzza 04.02.2014 09:43

Цитата:

Сообщение от melky (Сообщение 295693)
только замучаешься warning'и фиксить

Я в своё время оч заморочился, что сейчас пишу без проблем под GCC, ну а ваще да - это гемор:)

melky 04.02.2014 11:19

Цитата:

Сообщение от kobezzza
Во вторых: @expose

нини.

вот как у тебя, так и надо. (про строковые имена):
global['Collection']

kobezzza 04.02.2014 11:23

Цитата:

Сообщение от melky (Сообщение 295754)
нини.

Почему? Я юзаю @expose для экспорта внешних (публичных) методов либы, т.к. не надо писать убогий ['...'] (код в первую очередь должен хорошо читаться), тем более многие публичные методы юзаются внутри и я не хочу думать о том: "забыл ли я экранировать название".

Либа жмётся и нужные методы внешние, а все "издержки" 100% закрываются gzip, т.е. нет никакой разницы. Если я жму либу вместе с проектом, то пред сжатием я дополнительно вырезаю @expose (replace(/@expose/gm, '') в скрипте сборки) и всё (или написать файл экстерн, но это даст хуже сжатие).

А вот если я юзаю экспорт как ['...'], то при сжатии с проектом уже без файла экстерна не обойтись, и сжатие будет хуже.

***

Если я пишу ['...'] то это означает что всегда-всегда это свойство должно быть с таким именем.

Вот пример: https://github.com/kobezzza/Collecti...rs.storage.jsn

Свойство Collection.Drivers.Storage должно быть доступно при использовании либы как "внешнего скрипта", но при сжатии вместе с проектом должно сжиматься, поэтому я юзаю @expose.

А свойства 'indexedDB', 'localStorage' и т.д. должны быть такими всегда, поэтому я экспортирую их в кавычках.

Например: global['Collection'] сделан так не спроста, т.к. Collection фигурирует в генерируемых скриптах в рантайме, т.е. всегда должны быть именно таким.

Разумеется я читал:

Цитата:

@expose should never be used in library code, because it will prevent that property from ever getting removed.
Но это просто напоминание: мол думайте, что делаете и всё.

melky 04.02.2014 11:57

kobezzza,



Генерирует, по-моему, такой код:

goog.exportProperty( %OBJECT% , "%PROP_NAME%", %PROP_VAL%);


Исходник:

/**
 * Exports a property unobfuscated into the object's namespace.
 * ex. goog.exportProperty(Foo, 'staticFunction', Foo.staticFunction);
 * ex. goog.exportProperty(Foo.prototype, 'myMethod', Foo.prototype.myMethod);
 * @param {Object} object Object whose static property is being exported.
 * @param {string} publicName Unobfuscated name to export.
 * @param {*} symbol Object the name should point to.
 */
goog.exportProperty = function(object, publicName, symbol) {
  object[publicName] = symbol;
};


Использование:


/** @export */
MYOBJ.MYPROP = 'FOO'



Цитата:

Сообщение от kobezzza
А свойства 'indexedDB', 'localStorage' и т.д. должны быть такими всегда, поэтому я экспортирую их в кавычках.

они, вроде, прописаны в экстернах и включены в компилер.


Часовой пояс GMT +3, время: 08:07.