Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация долларовой либы за счет prototype 
:(
    Опции темы
DenVdmj
Дата 9.11.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Один из минусов любой долларовой библиотеки -- это создание лишнего объекта на каждый юзаемый в коде нод. В браузерах поддерживающих prototype для Node мы могли бы просто расширить поведение html-элементов, но поскольку в мсие они растут их com-объектов, этот способ как-бы отпадает. Старая идея имитировать prototype через behavior: url(HTMLElement.htc) страдает непреодолимым недостатком -- чрезвычайно медленной работой на большом DOM.
Способ, который хочу обсудить, имеет целью убрать создание лишнего объекта за счет расширения prototype в w3c браузерах, (но создания еще одной лишней функции-обертки в мсие). Собственно сама идея:

Код

(function () {

    var doc = document,
        css = doc.styleSheets,
        win = window,
        etc;

    var BucksObject = function (node) {
        // унифицированное свойство node для доступа к ноду
        this.node = node.constructor === String ? doc.getElementById(node) : node;
    },

    bucksPrototype = {
        method : code,
        etc
    };
    if(window.Node && Node.prototype) {

        // расширение Node для стандартных браузеров

        window.$ = function (node) {
            if( node.constructor === String ) {
                node = doc.getElementById(node)
            };
            // унифицированное свойство node для доступа к ноду
            node.node = node;
            return node;
        };

        expand(Node.prototype, bucksPrototype); // копирует только отсутствующие свойства

    } else {

        // создание объекта-обертки для браузеров без Node.prototype

        window.$ = function (argument) {
            return argument instanceof BucksObject ?
                argument :
                new BucksObject(argument)
        };

        // создать обертки для всех методов
        for (var name in bucksPrototype) {
            bucksPrototype[name] = (function(method){ return function () {
                return method.apply(this.node, arguments)
            }})(bucksPrototype[name]);
        };

        BucksObject.prototype = bucksPrototype;
    };
})()

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.