Цитата:
|
ну может в ноде...
|
Цитата:
Цитата:
$.when($.get('foo.html'), $.get('bar.html')).done(function(arg1, arg2) { alert("выполнены все запросы"); }); // однако если в when передается Deferred Object, то предпологается что запросы уже выполнены |
идея реализации асинхронных цепочек:
var funcs = [ function(NEXT) { new Request('foo.html', onSuccess: function(arg1){ this.arg2 = arg2; NEXT(); }).get(); }, function(NEXT) { new Request('bar.html', onSuccess: function(arg2){ this.arg2 = arg2; NEXT(); }).get(); }, function() { alert("выполнены все запросы"); } ]; var i=-1; function _next() { i++; if ( ! funcs[i]) { return; } funcs[i].call(funcs, _next); } _next(); а можно какой-нибудь конкретный пример двух запросов с одним обработчиком в конце? Ну или просто что-то, что не укладывается в раки асинхронной цепочки... |
Цитата:
только какие преимущества перед стандартными методами синхронизации? стандартизировано... доступ извне... ну мб кароче... |
Цитата:
На счет качества тут можно долго спорить, могу лишь сказать, что сам по себе jQuery написан довольно хорошо и показывает не слишком большое отличие в скорости выполнения, по сравнению с аналогичным кодом без этой библиотеки (читай, оверхед не слишком велик). При этом плюсов очень много - мало весит, удобна, привычна на данный момент многим js-кодерам. Удобный инструмент. Да и вообще, разницы нет, использовать, или нет. Только зачастую лишняя трата времени. Ведь не важно, используется библиотека, или нет, если речь идет о каком-нибудь сайте, например. Важно чтобы работало и быстро. И делалось быстро. Все остальное для кодосектантов. |
Цитата:
Управление DOM, хватает и стандартных средств, а запросы на сервер 20 строчек. Я ещё jquery не знал, а ajax-ом пользовался вовсю. jquery это querySelectorAll. Они пытаются наворотить сейчас и вылезут из маленького размера, а тогда она уже нафиг не нужна. |
Цитата:
Андрей Параничев, а какие минусы? |
Цитата:
Допустим есть такая ситуация: интерфейс подбора тур. путевки. Кликнули на выбор страны, послали запрос, но отобразили пользователю полученный результат, затем послали еще какой-то запрос (к примеру выбор города), выполнили тоже самое. Затем пользователь решил нажать кнопку "оплатить", тут то мы смотрим если предыдущие запросы все выполнены без ошибок то выполняется callback (переводим пользователя на интерфейс оплаты) или fallback если где-то был косяк. |
Цитата:
или я чего-то недопонял тут: Цитата:
|
JQuery - это тот же JavaScript
JQ - это тот же JavaScript, разница лишь в том, что готовые функции можно использовать n-раз, набрав всего пару строчек, а не копипастить весь код несколько раз.
|
Цитата:
Цитата:
|
x-yuri,
Минусом jQuery является то, что он не диктует то, каким образом нужно писать код на клиенте. Api для создания плагинов не подходит для того, чтобы реализовывать какие-то свои модули в рамках одного проекта (нет смысла). Просто весь код подряд в одном JS файле тоже - поскольку один скрипт может (должен) содержать скрипты, которые могут появляться на разных страницах. Банальный пример, есть две страницы: gallery.html и comments.html, подключается один скрипт. Ну вы понимаете, роутинга нет, нужно что-то придумывать самому. Проблемы тут, по сути, нет, написать самому просто. Но сам факт того, что jQuery не диктует того, как нужно писать код, использующий эту библиотеку, это минус. Не слишком "фреймворкно". Цитата:
На клиенте тоже бывает часто такое, но опять же в "очень JS" приложениях, где все действия и взаимодействия идут через сервер. Например, при заходе - авторизация, загрузка данных пользователя, отправка состояния локального, подзагрузка изображений, установка прослушивания канала comet-сервера или websocket подключения. И все эти действия должны идти друг за другом, например. Можно конечно все разбить и через внутренние события решить, но цепочкой легче, учитывая, что она позволяет перехватить err параметр в любом вызове. Gozar, Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
по поводу deferred мне сложно судить, может я просто не сталкивался с такими сложными случаями. Я не представляю, где он может на полную использоваться. По-моему чего-то такого должно хватить: new Chain() .add(function(NEXT) { new Request({..., onSuccess: function(){ NEXT(); }}) }) .add(function(NEXT) { new Request({..., onSuccess: function(){ NEXT(); }, onFailure: function() {...}}) }) .go(); такую вещь можно передавать между вызовами и дополнять, если понадобиться, хотя у меня такой необходимости не возникало. по поводу jquery, она ж все равно решает лишь небольшую часть проблем кросс-браузерности, а плагины тоже бывает надо допиливать, причем они не всегда на такие допиливания рассчитаны. От меня, например, как-то хотели lightbox переделать, причем не меняя кода плагина. Пришлось менять его по таймауту, т.е. я ждал пока закончиться анимация (setTimeout(<время анимации>, ...)) и потом вносил изменения. Да и баги бывают как в самом jquery, так и в плагинах (я один прямо на сайте у них наблюдал). А написано оно преимущественно, как ты говоришь, на нативном js, но с ужасающим кодом. Комментарии лишь отчасти спасают. К тому же, слишком сложно. Я уверен, если повысить требования к аудитории, размер/оверхед резко уменьшиться. Цитата:
|
Цитата:
... Только об этом и думаю :), но это ещё не означает что я буду писать код в котором может разобраться любой, включая дураков. |
Андрей Параничев, по поводу качества нет желания спорить, все вижу своими глазами открыв исходный код.
isNaN: function( obj ) { return obj == null || !rdigit.test( obj ) || isNaN( obj ); }, |
Kolyaj,
Мобильный интернет вообще ни к чему в "обычном" интернете не приспособлен. Даже к картинкам тем же. Так что тут вообще сложно говорить. Для мобильного интернета нужны мобильные версии сайтов, если речь не про 3G. vflash, И что? Вы знаете о проблеме использования функции isNaN? Если нет, давайте разбираться вместе: isNaN(null); // false isNaN(""); // false isNaN(false); // false isNaN("Infinity"); // false isNaN(" "); // false Я думаю вопрос снят? Gozar, Кодосектанство в том, что использование библиотеки, или не использование библиотеки, никакого влияния не имеет, если нет четко установленных условий и при этом решение на своем коде не заметно производительнее использования библиотеки (скорость написания, как понимаете, при использовании библиотеки будет всегда выше). Поэтому писать из раза в раз один и тот же код, который писали до вас миллионы людей - как минимум глупо. Причем это касается не только jQuery, а вообще любого программирования, особенно на ПХП, где велосипедистов гораздо больше, чем в других языках. Речь конечно идет не о периоде, когда вы осваиваете JavaScript, когда полезно знать, как все работает "внутри". А когда вы уже понимаете все это и вам нужен конкретный результат. |
Цитата:
Цитата:
|
Kolyaj,
Достаточно быстрый, чтобы использовать библиотеку в 100Кб. Во всяком случае, я так считаю. К тому же средние скорости из статистики же взяты, а не с потолка. Только недавно на хабре была статья про это. Цитата:
|
Андрей Параничев,
при таком раскладе "00000000000000000" тоже не число, и ' 00012343' тоже. мне вообще то не понравился регексп, который непойми где определен и стоит ли его там использовать ради зашиты от дураков. нативный isNaN() расчитан на работу с числами. библиотеки нужны. и было-бы хорошо если на javascript.ru имелась бы приличная коллекция самых востребованных вещей. . |
vflash,
Нативный isNaN() не строгий. Для внутренних нужд jQuery необходим строгий isNaN(), отсюда и регулярка. И это не от дураков скорее, эта проверка ведь срабатывает при парсинге свойств стилей тех же самых, в т.ч. возвращаемых браузером. .each() удобен для обходя коллекций DOM элементов, получаемых через jQuery. А приведенный код, ну это просто для красоты так сделано, можно было до сделать все "напрямую", или использовать стандартный цикл, конечно, я не знаю, почему конкретно в этом месте сделали так. |
Андрей Параничев,
each удобен но медлен. в IE8 вызов функции относительно медленная операция. да и в js вообше вызов функции это создание области видимости, arguments и еше всякого там. для быстрого кодинга это удобно а для библиотеки могли бы и постараться без него. по поводу размера 233кб исходника, нехило так для маленькой библиотеки ) |
Андрей Параничев, а мое сообщение ты не заметил? В общем-то меня в первую очередь интересует, как ты решаешь этот вопрос:
Цитата:
Цитата:
p.s. наткнулся на вот такую статью (только не надо судить сразу по заголовку). И вот здесь еще краткий взгляд на историю javascript неплохо получился (A brief (and partially fabricated) history of JavaScript) |
vflash,
Цитата:
Цитата:
x-yuri Я как-то так примерно делаю. Не слишком лаконично, зато удобно поддерживать код в будущем. Собственно текущий вид я определяю обычно или на основе url, что не самое удобное решение, либо на основе id у элемента body, который проставляется серверной частью. Если 3G, то смысл вообще что-то оптимизировать? Скорости 3G достаточно, чтобы есть файлы целиком и даже смотреть видео на youtube в 720р. |
Андрей Параничев,
а когдато была всего ~18 и без Minified . Цитата:
когда-то про js тоже говорили что ему ненужно быть быстрым. |
Цитата:
p.s. |
Библиотеки уменьшают время разработки больших приложений, но при этом разработчик не может на 100% понимать как это работает и какие еще алгоритмы отрабатывают внутри библиотеки, что иногда может привести к совершенно непредсказуемым багам. При программинге на чистом JS разработчик всегда знает что и где он писал (если он один, конечно), и чистый JS, как правило, работает намного быстрее библиотек, хотя тут уже все зависит от коэффициента кривизны рук девелопера. Ну и не забываем о том что библиотеки несут в себе избыточный код для обеспечения поддержки старых браузеров и функционал который никак не задействован в продукте.
|
Цитата:
Разговор ни о чём получается. PHP тоже подобием jquery когда-то был ;) По сути: Когда качество приложения ставится на первое место выбираются те инструменты которые нужны для разработки. Иногда выбирается отсутствие jquery в основном коде и подключение её в готовый продукт, в котором нет ни одной строчки на ней и любой другой библиотеке. |
Часовой пояс GMT +3, время: 03:20. |