Пользователь
0,0
рейтинг
14 марта 2009 в 22:54

Разработка → Fly AJAX — пишите меньше, имейте больше. Нестандартный AJAX и индексация поисковиками.

Ajax*

Обсуждение предыдущей статьи было бурным. Самые ярые любители jQuery, Mootools кричали зачем мол нужен другой велосипед.
В данной статье мы рассмотрим использование техники Fly AJAX. Это одна из нескольких функциональных возможностей, которые не реализованы в ранее указанных больших (и мною уважаемых) фреймворках. Также, в данной статье, мы рассмотрим принципы правильного проектирования и построения сайтов для хорошей индексации с применением AJAX технологии.

«Улётный» AJAX


Технология Fly AJAX — это преобразование «на лету» обычных ссылок в AJAX ссылки. Используя данную технологию, обычную загрузку контента по ссылкам на веб-страницы мы можем легко преобразовать в асинхронную загрузку.

Рассмотрим на примере. Допустим у нас имеется меню сайта

<ul>
  <li><a href="/content/info">Info</a></li>
  <li><a href="/content/download">Download</a></li>
  <li><a href="/content/contact">Contact</a></li>
</ul>
<div id="content-body">Welcome</div>


При обычном подходе, кликая на ссылки меню, мы переходим от одной страницы к другой с полной перезагрузкой.
Применим к данному меню технику Fly AJAX. Одним из вариантов автоматического преобразования обычных ссылок в AJAX ссылки, является использование SRAX.Filter.
SRAX.Filter — как раз и предназначен для «авто-заворачивания», «авто-преобразования» обычных ссылок в AJAX ссылки. Ссылки по заданным критериям отфильтровываются и преобразуются в асинхронные запросы. Рассмотрим пример относительно нашего меню

SRAX.Filter.add({url:'/content/', id:'content-body'})

Все! Теперь кликая на ссылки меню мы переходим от одной страницы к другой асинхронно подгружая контент без полной перезагрузки страниц.

id — определяет ИД элемента, в который необходимо подгрузить контент.
url — определяет часть адреса ссылки, условие фильтрации, по которому проводить отбор ссылок для преобразования.

Список параметров работы SRAX.Filter

  • id — id блока
  • url — ссылка или массив ссылок
  • urlType — 'contain' (по умолчанию) или 'start' или 'end' — соответсвенно содержит, начинается или заканчивается
  • query — строка или массив строк запроса
  • queryType — 'contain' (по умолчанию) или 'start' или 'end' — соответсвенно содержит, начинается или заканчивается
  • join (joinLogic) — логика обьединения url и query — 'or' (по умолчанию) или 'and'
  • changer (urlChanger) — функция изменения обволакиваемой ссылки urlChanger: function(url, owner){return url.replace('index.php', 'mypage.php')}
  • target — true заворачивать ссылки с атрибутом target (_self, _parent, _top, _blank) или false — не заворачивать (по умолчанию)
  • type — если = 'skip', тогда отмена «AJAX заворачивания»; если = 'data', тогда для запроса используется dax, иначе используется hax
  • handler — функция обработки клика, если не указана, тогда используется функция в соответсвии с type
  • + все опции из hax (все опции, которые описывались в предыдущей статье для функции hax)

Важно: адреса следующего типа /content/download?id=1 — для фильтра делятся на две части url=/content/download и query=id=1. Фильтрацию можно проводить по параметрам запроса

SRAX.Filter.add({query:'id=', id:'main-content'})

Также, можно проводить комбинацию условий фильтрации url и query, условие комбинации определяется параметром join.

На нашем сайте имеются примеры разных вариантов фильтрации.

Рекомендую самостоятельно ознакомится с примерами которые используют параметры handler и changer.

Использование ax: атрибутов тегов <a>,<form>,<area>


Вторым способом реализации Fly AJAX является использование ax атрибутов ссылок <a>. Данный подход очень понравился многим разработчикам, которые использую Fullajax в своих проектах. Рассмотрим пример на том же меню
<ul>
  <li><a ax:id="content-body" href="/content/info">Info</a></li>
  <li><a ax:id="content-body" href="/content/download">Download</a></li>
  <li><a ax:id="content-body" href="/content/contact">Contact</a></li>
</ul>
<div id="content-body">Welcome</div>

Все! Опять же, кликая на ссылки меню мы переходим от одной страницы к другой асинхронно подгружая контент без полной перезагрузки страниц.

Подход не стандартный, но оригинальный, так как практически не требует написания ни единой строчки javascript кода. В качестве атрибутов вы можете использовать точно такие же параметры как и для SRAX.Filter, только с префиксом ax: (название префикса по желанию можно настроить).

Одним из сложных моментов при реализации Fly AJAX являлось сохранение функциональности определенных для ссылок событий, т.е. если вы определили событие onclick

<a ax:id='content' href="/mypage" onclick="alert(1)">

произойдет сначала alert, а потом загрузка. Если выполнение onclick вернет false — AJAX запрос не состоится.

Авто-преобразованию подвергаются также теги <form> и <area>.

При желании можно организовать более оптимальную выдачу контента для AJAX запросов. Т.е. отдавать только то, что необходимо заменить на стороне клиента. Определить обычный запрос или AJAX запрос можно проверяя хеадер запроса X-Requested-With=XMLHttpRequest. При наличии такового отдавать меньше. Если нет желания оптимизировать выдачу или нет такой возможности — можно использовать тогда метки блоков контента. Детальнее о данном подходе отдачи контента, который условно называется model2 («один-ко-многим» — один запрос на много блоков), можно ознакомится в отдельном топике на сайте нашего форума. Данный подход детальнее будет рассмотрен в следующих статьях.

AJAX и индексация поисковиками


Исходя из ранее рассмотренного можно легко понять как необходимо строить свои сайты для того чтобы и контент индексировался поисковиками и AJAX работал. Ведь если мы посмотрим на структуру нашего меню, которое приведено в примерах — оно чудесно поддается индексации. А если еще хорошо подумать, то в итоге можно сделать даже большую степень индексации чем при обычном построении. При правильном использовании AJAX позволяет повысить индексацию сайтов!!! Ваууу! И полетели шапки…

Таким образом, техника Fly AJAX позволяет обеспечить нормальную индексацию сайтов поисковиками и при этом использовать AJAX на полую катушку.
В добавок ко всему вы программируете еще «меньше меньшего», а получаете больше.


В следующей статье планируется рассмотреть
  • SRAX.directLink — поддержка прямых AJAX ссылок
  • SRAX.linkEqual — преобразование AJAX ссылок в человеко-понятный вид
