Jump to content

s0rr0w

User
  • Posts

    5,139
  • Joined

  • Last visited

  • Days Won

    32

Posts posted by s0rr0w

  1. Вообще миграции в промышленной разработке - зло. Нужно очень хорошо подумать, прежде чем переходить на новые версии. Лично для меня вынужденная миграция осуществяется только если

    1. Повышается безопасность

    2. Повышается надежность

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

    Во всех остальных случаях этого не стоит делать. Баги имеют свойство накапливаться.

    • Like 1
  2. 1) Нормально ли, с вашей точки зрения, фактически в самом разгаре разработки совершать этот переход? Возможно, я просто сгущаю краски по неопытности в этом вопросе?

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

    Переход страшен не переписыванием кода, а перетестированием всего и вся.

    2) Часто ли вам приходилось совершать подобные действия? Имеется в виду не именно переход на jQuery 1.9, а эквивалентные ситуации в принципе.

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

    3) Непосредственно переход на версию jQuery 1.9 на данный момент актуален, или оно того пока не стоит?

    В случае с jQuery - не актуален. Во второй версии не появилось ничего такого, что могло бы существенно повлиять на

    1. Скорость разработки

    2. Скорость поддержки

    3. Методику разработки

    Это всего лишь мелкие твики, улучшайзеры.

    Единственный пункт, который меня беспокоит, это

    http://bugs.jquery.com/ticket/12254

    • Like 1
  3. Протокол file:// указывает на локальные файлы компьютера.

    Даже если заменить на http://, то все равно работать не будет из-за указания домена localhost и абсолютного пути к файлу

    Почитайте в гугле про абсолютные и относительные пути

  4. s0rr0w, этот текст, что ты сейчас выдал, очень хорошо воспринимается если перед этим хорошенько "дунуть" :P

    сдается мне автор не поймет (т.с. не в обиду).

    А если перефразировать в "Сделай селект-затравку, подменяй им пустышки" - то не воспринимается вообще никак.

    Лучше перебдеть, чем недобдеть, и выдать почти готовый алгоритм (не хватает инициализации при ховере)

    • Like 1
  5. Ребят, подскажите, пожалуйста.

    есть картинка

    Хотел бы сделать следующую вещь: если картинка меньше по ширине скажем 600 пикселей то добавить дополнительный класс в тег картинке

    Обратиться к атрибуту with, сравнить его с нужным числом

    • Like 1
  6. Делается "тупо" до безобразия

    Сначала создаем один селект где-то в скрытой области кода (display:none). Пусть это у нас будет #parking

    Потом делаем на месте каждого селекта выбора профессии пустой селект-затравку, у которого нет ни одного <option>

    Навешиваем на select'ы hover, по которому селект-затравку прячем, а перед ним вставляем запаркованый селект (insertBefore)

    Кликать человек будет по наполненному опциями селекту.

    По blur'у чистим селект-затравку, удаляя все option внутри, и добавляем тот option, который только что выбрал пользователь, паркуем полный селект снова в #parking (appendChild), показываем селект-затравку (он будет содержать как раз выбранный опшин)

    Вуаля!

    • Like 2
  7. чем это может быть удобней, нежели явное указание отладчиком места исполнения/вызова функции по средствам точки останова?

    Каждый делает отладку ровно так, как привык делать, и как позволяет делать архитектура приложения. Мне позволяет делать в пару кликов, или вообще без кликов.

  8. http://jsfiddle.net/htRSQ/

    Это банальная декларация функции внутри блока.

    Обратить внимание, что "a inside b" показывается 2 раза, вместо ожидаемого "a"

    По спеке сначала ищутся все декларации функции внутри scope, потом определяются, потом уже выполняется общий поток

    • Like 2
  9. Уже нет.

    HTML5 != HTML

    Для HTML5 это действительно уже не так, и разрыв наступил в момент, когда появились собственные parsing rules.

    Голова дырявая становится, сам же читал про это недавно...

  10. во-вторых, тыц - это поиск по файлам. Огромный привет, если имя функции встречается много раз :)

    Не надо по файлам, надо по исходному коду

  11. На самом деле идея родилась где-то в районе 2005-го года. По-моему, даже раньше jQuery. В более-менее современном виде - с 2008-го года

    :rofl: Валиден)). Разработан в 1969 году))) HTML и XML произошли от SGML. HTML — это приложение SGML, а XML — это подмножество SGML, но кому нужен этот SGML.

    Ну да, кому он нужен... HTML не противоречит SGML, поэтому является подмножеством. SVG, VML, MathML, VRML, OTD... Да, пожалуй никому SGML не нужен.

    Нужно использовать. Будет валидно.

    В HTML5 нет прямого запрета на использование любых атрибутов или тегов. Если валидатор этого не понимает, то это проблемы валидатора.

    data-* удобен тем, что имеет в JS интерфейс dataset, минуя getAttribute, его можно итерировать как обычный массив. Но никто не запрещает сделать аналогичную обертку, используя прямой доступ к атрибутам.

  12. Условия задачи ЧИТАЕМ:

    Адрес страницы на которой будет выполнятся код такого типа: mysite/question_edit?id=9 Какой самый простой способ получить вот это число 9 ?

    Если вы всегда решаете задачу только в лоб, то конечно же, ваше решение вполне подойдет. Можно, правда, выкинуть лишний кусок со сплитом, потому что потом все равно используются регулярные выражения, так почему бы сразу не искать нужные цифры?

    if (str.match(/[?|&]id=(\d+)&*$/)) alert(RegExp.$1);

    При такой регулярке уже все равно, где именно будет этот параметр, хоть в середине строки, хоть в конце.

    Да, и проверять на цифры не обязательно регулярным выражением, можно пользоваться некошерным хаком. Так как название явно указывает на целочисленку, причем положительную, то можно использовать

    var st = "12";
    if( 0|st ) alert('int');

  13. Люди, кто читает эту тему :rofl: я умываю руки))) человек живет в проекции реальности.

    Конечно же проекция, как же иначе. Аргументы закончились уже? Так быстро?

    Окей, давай вернемся к тому-же Яндексу, и его развитием БЭМ, но уже в рамках JS.

    Открываем ссылку http://ru.bem.info/articles/bem-js-main-terms/ и читаем

    Как и любой Javascript-компонент, код, написанный под i-bem.js должен быть проассоциирован с HTML-фрагментом, который он намерен превратить в функционирующую часть интерфейса. Здесь для этого достаточно добавить блоку CSS-класс i-bem и указать в атрибуте onclick параметры блока.

    Фу, ересь какая! Такие "модные" разработчики в Яндексе сидят, и используют приемчики из 90-х...

    Надо им написать, чтобы не позорились, и почитали наконец javascript.ru...

  14. Как вариант можно и через метод split разбить на подстроку.

    var str = window.location.search.split('id='); //разбиваем подстроку на массив.
    if (str[1].match(/\d/) != null) alert(str[1]) //берем из него второй элемент и проверяем число это или нет, Если не null показываем.

    /?pid=7&id=9

    Все, приехали.

  15. Посмотрите ка на него, нашел совпадения поиском, смешной Вы человек. Я тоже нашел 30 совпадений(это вообще в коде, а в чистом html 1 совпадение) на gmail.com из 144629 символов. А это меньше 0.25%

    Получается, Ваша методика используется в мизерном количестве(даже меньше мизерного), как и говорил раньше, только там, где что то очень простое. Глупо это оспаривать.

    Одна из тактик отрицания факта - преуменьшение его влияния или важности. Неважно какое количество, важно что приемчики из 90х живы и процветают. Наверное это что-то значит... Скорее всего в Google и Yandex работает низкооплачиваемые кодеры, которые не до конца прониклись практикой ненавязчивого JS. Другого пояснения у меня нет...

    Со скоростью рендеринга тут я с Вами согласен. Время на это нужно.

    Вы часто видели страницы на чистом HTML, для рендеринга которых требуется ОДНА СЕКУНДА? Лично я видел, но это очень большие документы.

    -- Ну так а это то о чем говорит??? О том что гугл использует как Вы пишете ""накладные расходы на формирование ненавязчивого JS"". Ну и где Ваши атрибуты событий вообще? Прозрели?

    Конечно прозрел, вместо десятков милисекунд для рендеринга обычного HTML браузер целую секунду что-то считает далеко не на самом медленном компе. Это и есть накладные расходы, про которые я говорил. Как раз из-за желания гуглом сократить работу своих серверов, переходе не ненавязчивый JS.

    Фантазии это у Вас)) Вы же сами доказываете мне, что нужно использовать атрибуты событий, Если уж код ТС'а приняли как отличный код, то в таблицу примера, Вы бы точно понапихали своих атрибутов :rofl: вот бы коллегам показать :rofl:

    Я ничего вам не доказываю. Это не тот случай, когда что-то надо доказывать.

    Как Вы вставите узел последним в родительский контейнер, где есть еще множество различных элементов при помощи innerHTML? Да ни как Вы не вставите. Он перезапишет там весь html.

    Я смотрю, про DocumentFragment мало написано в вашем любимом javascript.ru?

    Бонус: Вместо alert'а существует console.log по приятнее все же будет Вам смотреть код функции. Пользуйтесь уж на здоровье)).

    Не все браузеры одинаково показывают содержимое функций, в отличие от единого формата alert'a

  16. Вы не перестаете меня смешить))) Зашел я gmail.com открыл исходный код сохранил его на диск, весит 148 кб из этого огромного количества кода html'ля всего 20 ~ 25 тегов. Остальное JS. И где там ваши сплошь и рядом атрибуты событий? Правда на одной ссылке есть атрибут клика))) Которая говорит загрузить страницу старую статичную страницу почты из аля 90 годы))).

    Какая избирательная логика... Открываю ютюб, ищу //*[@onclick] Результатов масса. Менюшка гугла с их сервисами. Сплошь и рядом onclick (а она была переделана совершенно недавно), G+ тоже есть. Да вперемешку там все.

    Заходим на сайт yandex.ru, ищем то же самое. 96 matching nodes. И это на обновленном совсем недавно ресурсе! Используются приемы из 90х!!!

    А вот гугл так не думает))) как видно из страницы у них весть html формируется яваскриптом. Интерфейс динамичный(ajax, comet) если конечно это Вам знакомо. Файлы js кешируются браузерами плюс различные сжиматели кода которые делают его в несколько килобайт не сравнятся с Вашим подходом атрибутов кликов. Это видно из страницы ТС.

    Накладные расходы не содержат только килобайты передаваемой информации. Сюда включаем и скорость рендеринга страницы на стороне клиента. Вы никогда не задумывались, а что же означает вот тот прогресс-бар, который показывает gmail при загрузке? Лично у меня интерфейс почтовика рендерится примерно секунду. Это и есть те накладные расходы, про которые я говорил.

    Офигеть, Вы собирались повесить атрибут события на каждую ячейку? БРЕД!

    О, начались фантазии...

    Это 2 разных метода и работают они по разному. Вот Вам еще пища для ума, питайтесь http://learn.javascr...ru/multi-insert / http://learn.javascr...ifying-document

    Да вы что, правда что-ли? А я то горемычный думал, что это одно и то же... :rofl:

    И вообще, причем здесь эти 2 метода. Речь идет о том, что не используют сейчас атрибуты событий, ну ни как. Только если что то простое там нужно. Человек застрял в 90х. Может тогда и файлы таблицы стилей не будем использовать??? А сразу атрибутами оформлять =)))

    Я дал ссылки и примеры из ваших людимых гуглей да яндыксей. Даже они используют аттрибуты, и не стесняются. Потому что фанатизм и максимализм хорошо, а стоимость поддержки и архитектура требуют совершенно непопулярных у таких людей как вы решений.

    Живите и дальше в своем розовом идеалистическом мире :)

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

    задача - найти в коде обработчики на элементе с id 'test'.

    Шаг 1. Открываем консоль хрома и пишем туда

    getEventListeners( $( '#test' ) );

    результат

    видим, что на на данном элементе присутствует один обработчик 'click'.

    Шаг 2. Открываем вкладку отладчика Source, устанавливаем точку останова на нужное нам событие в Event Listener Breakpoints -> Mouse -> click

    Шаг 3. Триггерим/поджигаем интересующее нас событие на элементе, например, так

    $( '#test' ).click();

    и нас выбрасывает на

    В дополнение. Код функции обработчика можно просмотреть из консоли всего в одну команду:

    getEventListeners( $( '#test' ) ).click[ 0 ].listener;

    Слишком долго, слишком сложно. Тыцнуть в тег, скопировать название функции и сделать alert(functionName) и я уже читаю код обработчика.

  17. Я тоже умею умные ссылки постить

    http://stackoverflow.com/questions/7810534/have-any-browsers-implemented-the-dom3-eventlistenerlist

    Почитай, почему этот метод так и не был реализован в браузерах

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

    Смех да и только. Почему же разработчики google и yandex не используют предлагаемые Вами методы разработки? У них сложнейшие приложения и ни чего, справляются как то.

    Открыл google.com. Набрал слово javascript. Посмотрел код первой попавшейся ссылки.


    <a onmousedown="return rwt(this,'','','','1','AFQjCNGf8B1MwS6OVNL15BpCO4mTO-e8NQ','','0CC8QFjAA','','',event)" href="http://uk.wikipedia.org/wiki/Javascript"><em>Javascript</em> — Вікіпедія</a>

    Еще вопросы есть? Фанатизм - страшная штука...

    s0rr0w

    Вы с сео знакомы? В курсе, что гугл учитывает время загрузки стрницы для ранжирования, а о пользователях мобильных приложений Вы подумали? С Вашими методами атрибутов событий страница раздувается. Пример выше у ТС, зачем грузить мобильнику с дохлым gprs лишнее? Причем каждый раз. А если у Вас таблица с 1000 ячейками и при клике, что то должно происходить Вы будете 1000 обработчиков прописывать :blink: ?. Хотя можете не отвечать.

    Вы не думали о том, что накладные расходы на формирование ненавязчивого JS могут быть на десятки килобайт больше даже 1000 ячеек? Мало того, если вам реально необходимо выводить таблицы с 1000 ячеек, то мне жаль ваших пользователей. И еще, я могу сделать ряд твиков, сократив количество обработчиков до одного. addEventListener для тысячи обработчиков будет жрать ресурс, итерируя DOM, onclick="" парсится в разы быстрее. Сравните как нибудь скорость innerHTML и appendChild, особенно на большом количестве элементов. Почитайте ваших любимых Yandex, или документацию по оптимизации jQuery, там советуют или innerHTML, или DocumentFragment.

  18. Это у Вас в голове бывают. То то я и смотрю, что на gmail.com в html одни onclick да onmouseover атрибуты. ЗАЧЕМ захламлять html? Посмотрите код выше, ужас!

    Это, наверное, не просто так было сделано... Вы не задумывались над тем, что любой ненавязчивый JS существенно замедляет отладку и тестирование? А причина простая - нет официально задокументированных методов, которые бы рассказали, какие именно обработчики сейчас навешены через addEventListener. Лично мне это кажется гирей, которую люди вешают себе на ногу, чтобы потом придумать множество способов, как облегчить от нее страдания.

    А вы не задумывались никогда, что кроме ООП есть еще другие паттерны реализации приложений? Например, структурный, когда логика переносится по максимуму на структуры HTML. И плевать на то, что кому-то это кажется ужасным, это гораздо удобнее, практичнее, надежнее, проще тестируется.

    Конечно можно использовать, где что то простое. Но как правило JS код выносят в отдельные файлы. Представьте, что у Вас динамический интерфейс в каком то блоке меняется html и все Ваши атрибуты событий исчезнут, а если Вы через JS будете их навешивать, то это просто извращение.

    Меня не нужно пугать такими вещами. Вы про html-темплейтирование что-то слышали? Это методика построения приложения, когда HTML-код содержит в себе все, что необходимо для его функционирования, и клонируя HTML-структуры вы получаете сразу полнофункциональный компонент или его элемент. При этом абсолютно ничего в JS менять или переопределять не нужно. Этим достигается отличная слабосвязанность компонентов. Если у вас jQuery головного мозга, то это вам будет очень тяжело понять.

    Зачем же тогда Джон Ресиг создавал jQuery? И в последующим движок поиска элементов sizzle?

    По его мнению, jQuery позволило бы write less, do more. На практике же это далеко не всегда так.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy