Печально. То, что в США принято считать нормальным обслуживанием (support), для нас выглядит как чудо.
Есть куда расти и есть чему учиться «нам» у «них».
Кстати, шустрый ответ в 3 часа ночи по времени США — вполне нормальное явление.
По той причине, что борльшинство хостеров аутсорсят саппорт в Индию, и разговаривали вы, скорее всего, с индусом.
спасибо за развёрнутый ответ.
вообще, на селекторах свет клином не сошёлся. по собственному опыту скажу, что в большом проекте использую CSS селекторы (на яваскрипте) всего в 2-3 местах, из 100К+ кода.
самое важное — конечное приложение, а детали реализации не имеют значения.
т.е. сначало лучше сделать что-то полезное, а когда этим начнут пользоваться реально, тогда уже заботиться об оптимизации.
Суть задачи: есть N элементов, надо отфильтровать, оставив уникальные.
Если, по вашему, не расширять DOM элементы новыми атрибутами, и учесть, что не у всех элементов есть идентификатор, то задача решается в O(n^2)
Я это имел ввиду.
Могу предложить оптимизацию на уровне «Уникальность элементов».
for (child in children) {
if (children[child].yeasss != uid) {
if (last) {
children[child].yeasss = uid;
}
newNodes = children[child];
}
}
Пояснения:
uid — обычный счётчик, увеличивается на 1 при обработке нового селектора.
В данном случае сброс флага ".yeasss" не понадобится, что уменьшает количество обращений к DOM-дереву, и, в конечном итоге, увеличивает производительность.
При рабзработке серъёзных приложений приходится использовать QA, например, юнит-тестирование или аудит кода.
Поэтому проблемы возникать не должны при правильном подходе.
А всяческие языковые «вкусности» помогают рарабатывать быстрее.
Каждый язык программирования имеет свою нишу применения. А те, что потеряли свою нишу, тихо умирают.
Использовал похожий загрузчик в одном из разработанных проектов (1й метод из приведённых).
Страничка логина появлялась на экране сразу, что позволяло вводить username/password, пока грузятся компоненты (JS и CSS файлы).
Загрузка происходила за несколько секунд (подключались тяжеловесные компоненты: ExtJS, Google Maps, etc), этого времени как раз хватало, чтобы ввести пароль.
Результат подобного подхода налицо — мгновенная доступность сервиса для пользователя.
Время загрузки первой HTML странички минимально. Можно интегрировать стили в неё же (так делает Google, например).
Всё же, для большинства проектов подобный подход сродни «из пушки по воробьям».
Достаточно корректно прописать правила .htaccess (заголовок Expires), чтобы браузер закэшировал скрипты после первой загрузки.
Вывод: метод замечательный, но используем там, где необходимо (руководствуемся здравым смыслом).
Давно ждал Firebug для IE.
Но, с первого взгляда на скриншоты видно, что накосячили.
Например, посмотрите на HTML закладку Developer Tools. В правой панели наследуемые стили CSS, причём, как видно из скриншота, в порядке наследования DOM — сначала тэг body, далее div, видимо, где-то в хвосте искомый select.
Порядок следования просто необходимо изменить на обратный. Иначе придётся скроллить каждый раз.
Из таких мелочей складывается впечатление о продукте. Чтобы им (Developer Tools) удобно было пользоваться, необходимо позаботиться о деталях.
К слову, девелоперская консоль в Google Chrome тоже крайне неудобна во многих отношениях.
Firebug до сих пор остаётся незаменимым инструментом в web-разработке, для тех кто занимается этим серьёзно.
Понял, что вы имели ввиду.
Зато можно сделать вот так:
var Request = function(url, method) {
var req = new XMLHttpRequest();
return req;
};
Request.prototype = {
method1: function() {},
method2: function() {}
};
var test = new Request('page.php');
Т.е. кроме того, что расширять стандартный класс своими методами, можно ещё и реализовать множественное наследование.
Заметил ещё одну интересную особьенность конструкторов Яваскрипта, о которой, возможно, не всем известно.
Объект можно наследовать от «стандартных» классов, таких как DOMElement и XMLHttpRequest.
Для этого нужно вернуть из конструктора экземпляр «стандартного» объекта.
Пример 1:
var Element = function(tag, html, className, parent) {
var e = document.createElement(tag || 'div');
e.innerHTML = html;
e.className = className;
(parent || document.body).appendChild(e);
e.customMethod = function() { /*...*/ };
return e;
};
var test = new Element('span', 'Test', 'warning');
Пример 2:
var Request = function(url, method) {
var req = new XMLHttpRequest();
req.open(method || 'GET', url, true);
/* other initialization */
req.customMethod = function() { /*...*/ };
return req;
};
var test = new Request('page.php');
Варианты использования ограничиваются только вашим воображением.
Например, я использую класс (наследник от XMLHttpRequest) который генерирует ошибку по таймауту (т.е. если запрос не был завершён в течение 10 секунд).
Извините, ошибся.
У них просто 5 скриншотов в разных браузерах.
Просто раньше сталкивался с сайтами, где в разделе «Скриншоты», дизайн был обрамлён в рамку браузера, из которого смотришь.
Т.е. если зашёл с Мака, то будешь видеть скрины как бы из под Сафари, и т.д.
Есть куда расти и есть чему учиться «нам» у «них».
Кстати, шустрый ответ в 3 часа ночи по времени США — вполне нормальное явление.
По той причине, что борльшинство хостеров аутсорсят саппорт в Индию, и разговаривали вы, скорее всего, с индусом.
вообще, на селекторах свет клином не сошёлся. по собственному опыту скажу, что в большом проекте использую CSS селекторы (на яваскрипте) всего в 2-3 местах, из 100К+ кода.
самое важное — конечное приложение, а детали реализации не имеют значения.
т.е. сначало лучше сделать что-то полезное, а когда этим начнут пользоваться реально, тогда уже заботиться об оптимизации.
Если, по вашему, не расширять DOM элементы новыми атрибутами, и учесть, что не у всех элементов есть идентификатор, то задача решается в O(n^2)
Я это имел ввиду.
Про «мой фреймворк» и «патчи» не понял.
Добавить к DOM элементу новое свойство считаю небольшим злом.
Если вас беспокоит, что в будущем появится подобный атрибут — не парьтесь, назовите его хитрозаумно.
for (child in children) { if (children[child].yeasss != uid) { if (last) { children[child].yeasss = uid; } newNodes = children[child]; } }Пояснения:
uid — обычный счётчик, увеличивается на 1 при обработке нового селектора.
В данном случае сброс флага ".yeasss" не понадобится, что уменьшает количество обращений к DOM-дереву, и, в конечном итоге, увеличивает производительность.
Поэтому проблемы возникать не должны при правильном подходе.
А всяческие языковые «вкусности» помогают рарабатывать быстрее.
Каждый язык программирования имеет свою нишу применения. А те, что потеряли свою нишу, тихо умирают.
Страничка логина появлялась на экране сразу, что позволяло вводить username/password, пока грузятся компоненты (JS и CSS файлы).
Загрузка происходила за несколько секунд (подключались тяжеловесные компоненты: ExtJS, Google Maps, etc), этого времени как раз хватало, чтобы ввести пароль.
Результат подобного подхода налицо — мгновенная доступность сервиса для пользователя.
Время загрузки первой HTML странички минимально. Можно интегрировать стили в неё же (так делает Google, например).
Всё же, для большинства проектов подобный подход сродни «из пушки по воробьям».
Достаточно корректно прописать правила .htaccess (заголовок Expires), чтобы браузер закэшировал скрипты после первой загрузки.
Вывод: метод замечательный, но используем там, где необходимо (руководствуемся здравым смыслом).
В профиле написано, что он там работает.
До этого видел какой-то непонятный цветочек на белом фоне.
Всё зависит от того, с какой стороны смотришь, вот.
Но, с первого взгляда на скриншоты видно, что накосячили.
Например, посмотрите на HTML закладку Developer Tools. В правой панели наследуемые стили CSS, причём, как видно из скриншота, в порядке наследования DOM — сначала тэг body, далее div, видимо, где-то в хвосте искомый select.
Порядок следования просто необходимо изменить на обратный. Иначе придётся скроллить каждый раз.
Из таких мелочей складывается впечатление о продукте. Чтобы им (Developer Tools) удобно было пользоваться, необходимо позаботиться о деталях.
К слову, девелоперская консоль в Google Chrome тоже крайне неудобна во многих отношениях.
Firebug до сих пор остаётся незаменимым инструментом в web-разработке, для тех кто занимается этим серьёзно.
(пошёл читать документацию и разбираться в своём коде)
Зато можно сделать вот так:
var Request = function(url, method) { var req = new XMLHttpRequest(); return req; }; Request.prototype = { method1: function() {}, method2: function() {} }; var test = new Request('page.php');Т.е. кроме того, что расширять стандартный класс своими методами, можно ещё и реализовать множественное наследование.
var test = new Request('page.php'); test.send(); // вызов метода встроенного класса XMLHttpRequest test.customMethod(); // вызов своего методаБез return в конструкторе наследование от встроенного класса не получится.
Т.е. свойства через прототип добавить можно, а индивидуальные нельзя.
Возможно, это имел ввиду автор статьи
String.prototype.A = 12
test.B = 45
console.log(test.A, test.B)
Объект можно наследовать от «стандартных» классов, таких как DOMElement и XMLHttpRequest.
Для этого нужно вернуть из конструктора экземпляр «стандартного» объекта.
Пример 1:
var Element = function(tag, html, className, parent) { var e = document.createElement(tag || 'div'); e.innerHTML = html; e.className = className; (parent || document.body).appendChild(e); e.customMethod = function() { /*...*/ }; return e; }; var test = new Element('span', 'Test', 'warning');Пример 2:
var Request = function(url, method) { var req = new XMLHttpRequest(); req.open(method || 'GET', url, true); /* other initialization */ req.customMethod = function() { /*...*/ }; return req; }; var test = new Request('page.php');Варианты использования ограничиваются только вашим воображением.
Например, я использую класс (наследник от XMLHttpRequest) который генерирует ошибку по таймауту (т.е. если запрос не был завершён в течение 10 секунд).
У них просто 5 скриншотов в разных браузерах.
Просто раньше сталкивался с сайтами, где в разделе «Скриншоты», дизайн был обрамлён в рамку браузера, из которого смотришь.
Т.е. если зашёл с Мака, то будешь видеть скрины как бы из под Сафари, и т.д.
Т.е. вы пользуетесь Сафари — вам и скриншот с ним, я же увидел в обрамлении Файерфокс.
Мне кажется это модная тенденция — уже не на первом сайте вижу.