Всех благ!!! Спишемся .
sirus @sirus
карма
29,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (207)

  • 0
    Но как обеспечить в меню, чтобы страница не ссылалася сама на себя?
    • –1
      ээ, не понял, а поподробнее расписать то что имеете виду?
    • +4
      Плюньте. Об этом мифе забыл даже его изобретатель А.Лебедев.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      не знаю, я не зарегистрирован там… может люд добрый подскажет
    • 0
      Надеюсь вы не имеете ввиду обычный аякс?!
      • –3
        Нет. Полный.
  • 0
    Занимаюсь чем то подобным в последнее время. Но реализация на jQuery.
    • 0
      да, при желании, такое можно и на jQuery написать
      • +3
        Нет. Только при нежеланиии такое пишут не на отработанных библиотеках, а на самопальных.
        • +1
          jQuery хорош только для быстрого развертывания. Для профессиональной разработки он подходит мало
          • +2
            А можете рассказать, почему?
            • –4
              потому что слишком универсален, как следствие громоздок
            • +13
              да, с удовольствием (уже целую статью надо писать «почему плох jQuery» :). Сразу хочу отметить, что считаю эту библиотеку идеальным выбором для небольших сайтов.

              Итак, почему jQuery плох для профессиональной разработки:
              1. Большой размер файла (сейчас порядка 55Кб в несжатом и 16Кб в сжатом виде) — 70% заявленных возможностей никогда не будут использованы.
              2. «Тяжелая» инициализация самого ядра (100-300мс, это не учитывая дополнительных модулей).
              3. Про UI я вообще молчу — эта махина раза в два тяжелее самого jQuery.
              4. Если нужна какая-то более-менее «продвинутая» функциональность — все равно приходится ее искать либо писать самому — где экономия времени?
              5. Сторонние модули обычно довольно паршивого качества (и хорошо, если не захламляют глобальное пространство имен).
              6. Нет политики зависимостей модулей и динамической их подгрузки — если «собираешь велосипед» из набора модулей, то в head-страницы приходится выстравить целый домик из подключений. А если на разных страницах сайта нужна разная функциональность? Такое решение все равно ручками приходится писать (да, есть мысли по поводу этого для Web Optimizer — сделать авто-загрузку дерева модулей на основе script в head).
              7. Обработка большого DOM-дерева происходит медленнее, чем хотелось бы (из-за обверток и не очень быстрого Sizzle — YASS без кэширования обгоняет его на 40-50%). Слава богу, что с утечками памяти здесь нет особых проблем, как в mootools.

              Ну, и еще пара кастомных пунктов по личным предпочтениям.
              • 0
                Отличная рецензия!
                По поводу пункта №6: очень жду, есть большая проблема в системе — загружается порядка 20-30 js-файлов, что очень сильно тормозит.
                • +1
                  Надо компрессор одного файла использовать.
                  ОЧЕНЬ! помогает.
                  • 0
                    Это да, но когда страничка собирается из яваскрипт-файлов модулей, блоков и проч., читай динамически, то все не запихнуть в один файл…
                    • +1
                      Запихнуть.
                      Это всё на стороне сервера.
                      Даже сжать там можно или упаковать. (на php или as к примеру).

                      Но лучше конечно поменьше файликов)
                      Там после 20 (даже после 15) могут быть конфликты, если много 3rdparty плагов.
                      • 0
                        Ага, то есть я получаю содержимое моих плагинов, библиотек и т.п на стороне сервера. и помещаю в один файл, который и будет подгружаться уже?
                        ОН упаковывается (?), и кладется во временную папку (?) для едино кратного использования (?)
                        • 0
                          Ага. Темповую. Зачастую всё происходит в процессе загрузки с объединением через скрипт либо в движке, либо по .htaccess + пхп модреврайтом.
              • +3
                Простите, но все эти минусы на столько очевидны, что, боюсь, вы не раскрыли глаза даже самым начинающим джикверивцам.

                Загрузка 300 мс — это только для ие6?
                Размер — используйте репозиторий гугла. Картинки все равно больше весить будут.
                Согласен с тем, что UI адски глюковат, сам им не пользуюсь.
                • –5
                  Нет, для страницы например в 60 Кб применение jquery явно необоснованно. А скрипты сильно тормозят загрузку, у меня например как вкладка хабра грузится так Опера подвисает ненадолго.
                  • +4
                    Не понимаю, как связаны хабр, джиквери и подвисания. Разрублю как я этот порочный круг:
                    1) На хабре не используется джиквери, тут mootools.
                    2) Любая страница, когда грузится тормозит оперу и фф, такая уж у них архитектура. Проверить это легко — достаточно загрузить одну и туже страницу с отключенным и включенным JS, и постоянно крутить прокрутку, замечая подвисания. У меня с JS подвисаний было меньше, что можно списать на погрешность эксперимента.
                    3) По моим тестам только ие6 делает eval скомпрессированной версии библиотеки порядка 100мс, все остальные не поддаются измерению.

                    Ну и конечно решать, использовать или не использовать джиквери на конкретном сайте, решать разработчику. Но говорить что ни в коем случае не стоит использовать джиквери негде, потомучто его не стоит использовать на сайтах размером 60 кб — маразм.
                    • 0
                      «Джейквери» тогда уж.
                    • +2
                      Я имел в виду не столько jQuery, сколько вообще «тяжелые» js-библиотеки.

                      Тормозит имеенно Хабр, если на странице много комментов, хотя может это виновата не js, а сложная структура документа. Сейчас запустил фоном загрузку man mplayer размером 1мб — тормозов заметных нет.

                      > По моим тестам только ие6 делает eval скомпрессированной версии библиотеки порядка 100мс

                      Это на быстром компьютере, где все время процессора отдано ИЕ. Чуть условия отличаются о идеальных — тормоза усугубляются.

                      Кроме того, разработчики-инвалиды некоторых сайтов, например на WordPress с кучей плагинов, ставят в head кучу скриптов, и пока эти скрипты не загрузятся, сайт не отображается. Плохо ли это? — Это ужасно. Я хочу чтобы контент появлялся через 1-2 с после клика, а не ждать пока там загрузится 100 Кб скриптов (или придет подтверждение, что они не обновились). Хотя тут опять же больше вина студентов-разработчиков.

                      часто кстати jQuery используется только для того, чтобы отобразить простой эффект, для этого нет необходимости использовать сложную библиотеку, и нет необходимости использовать $('asasa'), там где хватает getElementById().
                • +2
                  не хочу начинать очередной холивар — например, я поставил на webo.in jQuery, развернул за 10 минут и забыл на год.

                  Если мне нужна экстремальная производительность — пользую YASS и производные — и радуюсь жизни
              • +2
                Зачастую непонятен смысл использования ajax на небольших сайтах. А fullajax хороший пример, ничего кроме раздражения у меня этот способ загрузки не вызывает + ещё выскакивает запрос от флеша по поводу сохранения информации локально.

                1. Смотря с чем сравнивать. У нас в проекте, js измеряется в мб, и jquery не выглядит такой большой на фоне, да и кэширование существует, jquery cамо по себе не часто изменяется. Проценты зависят от того что вы используете и есть ещё сам процент использования этих процентов :) Скажем мне, нравится писать конструкции типа $('#block')[allow? 'show': 'hide']();
                2. См. пункт 1
                3. Мне кажется речь идет про jQuery. Это как script.aculo.us приписать к prototype
                4. Экономия в том, что вы пишете логику, а не занимаетесь поиском реализации фишек которые будут работать во всех браузерах (jquery — уже содержит эту работу)
                5. Хз :) Можно и не подключать что попало
                6. 7. да
                • –5
                  по п.4 как раз можно разделять JS-программистов на профессионалов и начинающих. Если профессионалу не нужна поддержка Opera 9.0 в проекте (или даже всей Opera) — он точно знает, какой код ему написать. И он точно знает, в каком браузере и почему он развалится.
                  • 0
                    Пользователям от этого сакрального знания не легче :) А у них такое разнообразие в браузерах, операционных системах и настройках, что просто иногда удивляешься.
                    • –4
                      и? уделять 50% времени на поддержку 1% пользователей? Очень мало проектов, где это коммерчески выгодно
                      • +3
                        У этого 1% пользователей запросто может быть 50% денег которые можете заработать и их поддержка может влиять на продажи продукта/сервиса.
                        Скажем есть такая категория пользователей, которая может обновлять любой установленный софт до бесконечности и это одно из основных их занятий, поиск новинок :) Но денег которые они могут принести вам, у них нет, родители не дали.
                        А вот корпоративные пользователи могут быть очень консервативными, но они готовы платить за поддержку.
                        Как-то так, для меня это реальность.
                        • –4
                          не смешите меня :) 1% пользователями являются обычно те, у кого установлены редкие (или старые) сочетания браузеров / операционок.

                          Деловые люди ставят обычный пакет софта (и новый к тому же) — и используют его. Они в этот 1% не попадают.
                          • +2
                            Рад что хоть кого-то смешу :) У нас >2млн пользователей и >50тыс. бизнес-аккаунтов. Сказать кому-либо из них, что мол знаете, «я профессиональный программист и потому не собираюсь поддерживать [IE|Opera|FF|Safari]» не могу. Во-первых, не считаю себя профессионалом уж таким, а во-вторых меня не поймут.

                            Есть конечно крайние варианты, типа FF 1.0.7 на Tiger :)
                            • 0
                              Не будем мериться пиписьками, я ведь тоже не с потолка цифры беру.

                              1% — он на то и 1%, что денег мало дает. Вот если страница в IE разваливается — сразу по шапке, ибо IE пользуются 50%. А если под Opera — так можно недельку-другую покопаться, посмотреть.

                              Чувствуете разницу?
                      • +5
                        1% пользователей может стоить 50% репутации
                    • +1
                      Поэтому вы часть этих пользователей оставляете за бортом, понадеявшись на нечто чужое большое и сложное, что вам кажется кроссбраузерным.
                      • +1
                        Одно время работал с нами Brandon Goldman (dimensions, live и т.д., один из коре коммиттеров jQuery), так что это не совсем чужое :) Размеры и сложность относительны.
                        «Понадеявшись» и «кажется». Тикеты в которых ошибка происходит по вине jquery, либо прошли мимо меня, либо я о них не помню.
                        • 0
                          А причём здесь тикеты-то?
                          • +1
                            При том, что есть реальный проект с большой пользовательской базой и я получаю тикеты если у них что-то не работает по моей вине. Путь синтетических тестов и сферических коней в вакууме конечно дает цифры которые можно сравнивать, но не факт что они будут относится и к реальной жизни.
                            • 0
                              Понятно, я первоначально подумал, что вы о «родных» тикетах либы, а вы об отсутствии жалоб в свой адрес. Полагаю, отсутствие == кроссбраузерность. Не логично, не проверяемо, не обобщаемо, но с реальной жизнью соотносится, согласен.
              • +1
                sunnybear, jQuery нужен не профессионалам, не «серьезным разработкам», не для «небольших сайтов». jQuery нужен для создания JS-оболочки в помощь разработчику. Нужен для выхода на более абстрактный уровень при написании JS кода.

                Создатели jQuery предлагают вам сосредоточиться на главном вместо того, чтобы громоздить глючноемкость кода в собственных велосипедах, чтобы забыть о разнице обработки js разными броузерами, чтобы не писать постоянно XMLHTTPREQUEST с кучей исключений, что уже написано и перенаписано множество раз другими людьми и вылизано до совершенства.
                • 0
                  да знаю я, что такое jQuery. Знаю и уважаю начинание Resig'а. Но это не мешает мне эту библиотеку ругать :)
                  • 0
                    Прозрел что ли? ;)
                    • –1
                      да, прикинь, проснулся сегодня утром — и прозрел! :)
                      • –3
                        +1)
                • +2
                  >глючноемкость кода в собственных велосипедах

                  Стандартный приём — уничижительно отозваться о всех js-программистах и о качестве их кода. Все кругом глючные велосипеды, а jQuery весь в белом, вылизанный до совершенства.
                  • 0
                    На сколько бы не был велик и могуч талантливый программист, его код всегда подвержен насыщением глючноемкостью. Это так же справедливо, как справедливо невозможность творение кода без процесса отладки. И воздействовать на глючноемкость может каждый программист. Для увеличения глючноемкости достаточно отказаться от чужого опыта и положиться в написании кода полностью на свой профессионализм. Для уменьшения глючноемкости можно использовать чужой опыт, готовые проверенные решения и уменьшая количество собственного кода вообще.
                    • 0
                      Я поддерживаю вашу логику. По ней фреймворк должен быть всего один — первый. Все последующие только увеличиваю глючноёмкость, полагаясь на профессионализм автора, вместо использования первого. ;)
                      • 0
                        Фреймворк должен быть только один — лучший ;)
                        • +3
                          ага и по улице должна гулять только одна, самая красивая девушка :)
                • 0
                  jQuery помогает сосредотачиваться на главном? Да нет, jQuery просто помогает работать с DOM'ом; а это ни разу не самое главное.
                  • 0
                    про аякс и события забыли?
                    • +1
                      события это часть DOM'а, они даже называются DOM Event. и в них нет ничего сложного (ну, кроме mutation, которые в ие, по сути, отсутствуют).
                      аякс требует совсем мало кода, в общем случае — пять строчек, и его реализация тоже «ни разу не самое главное».

                      суть в том, что сайты надо делать не механически (чтоб работало). вся механика должна строиться динамически на основе логики, а логика должна быть гибкой и расширяемой.

                      то, что делается по схеме jQuery и 100 плагинов, уж извини, подделки со сроком годности «пока не тронут»
              • 0
                если надо писать, то почему не пишете? было бы интересно почитать.
                • 0
                  потому что и так два блога активно веду :) — просто некогда
              • 0
                Под ui можно кастомный сетап сделать. 8-11кб в mini или упакованном виде.
                Пара компонентов и tabs.

                С гугла грузится очень быстро + можно сжать gz.

                А в остальном всё верно.

                3rdparty там покруче, чем в других фреймворках это точно) количеством бьют легко.

                Разница в ядре.
                Сделать jQuery полегче или бильдер кастомного ядра, это будущее.
              • +1
                Самым существенным вижу 4-й пункт. Однако, и тут не согласен с вами. Приходится писать — да. Но быстрее в разы — это факт. Не нужно думать про целую кучу кросс-браузерных измочек, стандартных низкоуровневых штучек (которые лучше то уже и не сделаешь) и всего такого прочего.
          • 0
            >jQuery хорош только для быстрого развертывания. Для профессиональной разработки он подходит мало
            Среди сайтов использующих jQuery:
            https://addons.mozilla.org/en-US/firefox/
            drupal.org/
            digg.com/

            • –1
              а чем это противоречит высказыванию? odnoklassniki / vkontakte используют jQuery? rambler / yandex / mail.ru / google?
              • 0
                Тем что достаточно много вполне профессиональных команд используют в своей работе движки типа jquery. И находят что это лучше или по крайней мере дешевле чем разработка собственных js-движков.
                • 0
                  Профессиональных команд? Да тут даже одного невозможно днём с огнём найти, чтоб не был инфицирован фреймворковым заболеванием и знал предмет хотя бы на четыре с минусом. А ты про какие-то фантастические команды, да которые ещё и к каждому проекту приписаны. Нету их по большому счёту, нету, а «гадость пьють… из эконооооомии»…
                  • 0
                    >Профессиональных команд? Да тут даже одного невозможно днём с огнём найти,
                    Ничего не понял :)
                    Ну ладно. Здесь с вменяемостью не ах. Но разработчики .NET давно включили в состав пакета jquery. Гугловские разработчики в порядке частной инициативы толкают code.google.com/apis/ajax/playground/
                    Ну неужто все инфицированы?

                    >а «гадость пьють… из эконооооомии»…
                    А что не гадость? Все гадость. Но гадостности стандартных решений есть много плюсов, которые полностью отсутствуют в самопальных библиотеках — документированность, кроссброузерность, поддержка комьюнити, многократное тестирование.
                    • –2
                      >давно включили в состав пакета jquery

                      А чего бы не воткнуть в любой жирный пакет крошечный (по меркам пакета) скрипт? Популярность помогает популярности, ничего удивительного. Каждый за себя. Я тебе больше скажу, я где-то встретил обсуждение, что пора её воткнуть прямо в IE и прочие браузеры, чего грузить, если ВСЕ!!! используют. Серъёзно обсуждают.

                      >Гугловские разработчики

                      Стыд и срам, но понять можно. ;)

                      >документированность, кроссброузерность, поддержка комьюнити, многократное тестирование

                      Джиквери не кроссбраузерна и не была таковой ни секунды своего времени. Документированность API — огромный плюс, но разбор внутренностей важнее (вот ниже привели строчку кода с регекспом, пусть приведший эту строчку её разберёт, чтобы осознать качество документации). Миллионное коммьюнити априори некомпетентно в должной степени, т.к. это и есть целевая аудитория либ, я не обидеть кого-то хочу, а так и есть по логике вещей. Многократное тестирование есть совершенно обыденная практика для «browser scripting» и каким-то чудом это тестирование осуществлялось в первобытные времена (до пришествия).
                      • 0
                        Еге все-таки нашли две команды в чьем профессионализме вы не стали сомневаться :)

                        >Джиквери не кроссбраузерна и не была таковой ни секунды своего времени.
                        А что кроссброузерно FullAjaX? Prototype?
                        Сколько Google затратил времени и денег (а гадость типа пьем из экономии) чтобы обеспечить совместимость с Opera? Победили?

                        >вот ниже привели строчку кода с регекспом,
                        А сколько таких строчек разобранных и не разобранных будет в самопальном фреймворке?

                        >Миллионное коммьюнити априори некомпетентно
                        И это тоже неплохо когда речь идет о массовом тестировании. Есть ли возможность такого тестировани и вылавливания узких мест типа регекспа у авторов самопальных фреймворков?
                        • 0
                          >в чьем профессионализме вы не стали сомневаться

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

                          >Победили?

                          Не знаю, не слежу за их завоеваниями.

                          >Есть ли возможность такого тестирования и вылавливания узких мест

                          Автор + ядро — вот и все тестировщики и вылавливатели.

                          >типа регекспа

                          Это не просто регексп, это показатель стиля и того, как не работает документация и как происходит тестирование с вылавливанием.
                          • 0
                            >Автор + ядро — вот и все тестировщики
                            Ну так о каком качестве тестирования вообще можно говорить когда функции тестировщика и разработчика совмещены?

                            >ак не работает документация и как происходит тестирование с
                            > вылавливанием.
                            Абсолютно верно. Но в самопальных велосипедах все обстоит на порядок хуже. И с тестированием и с правкой багов и с документированием.

                            >Честно об этих причинах говорят единицы,
                            Что могут предложить эти единицы? Свой велосипед?

                            • 0
                              >Ну так о каком качестве тестирования вообще можно говорить когда функции тестировщика и разработчика совмещены?

                              Добро пожаловать в мир javascript.

                              >в самопальных велосипедах все обстоит на порядок хуже

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

                              >Что могут предложить эти единицы? Свой велосипед?

                              Велосипед, мопед, мотоцикл… какая разница.
                              • +1
                                >Добро пожаловать в мир javascript.
                                Нет. Это ваш мир. В других мирах тестированием и разработкой занимаются разные люди. Иначе это даже тестированием назвать нельзя. Так мышкотыканье.
                                • +1
                                  Ну, да, зачем мышкотыканье, если есть отряд эсэсовцев, которые страшно буравят скрипт глазами, без рук. Какие же всё-таки мифы сложились вокруг фреймворков — и найденный велосипед-грааль, и тотальный тебе поиск багов, и чудо-документация, и архикросссбраузерность, и какое-то массовое вселенское тестирование, и… чего там ещё… ;)
                                  • +1
                                    В тех конторавх в которых приходилось работать вместо отряда эсесовцев — бета-тестеры и служба тех-поддержки + аудитория сайтов от десятков до сотен тысяч посетителей в день. Среди этих посетителей всегда найдется десяток параноиков, ищущих глюки повсюду.

                                    А Грааля нет. Есть программы с умеренным количеством глюков, с неумеренным и с неизвестным. FullAjax — последнее.
                                    • 0
                                      Каждая новая версия чужого скрипта автоматом переносит его (скрипт) в разряд «программ с неизвестным количеством глюков». Параноики всё начинают заново, а техподдержке остаётся только надеяться, что мистер Смит или кто там не накосячил, оперативно разберётся с проблемой и любезно научит, в какую строчку смотреть. Ответсвенное поведение перед 100-тысячной аудиторией.
              • 0
                narod.yandex.ru/ — использует :)
            • +2
              Хорошо бы определится, что стоит за термином «профессиональная разработка». Не вес же сайта или его популярность, или имя владельца… надеюсь.
              • +1
                хорошо бы. Но это ведь не я придумал «Для профессиональной разработки он подходит мало».
                • –1
                  я попробую: «когда onclick'и не спасают» :)
  • 0
    а что мешает использовать все как по старинке?
    <a href='/news/' onclick='return getNews();'>новости</a>
    ?
    • 0
      я имел ввиду чем плох вариант?
      • +3
        Тут уже дело не в плохо\хорошо, это еще один способ, вполне кашерный и не требует для этой магии подключать фреймворки.

        p.s. Ваш вариант мне не нравится, чисто визуально, глаза устают бегать по кучи этих онклик и ретурн :)
      • +2
        Необходимостью прописывать для каждой ссылки js. В вашем случае еще и функцию.
      • –2
        Некрасиво.
        абстрагируясь от FoolAjax главное соображение — разделение данных (HTML) от поведения (JS). В распространенных js-фреймворках типа jQuery/Prototype и др. все что относится к поведению выносится за пределы HTML.

        >Необходимостью прописывать для каждой ссылки js.
        Автор очевидно прописывает все руками. Можно. Но лучше это автоматизировать. А пр и автоматизации разницы нет. Остаются только чисто эстетические пристрастия.
        • +2
          если это все только для того чтоб отделить JS от HTML, тогда можно ведь сделать
          function changeLink( id, func )
          {
          document.getElementById( id ).onclick = func;
          }
          changeLink( 'newsLink', showNews );
          changeLink( 'guestBookLink', showGuestBook );
          changeLink( 'aboutLink', showAbout );
          (это было грубо говоря для примера)

          то что он сканит и фильтрует линки по адресам, это несомненно плюс, но часто ли адреса в меню бывают типа:
          some_url?id=1
          some_url?id=2
          some_url?id=3
          ? если честно, я ниразу таких не делал
          • –1
            >если это все только для того чтоб отделить JS от HTML,
            Нет. Не только. Точнее если только, то использование библиотек просто неоправдано.
            Но для больших приложений, библиотеки позволяют решить много проблем. В первую очередь с кроссброузерностью. Рано или поздно вас утомит писать два решения для всплывания событий или асинхронных запросов, и вы напишете свою собственную библиотеку, как сделал автор статьи или воспользуетесь готовыми решениями.
        • 0
          «все что относится к поведению выносится за пределы HTML» это далеко не «разделение данных (HTML) от поведения (JS)». Поведение основывается на логике, к которой фреймворки не имеют никакого отношения. $(«a»).click не логика, а банальная работа с DOM'ом, которая должна быть между делом.
  • +9
    Хм, я не сторонник fullAJAX сайтов, считаю, что AJAX нужно использовать только в определенных ситуациях, а не «грузить» через него «целые страницы». Определенные ситуации: подгрузка выпадающих списков, отправка формы и т.д.
    Это мое личное мнение.
    • 0
      Минус ajax в неправильных руках — невозможность дать линк и перемещаться вперед назад и еще проблемы с индексацией (что решает эта работа). В ином случае только плюсы: удобство и скорость. Как можно быть противником удобства и скорости? ;)
      • +3
        >Минус ajax в неправильных руках
        Таки да. Дай Вам Бг мудрости не впасть в foolAjax
  • 0
    Ну я обычно использую для этого дополнительный класс и скрипт который навешивает сверху необходимые действа и все это делаю на jQuery, в общем-то иметь для этого небольшой кусок кода тоже хорошо :)
  • +12
    вот наркоманы. jQuery давно такое умеет.

    [a href='/article/1.html' target='content_body' type='ajax']

    $('a[type=ajax]').click(function() {
    var t = $(this);
    $('#'+t.attr('target')).html($.load(t.attr('href')));

    });

    а самые сообразительные могут так же делать формы ;)

    • +4
      вы эту фигню валидатором не пробовали проверить?
      У ссылки есть rel class title. Нафига вам type вводить? Да и таргет нестрикт

      А по поводу jquery — да. Но автор фанатеет от беспредельного аджакса, под который его библиотека заточена. Там много мелких и бесполезных (для нормальных приложений) мулек.
      • –13
        вы что до сих пор пишете по всем стандартам?
        сайты пишутся для людей, а не для стандартов. да и вот в соседней ветке вчера был холивор по поводу W3C и XHTML 1.0 / XHTML 1.1

        я считаю W3C неадекватными и не использую стандарты, делая при этом сайт более удобным как для юзеров так и для девелоперов.
        • 0
          >я считаю W3C неадекватными и не использую стандарты
          Вы редкий оригинал. Отчасти я с вами солидарен Dura lex, очень большая дура, но sed lex

          >делая при этом сайт более удобным как для юзеров так и для девелоперов.
          а вот это вы очень зря. Валидатор выдает не только ошибки но и варнинги. варнинги конечно игнорировать можно. Но до поры до времени. когда нибудь мелкий варнинг превратится в большой геморрой.

          >вы что до сих пор пишете по всем стандартам?
          Верстку обязательно. И только в strict
          А на выхлопе как получится. Скажем .NET сама по себе генерирует кучу ошибок. Мой фетиш — клиентский XSLT — вообще одна большая ошибка.
        • +2
          ИМХО: Еслибы небыло этих стандартов, то наверно и мы бы с вами не знали, что такое интернет.

          xhtml принес мир и порядок в веб разработку :)

          p.s. Правила есть правила.

          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Никто вас не обязывает верстать в XHTML, так как это стандарт создавался с целью улучшения интеграции с XML.

              А вот где в xhtml беспорядок так я понять не могу, для меня он понятней и логичней, чем тот же html. Некоторые вещи в html кажутся просто дикими. Такие как необязательность закрывания тега, атрибуты без значений, без кавычек, и гора безсмысленных тегов.

              В общем вывод такой, ждем html5 и xhtml2.

              Еще очень угнитает то что некоторые разработчики браузеров, видимо тоже считаю w3c неадекватным, и тормозят весь прогрес.
              • НЛО прилетело и опубликовало эту надпись здесь
        • 0
          я надеюсь хоть Вы не ругаете IE6 за его несоответствие стандартам, потому как он с Вами солидарен в этом мнении :) он тоже плюет на стандарты и делает все для людей, жаль люди этого не замечают

          а серьезно: стандарты позволяют разным приложениям действовать скооперированно, бе w3c в инете был бы сплошной бардак, каждый делал бы то что хочет (сейчас это не так запущено), и их нужно соблюдать хоть в меньшей степени
          • +2
            ie6 я ругаю потому что помню Оперу-6 и NN-6 были таким редкостным отстоем (и в части соблюдения стандартов тоже), что ie6 на их фоне был суперзвездой. Да он и сейчас очень даже ничего, несмотря на древний возраст.

            >бе w3c в инете был бы сплошной бардак,
            Спорный вопрос. Вполне могло сложиться два стандарта. Один от MS второй от W3C. Стандарт от MS как более логичный и перспективный выдавил бы W3C на задворки, вместе с броузерами, которые его поддерживают. А так да переделка замечательного броузера ie5 под стандарт w3c породила как раз бардак. И стандарт крив и поддержка его в ie6 крива.
            • 0
              в Вашем каменте есть одно важное слово " ie6 на их фоне был суперзвездой", дело в том что программам, чтоб быть качественным продуктом, свойственно развиваться, а МС забили на ие, пока не потеряли огромную часть рынка, между прочим в w3c полно MS предложений, и все это входит в стандарты MS и др. предлагают, дяди смотрят на целесообразность, и вносят в стандарт или нет

              это лучше чем все браузеры будут делать что захотят, людям то пофигу, они видят интернет везде одинаково, а каково тем кто делает этот интернет?
          • 0
            Сорри. В предыдущем сообщении опечатка. Естественно:
            ie6 я НЕ ругаю.
        • –9
          > сайты пишутся для людей, а не для стандартов
          золотые слова!
          • +1
            сайты пишутся для соблюдения стандартов, стандарты пишутся для браузеров, браузеры пишутся для людей = > сайты пишутся для людей
            • 0
              о да.

              то-то я часто вижу кривущие сайты с png-хами W3C Valid
              а ведь они для меня написаны. хм?

              Да и вы что правда верите, что без магии в одном стандарте можно сверстать сложный сайт, чтобы оно хорошо отображалось под IE6, IE7, IE8, Opera 9, Opera 9.5, FF 2, FF3?

              особенно когда чтобы сделать одну кнопку — надо для неё 3 дива делать, и не забыть див clear после него и вообще после каждого контент-блока и модуля.

              @Fear86,
              > ИМХО: Еслибы небыло этих стандартов, то наверно и мы бы с вами не знали, что такое интернет
              да что ты, родный? я в 13 лет (8 лет назад) сделал свой первый сайт в фронт пейдже с использованием флеша и много JS-а и на фреймах. и одно время мой сайт висел в топе сайтов города, а ведь я тогда и знать не знал, что такое стандарты. я тогда ещё даже не знал что у td есть align и всё делал Br-ами и непрерывными пробелами.

              так что уж поверь мне, ЮЗЕРУ — ПОФИГ как у тебя что сделано. ему главное чтобы было красиво. ровно и удобно. и не обязательно придерживаться стандарта что бы достичь этого результата

              p/s сорри что всё в одном посте. 5 минут влом ждать
              • 0
                да, верю, делаю, делюсь знаниями. Без IE6/7 было бы намного легче. Если бы Firefox / Opera / Safari / Google / еще бог знает сколько альтернативных браузеров поддерживали IE — было бы тоже намного легче.

                Мир, очевидно, движется к стандартизации документов W3 (посмотрели — написали стандарт — применили стандарт — посмотрели на применение — применили еще больше — и т.д.), и именно W3, а не MS.

                Хотя, мне кажется, в случае с MS был бы тоже «стандарт», и точно так же разработчики плевались бы и говорили «мы делаем сайты для людей», подразумевая этим, что им лень делать стандартные сайты для людей — WCAG / ATAG / ARIA ведь тоже не с потолка придумали.
                • 0
                  К стандартизации средств разработки движутся все. jquery и prototype — это одна из составляющих этой тенденции.
                  • 0
                    ага еще оденут вас всех одинаково, подстригут также, дадут флаги в руки — и пойдете стройными дружными рядами есть одинаковые полуфабрикаты.
                    мир многообразен и при этом не безобразен.
                    • 0
                      Подавляющее большинство сайтов сделано на HTML. Следует ли из этого что они все до одного похожи, идут стройными рядами, и не оставляют вам как разработчику места для фантазии?
                      • 0
                        вообще говоря, да — за рамки тегов тяжело выйти :)
                        • 0
                          Ага и ведь как то удается из одинаковых тегов сделать совсем разные сайты?
                          • 0
                            ага, и на яваскрипте написать разные библиотеки :)
                            • 0
                              Каждому свое.
                              Я получаю кайф, когда запускаю свой сотый сайт, вы — когда выкладываете выкладываете сотый релиз все той же библиотеки.
                              Дело вкуса.
                              • 0
                                никак не угомонишся :). герой темы прямо. дул бы те отселя колбаской по малой спаской. достал уже реально. пиши свои блоги про плагины, иди поднимай 101-ый сайт. что-то не нравится? свободен, тебя специально сюда никто не приглашал. реально достал уже своим хамским тоном. прям как «быдло» какое-то… так и ищет где-бы ущипнуть.
                                • 0
                                  >дул бы те отселя… свободен, тебя… своим хамским тоном...«быдло»

                                  Прое́кция (лат. projectio – бросание вперед) — психологический механизм, относимый к защитным, впервые рассмотренный Фрейдом. Заключается в неосознанном приписывании кому-либо или чему-либо собственных мыслей, переживаний, мотивов и черт характера.
                      • 0
                        почемуто ваша фантазия ограничена и загнана в рамки HTML верстки и плагинов для jQuery.
                        по ходу ваших комментариев видно что фантазии которые выходят за ваши рамки и стереотипы оцениваются вами крайне негативно.
                        карта — не есть территория.
                        • 0
                          Ну что вы. Например в PHP уже сложилось ядро фреймворков. И там то же самое идут базары что лучше — велосипед или отлаженные решения. .NET которая медленно но верно выдавливает с рынка всех остальных сам по себе фреймворк. Но и там появляются какие-то надстройки.

                          Унификация — это общая и универсальная тенденция. Закон перехода количество в качество. Куча разрозненных человеческих знаний в одной или разных областях рано или поздно дает предпосылки к качественному скачку.
                          • 0
                            ну так почему же вы мешаете процессу? вы прям таки орете тут по всей теме что уже все сделано, потом утверждаете что существует какой-то закон кол-ва в качество. Сядьте в конце концов напишите плагин нормальный кроссбраузерный для jQuery и сопровождайте его себе на здоровье. Направление движения я вам дал.
                            • 0
                              >ну так почему же вы мешаете процессу?
                              А может вы? :)

                              >что уже все сделано,
                              На ближайшие 4-5 лет да. Все. После включения jquey в состав .NET и подвижек в эту сторону со сторны Google думаю что вопрос решен.

                              > потом утверждаете что существует какой-то закон кол-ва в качество
                              Угу есть такой. Его проходят в старших классах школы и на первых курсах институтов.

                              >ядьте в конце концов напишите плагин нормальный кроссбраузерный для jQuery
                              Я этим занимаюсь давно. Сразу как соскочил с Prototype, а до этого с велосипеда собственной конструкции. И вам того желаю

                              • 0
                                интересно чем же это я мешаю процессу?
                                • 0
                                  Сбиваете с толку малых сих.
                                  1. Сама по себе технология FA весьма сомнительная.
                                  2. Подсадите 10 человек на свою библиотеку, а потом кините их — типа нет времени на поддержку, на развитие, на исравление багов, документирование, тестирование и т.п.
                                  • 0
                                    чушь, уже давно больше 10-ти человек пользуются. и документация потихоньку формируется.

                                    да ну вас. от вас то точно никакой пользы в данном случае, ничего конструктивного вы не сказали, только одни споры и обвинения…
                  • 0
                    jquery и prototype — это скрипты. И всё. Раньше было много мелких скриптов, валяющихся на скриптопомойках, и огромная масса «разработчиков» их копипастила. Позже появились небольшие т.н. dhtml-либы ака менюшки, гармошки и проч., точно такая же масса «разработчиков» копипастила уже их или даже покупала. Сейчас пришла эра больших либ, и снова та же масса «разработчиков»… бла-бла-бла. Причины копипаста везде одинаковы.
                    • 0
                      Есть существенная разница. База копипаста унифицирована, документирована, протестирована (в том числе на кроссброузерность) огромным комьюнити.

                      Верхний слой (то что копипастит масса) достаточно тонкий и в нем проще разбираться при поддержке/модификации чужих сайтов. В случае чего выбросить и поставить новый кирпичик проще чем было раньше.
                      • +1
                        Ну и что, некоторые жуткие скрипты работают и сейчас, менюшки бородатые распространены необыкновенно, это ни о чём не говорит, javascript (благодаря малой изменчивости IE и долгой жизни стандарта) весьма стабилен и выдерживает многое. Через 5-10 лет сеть точно также будет замусорена старыми весриями либ.

                        А среднему юзверю больше делать нечего, как писать куда-то там о том, что у него ошибки в консоль сыпанулись (если он вообще об этом знает). К примеру, я эти js-ошибки ловлю каждый день, но за много-много лет написал ровно ноль жалоб. Так что вот это вот «протестирована» на кроссбраузерность не очень звучит убедительно. Вокруг каждой либы есть активное ядро, которое осмысленно может гулять внутри кода, вот и все тестовые возможности. Да и что там тестировать, если во многих либах кроссбраузерность базировалась или до сих пор базируется на вычислении UA-строчки, с чем годами боролось js-сообщество…

                        пысы: причины копипаста одинаковы, документация и слепая вера только помогают быстрее сделать шаг.
                        • 0
                          > Вокруг каждой либы есть активное ядро, которое осмысленно может
                          > гулять внутри кода, вот и все тестовые возможности.
                          И с этой точки зрения полнота тестирования тем полнее чем больше ядро.

                          >документация и слепая вера только помогают быстрее сделать шаг.
                          Слепую веру я бы заменил на понимание необходимости унифицированных решений для массовых разработок.
                          Уникальные разработки — да будут использовать свои велосипеды. На то они и уникальные.
                          • 0
                            2 вопроса — Как измерить размер ядра, чтоб определить полноту тестирования? Чем массовая разработка отличается от немассовой?
                            • 0
                              Полноту тестирования с ядром разработчиков связали вы. Не я. Я считал что разделение разработки и тестирования — обязательное требование. И это не только к JS или IT относится. Н если угодно — в первом приближении ядро разработчиков и тестировщиков можно определить по багтрекеру. У jQuery он открыт.

                              >Чем массовая разработка отличается от немассовой?
                              Совокупным числом разработчиков использующих ту или иную технологию.
                              • 0
                                > связали вы

                                Я-то как раз хотел вас сдвинуть от количества к качеству, от «огромного коммьюнити» к ядру, к их навыкам, размер в этом деле не помощник.

                                > Совокупным числом разработчиков

                                Понимаете, если вы поставили ставку на фреймворк потому, что пришло «понимание необходимости унифицированных решений», то это и есть почти слепая вера, на которую вы имеете полное право, если уж доверились и решили не унифицировать самостоятельно. Но зачем рекламу принимать/выдавать за чистую монету. Кроссбраузерность получается потому, что вроде как везде, говорят, работает, протестировано идеально потому, что там ведь миллионы пользователей и так далее… «вроде как» и «говорят»…
                        • 0
                          jQuery отошла от UA строчки в 1.3 ветке.

                          Использование библиотек — необходимость современного высокоуровневого программирования. В большинстве случаев то что пишется не в машкодах уже основано на чьем-то коде. Можно каждый раз писать со своими «блекджеком и шлюхами», но это если у вас ресурсов более чем достаточно.
                          • 0
                            >jQuery отошла от UA строчки в 1.3 ветке.

                            Знаю. Попытка стать кроссбраузерной всего через 3 года после появления. Теперь дело за малым — силой мысли просканировать сеть на наличие старых версий и заменить их на новую, из новой версии удалить оставленную до сих пор проверку, потом достучаться до каждого программиста, кто это до сих пор использует, обучив его правильной тактике и извинившись за предыдущую лажу.

                            >Можно каждый раз писать со своими «блекджеком и шлюхами», но это если у вас ресурсов более чем достаточно.

                            Почему каждый раз-то? Напишите 1 раз свой реюз для своих задач и радуйтесь жизни.

                            • 0
                              Не встречал идеального софта который бы работал сразу и без малейших недочетов. Проблема обновления, это проблема программистов которые занимаются своими продуктами. А уж извинятся тем более не за что, колхоз дело добровольное :)

                              Реюз в виде jQuery уже написан и проверен в работе огромным количеством пользователей, народ там в курсе нововведений в браузерах которые можно использовать для ускорения/улучшения. Если же я сам буду этим всем заниматься, то сомневаюсь что останется время на что-либо другое, например, на написание здесь комментов :)
                              В общем, использую jQuery и радуюсь жизни, а с проблемами от пользователей возникающие по причине использования этой библиотеки я как-то не очень сталкивался.

                              Я не фанат :) просто мне выгодно и удобно её использовать, да есть недочеты типа, как hover не отрабатывает mouseout если увести курсор на scrollbar, но это мелочи.
                              • 0
                                >Проблема обновления, это проблема программистов которые занимаются своими продуктами.

                                А продукт — это фреймворк или что-то, созданное на базе фреймворка? Проблемы первого продукта плавно перетекают в проблемы второго. Изменили в скрипте составляющую, которая вас касается — начинай переделывать со всеми вытекающими, совсем что-то удалили безвозвратно или стало вдруг тормозить — сиди на старой версии или начинай изучать скрипт, чтоб восстановить что-то точечно. Или совсем забросили — жди пока подхватят другие или вообще переходи на что-то другое. С точки зрения профессионального роста программиста это холостой и безответственный путь в никуда. С других точек зрения пользу можно отыскать…

                                >проверен в работе огромным количеством пользователей

                                Это миф, если бы так было на самом деле, обсуждаемый реюз не был бы тем, что есть. ;) Повторюсь, либы, ровно как и любой другой копипаст, адресованы в первую очередь тем, кто по тем или иным причинам не пишет сам. Подавляющее большинство (не все) не пишет самостоятельно по банальной причине отсутствия нужных навыков, что, в принципе, объяснимо. Отсюда этому т.н. «огромному количеству» целенаправленно что-то проверить, найти узкое место, выявить проблемы архитектуры скрипта, мины… крайне сложно, если вообще возможно без тотального реверса кода в целом. Они просто «радуются жизни», как вы говорите, ну, работает на сайте гармошка, выплывает тултипчик, желтит подсветка — значит, либа идеальна и проверена. Пойду всем расскажу.

                                >просто мне выгодно и удобно её использовать

                                Это понятно, на этом всё и держится. Спорить трудно. ;)
        • +1
          я бы хотел посмотреть в глаза тем людям, которые поставили за это высказывание плюс. Стандарты не должны являться фетишем, но только они могут гарантировать, что ваш сайт не развалится в очередном браузере — сейчас уже не W3 прислушивается к IE, а MS смотрит на стандартизованный мир и подстраивается под него.
        • 0
          ага, с @target'ом очень удобные сайты получаются :)

          PS я считаю Наполеоном себя и скоро сделаю Францию величайшей империей
      • 0
        эту фигню вполне можно сделать валидной с помощью custom data attribute :-)
    • 0
      Copy Source | Copy HTML
      1. <a href='/article/1.html' target='content_body' class='my_link ajax'>Example</a>
      2.  
      3. $("a[@class='ajax']").click(function(){
      4.     var t = $(this).attr('target');
      5.     $('#'+t.attr('target')).html($.load(t.attr('href')));
      6. });


      p.s. Мне такой вариант приятнее и валидацию проходит :)
      • 0
        валидность поперек семантики встала. что за любовь такая, использовать @class в качестве помойки? «ajax» как-то изменит стилизацию ссылки?
        • +2
          Вобщем-то ссылки, которые не требуют перезагрузки, можно подчеркивать пунктирной линией…
    • 0
      Ты даже не знаешь как работает банальный target ;) зато уже заступился за любимый велосипед. Юзерам без JS (их же еще не отменили?) будет очень не удобно работать с сайтом, с которого все ссылки открываются мало того, что в другом окне, так еще и в одном и том же другом окне.
      • –1
        В его примере content_body — это, очевидно, iframe.
        • 0
          ну тогда я в замешательстве :) в статье говорится о перезагрузки контента, а он про фреймы пишет-де такое уже есть…
        • 0
          нет, это любой блочный элемент
      • 0
        Выше был представлен код в котором использовался type для определения, что данная ссылка должна быть обработана. Лично я использую для этого классы.

        И потом никто не запрещал использовать существующий класс для работы скриптов.
        • 0
          Класс нужен для того, чтобы css накладывать. Никто не запрещал в классах указывать свои контактные данные.
          Безусловно, класс можно использовать, чтобы скриптам было на что опираться. Допустим, вкладки какие-нибудь: класс «tabs» может служить и для css, и для js. Но не в данном случае: для ссылки достаточно посмотреть что в href'е значится (отсутствие протокола или его лишнее указание (ссылка на тот же сайт) и отсутствие target'а) и не захламлять html. Скорее, я бы оставил класс, чтобы избранные ссылки не попадали в выборку, у нас же все ссылки приводят к подзагрузке, да? И таргет туда же: должен быть стандартный контейнер и возможность указать другой.
          И, кроме того, если нажатие ссылки будет инициализировать несколько контейнеров (товар из каталога, схожие товары, категория), то эти настройки тоже выкидывать в верстку?
  • –1
    Ребята, это все замечательно, спору нет, но не забывайте о людях.

    Объясню почему.
    На это есть 2 пункта:

    1. Все эти штучки удобны, подгружают контент, но они лишают пользователя кнопочек вперед/назад… да, ФФ шарит эти дела и кнопки активны для аякса, но ИЕ без особого шаманства не позволит работать с кнопками.
    2. УРЛ! Шагая таким методом по сайту адресная строка остается неизменной… Это тупо неудобно если на сайте менюшка сделана так… Лучше добавлять page.php#выбранный_айди_пунка… Но это уже за рамками статьи…
    • +2
      урл можно менять с помошью волшебной штучки #, страница не будет перегружаться, а JS будет знать какой контент надо подгрузить при нажатых кнопках вперед/назад, и не нужно спорить, это уже проверено временем и активно используется, просто тут не упомянули :)
    • 0
      вы на сайт сайт примера заходили? там нет указанных проблем. Единственное (что вы не указали) — это невозможность в IE7- сохранить страницу в избранном
      • +1
        > невозможность в IE7- сохранить страницу в избранном
        IE7 это больше четверти пользователей.
      • 0
        всмысле? почему это нельзя сохранить в избранном? только проверил, все удачно сохраняется
        • 0
          якори не сохраняются
          • 0
            в ИЕ7? да ну, как это не сохраняются, у меня XP + ИЕ7 — все ок
            • +1
              :) ты попробуй сохранить в избранном у IE две разные страницы с fullajax — и попереключаться между ними. Столько интересного про MS узнаешь…

              В IE6 еще веселее :)
              • 0
                о, супер, интересный момент, думаю это можно доработать. спасибо за выявленный баг ;)
              • 0
                Любопытная логика. Вы не смогли сделать кроссброузерную библиотеку, а виноват почему-то MS, благодаря которому и появилась технология именуемая ныне Ajax
                • 0
                  на меня-то Вы зачем накинулись? Это не моя библиотека :)
              • 0
                умные уже догадались, что при заходе на страницу надо якоря в параметры приобразовывать
              • 0
                спасибо, удалось починить
  • +1
    Я уже решил все проблемы связанные с ajax подгрузкой контента.
    Но фреймворк всё равно очень хорош, т.к. всё это неплохо автоматизирует!
  • +2
    Во-первых, грузить полностью страницы используя Ajax — это маразм какой-то.
    Во-вторых, через некоторое время работы с таким сайтом — посмотрите сколько памяти скучаша страница. При переходах по обычным ссылкам память хотя бы очищается.

    Мне кажется, что это довольно неудачная крайность.
    • 0
      Вы знаете я провел тест :) по данным Chrome за 10 загруженных странниц в кеш после посещения мне пришлось пожертвовать где-то 3 килобайтами памяти. И эта цифра почти в 5 раз меньше чем память которую кушает рекламные flash баннеры на хабре. Так что опасения за память напрасны и можно довольствоваться мгновенной загрузкой страниц, которые вы посетили, что дорогого стоит :)
  • 0
    Могу привести живой пример (не реклама) SantehUfa.ru Там как раз у ссылок подменяются href на пустоту и задаётся событие на ajax загрузку. И это всё легко делается с помощью jQuery и валидно.

    Единственно недостатки в тормознутости, особенно в IE. Памяти жрётся очень много.
  • +1
    Естественно память жрется, ведь дерево все растет и растет,
    • 0
      нет, намять растет потому что я складываю за щеку ранее запрошенные страницы, сайт то не большой, страниц не много, очищать надобности нет, уходишь из сайта — браузер сам сбросит весь мусор. Но это чисто в данном примере. При желании можно настроить иначе.
  • 0
    Не понимаю, зачем вы пишите здесь о своем фреймворке? Объясню. Люди, которые делают сайт на аяксе и которые пользуются фреймворками, воспользуются уже привычными jQuery, Mootools и т.д. остальные предпочтут прочитать статью и написать самостоятельно. Вот ваша статья заняла около 90 строк букаф, но описывает она возможность, которая реализуется в 20 строках «размашистого» js кода.

    Да и размер фреймворка какой-то нереально огромный. jQuery весит ~100кб, ваш 160кб. У меня все эти возможности и еще несколько вкусностей автоматизации заняли всего 8кб. Я даже боюсь заглядывать внутрь вашего.

    Не обижайтесь. Тем, чем вы занимаетесь это здорово. Но может лучше описывать сам процесс реализации, что бы хабросообщество могло помочь вам создать по-настоящему хороший продукт, а кто-то в это время усовершенствовал свои наработки.
    • +2
      ну а почему же вы не посмотрели внутрь? посмотрели бы и сказали: вот тут мол говнокод, можно сделать лучше. вы такой герой на слове, да пожалуй не один вы. я бы взглянул на ваш ваш супер 8кб код. и прогнал бы его через свои тесты и разные ситуации, которые встречаются.

      описание реализации всегда больше самой реализации, вы пишете код для компьютера, а статьи для людей.

      и пишу я 1) потому что меня об этом часто просили последнее время 2) для того чтобы изложить мысли, подходы — из всей кучи коментариев (людей) находится парочка, которые реально помогают в развитии 3) не все ж такие супер кодеры как вы, есть люди которые малоразбираются в этом деле

      а и я описываю сам процесс реализации, подходы, методы, просто на примере того что мне ближе
      • 0
        Ну я же просил не обижаться :) Я не геройствую, по опыту знаю, что когда начинаешь комментировать код большинство это вообще в штыки воспринимают.

        Свой сайт я не скрываю, ссылку можно посмотреть в профиле. Сайт устарел, как и библиотеки, но все-таки посмотреть можно.

        • 0
          я не думаю что под такого рода сайт нужно больше кода. попробуйте вставить WYSIWYG редактор на одну из страниц и загрузите такую страницу через свою библиотеку. Вы не ровняйте частное применение и более универсальное решение. Добавьте в свой код модель событий, полноценную обработку скриптов, стилей, удобную реализацию работы с историей, прочее. И если вы это все вложите хотя бы в 50 килобайт, я пожму вам краба. Хотя нет, возможно, предварительно брошу пару камней в вашу строну, ну а потом все ж таки оценю вашу работу.
          • 0
            Может быть вы не заметили, но все это там есть :) Эти библиотеки работают и на визитках и на интернет магазинах, а имеют даже больший функционал, чем ваш. И мне интересно, что же занимает еще 150кб кода? если это API, то тогда это лишнее.

            Как освобожусь, наверное, тоже примусь за написание статей по этой теме, вот тогда и покидаете в меня камни :)

            • 0
              ну огласите весь список возможностей, да и на сорцы хотелось бы взглянуть.
              • +2
                Вы реально думаете, что то, что делаете это ново? Это не так и когда я год назад этим занимался, делал тоже самое: индексация, автоматическая обработка форм и ссылок, кеширование, подмена ссылок на русские, где можно, а если вернется скрипт распарсить его и даже заставить write работать, оставить историю и другие плюшки.

                А почему между нашими такая разница? я когда делал, думал о пользователе, а вы о своем пиаре, уж признайтесь :-). Вот поэтому я вылизывал код, что бы найти элегантное и маленькое решение, которое не будет заставлять пользователя смотреть на белый экран почти 4 секунд и не подвесит бедненький ИЕ до состояния «не отвечает», а кеш будет срабатывать мгновенно и даже для форм. Ибо просто не окупается та прибавка к скорости сайта со всеми неудобствами, которые несет ваш фреймворк.

                Это правда-матка, но Рим тоже не 1 день строился. Я принцип работы своих библиотек менял уже раза 4, надеюсь, у вас тоже появится что-то вменяемое. Удачи!

                • 0
                  когда jQuery начинался, он тоже был не идеал. Но как показала практика, начальный пиар и создание большого сообщества пользователей окупается с лихвой.

                  Это только сейчас Resig задумался об исключительной производительности — когда сайтов на jQuery стало миллионы.
                  • +1
                    А что по вашему jQuery сейчас идеален? более того, его распиареность и общедоступность губит js, как потенциальную среду для разработки RIA. Если так будет продолжаться то js рискует попасть в одну категорию с флешь, типа: «гадость та еще, мешает и трафик жрет, отключить надо». Мне этого совершенно не охота, так что плохой вы пример привели.
                  • 0
                    Нет, ну, ты реально прозрел. Но косишь слегка влево. ;) Он задумался не из-за миллионов, а потому что либы на сликах давно меряются пипись... скоростями выбора и проч., т.к. это один из основных быстроосязаемых факторов (наряду с весом, сжатым весом и основным пакетом фич), характеризующих любую универсальную либу. Слава богу, первично заданная архитектура и «качество» кода позволяют ему ещё долго периодически удваивать скорость…
                • –1
                  ну так опять же кроме громких криков «долой говно» ничего вы не отписали по существу, похоже это вы пытаетесь поднять себя за счет опускания других. Давайте ваши сорцы посмотрим что же у вас в конце 4-рех разовых переделок получилось. А то я на словах тоже тут могу понаписывать.
                  Вы говорите год назад :), я пожалуй уже года два с половиной этим занимаюсь.
                  • –1
                    Ну уж извините, перекапывать 160кб кода, что бы потом тыкать в ошибки и кричать какой я крутой, вот это бы и было не красиво. Есть результат, он плохой, что внутри не интересует ни меня, ни пользователя, следовательно нужно делать так чтобы стало хорошо.

                    Если вам это сказали несколько человек и вы этого не понимаете, мне вас жаль.
                    • –1
                      90% сказали мне спасибо. 5% подсказали что улучшить. 3% предложили помощь. а 2% в которые попали и вы — пытаются вылить побольше «говнеца». так что жаль мне вас. Что посеешь то и пожнешь. Этот закон всегда работал и будет работать.

            • 0
              кстати ничего я этого там не заметил, может уж покажите конкретно где ваше чудо в полной красе
      • 0
        return this.replace(/\s*((\S+\s*)*)/, "$1").replace(/((\s*\S+)*)\s*/, "$1");
        чем вызвана такая реализация? в jquery более лаконичная реализация
        return (text || "").replace( /^\s+|\s+$/g, "" );
        • 0
          отлично, вот по делу комментарий, проверю — если такой регексп работает хорошо пожалуй заменю

          • +1
            Самый распространённый, но среднемедленный способ. К тому же написан в привычном для jQuery неряшливом и противоречивом стиле вроде (text || '').... Вы можете определиться со своим вариантом трима-а на базе тестов проведённых пару лет назад Steve-ом Levithan-ом, он в этом деле большой дока.
            • 0
              супер! спасибо
    • –1
      опять же лить грязь не посмотрев внимательнее признак какого-то комплекса или внутренней ущербности, у вас наверно внутри что-то щимит когда вы увидели что-то похожее на вашу работу но лучше и тем более с описанием принципов работы :)

      если вы бы посмотрели внимательно то заметили что внутри половина размера от 160кб занимают детальные комментарии для разработчиков. Так что прежде чем что-то говорить, особенно грязь поливать в сторону других, стоит 3-раза подумать и 4-ре раза оценить стоит ли.
      • 0
        Перечитайте комментарии и вы увидите, что совершенно не способны воспринимать малейшую критику. Если бы у вас действительно было лучше я бы только порадовался, но даже идиот заметит разницу в производительности между 2 нашими сайтами, а по сложности они равны.

        И когда я говорил о 160кб, я говорил об исходниках не оптимизированных, какая разница, ну вырежете вы комменты и левые символы, но нагрузка то на интерпритатор останется. Специально для вас я посмотрел в логах сервера, библиотеки в оптимизированном состояние отдаются размером 2335 байт.

        Будем дальше мериться и обмениваться словесным поносом? можете делать это сами с сабой, но лучше потратьте время с пользой, улучшая свой проект ;)
        • –1
          я вполне нормально воспринимаю адекватную конструктивную критику. Сами перечитайте комментарии еще раз.

          вообщем я свой проект однозначно буду улучшать, но не благодаря вам.

          ваших сорцов я так и не увидел :), но я не поленился просмотреть ваш оптимизированный код, совсем немного, дошел вот до такого места

          texts[i][0].replace(/document.write/g,'speli.rcont.innerHTML+=')

          и плюнул на это, вы со измеряете не соизмеримое.

          Дайте своему скрипту document.write('<script>alert(1)</script>') или еще лучше document.write('<script src=«blbla.js»></script>').

          а еще нашел внутри скрипта вот такое вот чудо

          </h1>Да! это ошибка.<a href="/">Вернитесь на главную</a>

          думаю в ближайшее время вам придется и пятый раз переделывать свой скрипт.

          без обид :)
          • +3
            Братцы, не доходите до построчного разбора своих личностей.
            • –1
              ну почему же, мне не жалко подсказать коллеге где он заблуждается, даже в каком именно месте. я с радостью воспринял бы обратное. Я придерживаюсь — поступай с другими как хочешь чтобы поступали с тобой, так что мне будет приятно если кто подскажет что и где в коде не так, ну только — нормальным тоном.

              А вообще жаркое обсуждение статьи получилось. Как будто на мозоли чьи-то наступил. Хотя реально то делился своим опытом, наработками…
            • 0
              На самом деле у нас зародилась интересная дискуссия. :) Я пытаюсь доказать sirus'у что его решение слишком громоздко для поставленной задачи, а он мне, что мое не наоборот и не решает задачи.

              Типичный пример «в интернете кто-то не прав». :) Не важно кто неправ, сегодня воскресенье и можно посветить немного времени полезной дискуссии. :)
              • –1
                дело в том что вы меряете решение своих частных задач ко всем возможным вариантам. у меня изначально шире круг проблемных вопросов, потому что я таки свой код выкладываю для всеобщего обозрения и люди берут, пользуются и пишут о встреченных проблемах, а вы даже и не подозреваете какой их объем при большой гибкости javascript языка.
                Во вторых в данной статье решается всего одна задача — преобразование ссылок на лету. А вы тут всю работу оцениваете причем не взгянув что там внутри :). О чем вы можете тогда судить, у вас заранее неадекватная оценка. Внутри также куча других вкусностей, до которых дойдет очередь описания.
                • –1
                  C чего вы взяли, что я решаю частную задачу? Когда я начинал делать в моих планах было тоже сделать библиотеку, которая бы могла перевести любой сайт на ajax. И это вполне себе получилось. На радостях я начал переводить свои старые джумловские сайты на аякс и удивлялся как это легко и просто. Начал свой суббизнес «перевод сайтов на ajax», сделал сайт, выдвинул его в топ. НО когда дошло дело до чужих сайтов оказалось все намного хуже.

                  Вот у вас написано:
                  > Быстрое и удобное подключение к любому типу сайтов (системе управления и порталу)
                  а вы реально пробовали? поставьте связку Joomla+VirtueMart и подключите свою библиотеку. Даже не добавляя туда других модулей, не изменяя серверный код вы вряд-ли сможете пройти «путь покупателя» от регистрации до оформления покупки с аякс навигацией.
                  Потом можете поставить другой компонент и увидите, что там найдется пару глупостей из-за которых ничего не будет работать. А ведь эти глупости они есть во всех программных продуктах. Находятся и такие типы, которые даже форму не заключают в теги form. Все глупости вам вряд-ли удастся предусмотреть, но тогда в чем разница между нашими проектами? А если удастся, то какого размера будет фреймворк?
                  • –1
                    да, согласен всех глупостей никогда не решить, так всех никто и не решает, лично я старался решить часто встречаемые ситуации, хотя сам я их никогда не встречал, но многие писали о таких и то таких проблемах, смоделировав и проанализировав получалось найти для них решение.

                    Что имеем в итоге — 50кб (18кб gzip) оптимизированного кода с обработкой всех всех случаев что встречались. И это плохой результат?

                    все же я думаю если вы имеете опыт, тем более я так понял, мыслите хотя бы в этом направлении, имеете свои наработки — лучше было бы для всех объединить усилия и сделать еще лучшее, общее.
                    я однозначно буду еще дорабатывать и оптимизировать код, вот допишу серию статей, соберу гору камней и буду шлифовать с их помощью наш «меч», чтобы был он еще острее и легче.

                    Опенсорс он для того и предназначен чтобы поглощать лучшее, становится лучшее.

                    • –1
                      Это здравая мысль :) Самого уже посещала идея создать портал фанатиков ajax, где бы можно было делиться идеями.
                      • 0
                        ну вот опять же, что за крайности, причем тут фанатики :). Я так думаю, фанатики — это на грани болезни. Зачем использовать такие отрицательные определения. Можно ведь сказать лучше любителей.

                        Вообщем, добро пожаловать на форум. Там можно более детально и предметно перетереть все вопросы относительно и размеров и функциональных возможностей.

                        Ну или создавайте свой портал, если что, мы поддержим всей толпой :).

                  • +2
                    > И это вполне себе получилось. На радостях я начал переводить свои
                    > старые джумловские сайты на аякс и удивлялся как это легко и просто.
                    > Начал свой суббизнес «перевод сайтов на ajax», сделал сайт, выдвинул его в топ.

                    Так где можно посмотреть вашу расчудесную библиотеку, где этот сайт?
                    • 0
                      Последние исходники я никому не даю, но то что было год назад и довольно сносно, можно посмотреть на сайте i-may.ru. Если бы вы почитали ветку внимательней вы бы это заметили.
                      • 0
                        > то что было год назад и довольно сносно, можно посмотреть на сайте i-may.ru
                        > C чего вы взяли, что я решаю частную задачу? Когда я начинал делать
                        > в моих планах было тоже сделать библиотеку, которая бы могла
                        > перевести любой сайт на ajax. И это вполне себе получилось.

                        Посмотрел, там не фреймворк совершенно, а просто набор функций для работы с HTML request, кэшем и историей + еще намешана «работа» с DOM до кучи, на кашу похоже. Делается это за один вечер. До возможностей которые предоставляет fullajax и близко не дотягивает.

                        > Последние исходники я никому не даю
                        Не понятен смысл этой фразы так как JS код легко восстановить.
                        • –1
                          Вы понимаете разницу между фреймворком и библиотеками?

                          > Делается это за один вечер.
                          Ага, а сайт делается за 3 часа и бутерброд. С такими «умниками» уже наобщался, спасибо, но больше не хочу ;) И детально не вникнув в суть вопроса писать больше не советую, ибо я повторять всю эту ветку не буду.
          • –1
            Я не выкладываю свои библиотеки, ибо делаю их для себя, и что бы тех кто использует мои идеи хоть немножко да мучила совесть за то, что берут без разрешения ;)

            > texts[i][0].replace(/document.write/g,'speli.rcont.innerHTML+=')

            даже в старой версии это было элегантным и простым в 1 строчку решением проблемы document.write, а сколько оно занимает у вас?

            > document.write('<script>alert(1)</script>')
            Вы не поверите… но это выдаст сообщение «1», только что поэксперементировал :) Конечно код можно вырывать по строчки, но все же советую читать целиком ))))) Хотя эмулятор JS и document.write не нужен в идеале и со временем я его уберу. AJAX должен грузить только HTML, а место для js в отельном классе, вынесенном в файл, склеенном, оптимизированном, сжатом и положенным на полочку в кеше.

            > Да! это ошибка.Вернитесь на главную
            Опять же. Ну вот чем вам не угодил вывод ошибки 500. Что ж вы к ней так придрались ))))), в реальности я её ни разу не видел, это на всякий случай.

            > думаю в ближайшее время вам придется и пятый раз переделывать свой скрипт.
            естественно. куда уж без совершенствования :)

            > без обид :)
            Я на вас не обижаюсь, вот если бы вы нашли действительно моменты, которые стоит улучшить, то я бы вам и спасибо сказал. А они там есть, код уже устарел.
  • 0
    молодцы, так держать!
  • 0
    Заранее извиняюсь, если спрашиваю спрошенное (но вроде пока не было тут такого вопроса): а как с производительностью у этого подхода? Вот именно когда страница достаточно объемная, а ссылок таких там десяток или больше? Особенно интересует ИЕ, который достаточно медленно делает все (и, если не ошибаюсь, особенно медленно читает аттрибуты, со всеми вытекающими)?

    Повторюсь, интересует пример, когда элементов на странице реальное количество — ну вот хотя бы как на этой :)
    • 0
      ну конечно чем больше элементов, тем дольше обработка. хотя можно сделать один общий обработчик и повесить на document.onclick в котором проверять источник события
      • 0
        что-то я как-то прикинул — он медленнее должен получиться, ведь в случае одного обработчика нам придется target «вылавливать», чтобы он всплыл. А потом еще и по CSS-селекторам (или DOM-узлам закэшированным) определять, тот или не тот target. Один раз пройтись и выставить может быть быстрее.

        Понятно, что истина посередине, но все-таки один глобальный обработчик, имхи, — это зло.
        • 0
          я думаю надо будет сделать опциональный выбор, да и вообще сделать тесты на эту тему все таки не помешает.
  • НЛО прилетело и опубликовало эту надпись здесь
  • –2
    кряк уже вышел.

    iphone-best.ru/files/apps/444-ibluetooth-crack-10.html

    щас буду пробовать =)
    • +4
      окошком ошибся…
  • +3
    сракс — прикольно звучит =)
  • 0
    Вспомнил тут одну проблему с memory leaks в jQuery :) У вас в коде она тоже присутствует, при удалении элемента в IE обработчики его желательно удалять тоже
    javascript.crockford.com/memory/leak.html

    ps: и пройдитесь по коду заменой s/елемент/элемент/ :)
    • 0
      да, спасибо, обязательно учту

      одно что мне не нравится в приведеном вами способе, то что node.attributes для ИЕ возвращает тучу (всегда больше 60-ти или 90, точно не помню) атрибутов, даже если они не определены, к примеру для страницы этой же статьи в ИЕ7 просто в адресной строке браузера наберите

      javascript:alert(document.body.attributes.length)

      у меня показывает 198!!! это ж конкретно ударит по производительности если для каждого элемента буду проверять каждый аттрибут

      >и пройдитесь по коду заменой s/елемент/элемент/ :)
      честно говоря не понял что имелось ввиду

  • 0
    Всем (новичкам и профи, лузерам и лидерам, фанатам и любителям, несостоявшимся конкурентам и соратникам), всем, всем принимавшим участие в обсуждении темы ОГРОМНОЕ спасибо. Вы мне (нам, всем) очень помогли. Столько разных мнений было. Мир многообразен. Это чудесно.
    Еще раз всем спасибо за активное участие!

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.