jquery - есть ли смысл?
Добрый день, обитатели форума:)
Такое дело, сменил работу на более оплачиваемую но тут вышла досада. Я все время работал с обычном js, а тут все написано на jquery. Его я знаю на уровне пятиклассника но дело не в том это все можно выучить, дело в самой этот библиотеке. Уже 4 дня работаю с ней и поражаюсь насколько неудобно. На обычном js я бы реализовывал тот же слайдер или туже галерею в раза 3 быстрее(имеется введу не просто вставленный а как то отредактирован как хочет этого начальство или не 1, а 2 или 10 в зависимости чего наклацает пользователь). А еще то что когда я ищу какой то элемент в DOM то он мне выдает массив честно сказать не знаю, как кого но меня чето это раздражает. Короче сказать есть в ней какие то другие преимущества кроме, как то что если я ищу элемент то мне всего то нужно написать что то в этом духе. $('#header .block-menu .serial_count .serials-count-menu') бо я, как бы не увидел пока ничего крутого и полезного ради чего бы стоило ее юзать. |
Ради кроссбраузерности. Слишком многое в JS зависит от браузера, и надо каждый раз помнить, что в каком будет работать иначе. Про старые IE вообще молчу, это ужас. А в jquery можно об этом вообще не вспоминать.
|
Цитата:
$('.serials-count-menu')или $('#header .serials-count-menu')(зависит от структуры документа). Если Вам неудобно писать на jQuery, то Вы, скорее всего, его не понимаете / не правильно используете. Цитата:
|
kostr
примерно 20-25 строчек кода для определения браузера, его версии, а так же оси если это андроид или ipad или iphone. Вместо того что бы грузить 50-70 килобайт. B@rmaley.e><e Возможно я его не понимаю так, как до этого с ним не сталкивался. Но просто и правда многие штуки удобней делать без него. |
розовый слоник,
Анимация, утилиты (например, $.extend чего стоит), плюшки типа .live(), мелочи типа opacity в .css()... |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
$('div').hide('fast'); |
Цитата:
|
скрывает элемент, уменьшая opacity, width и height (хотя width и height там ни к чему, я считаю). Но вообще я к тому, что кому-то важна производительность, кому-то минимум зависимостей, кому-то читабельность, а кому-то просто рано писать свой фреймворк
|
x-yuri
Тут на сайте есть пример написания анимации и пусть там не 5-10 строчек, а гдето чуть больше 20 это сути не меняет, хотя думаю, что если сесть и подумать можно и в 10ть строк написать. |
<html> <head> <title>test</title> <style type="text/css"> .block { width: 800px; height: 300px; background: red; } </style> </head> <body> <button onclick="hide()">Скрыть</button> <div id="t" class="block"></div> <script type="text/javascript"> function hide() { var el = document.getElementById('t'); var count = 10, i = count, width = el.offsetWidth, height = el.offsetHeight; (function() { if (i--) { el.style.width = Math.round(width * i / count) + 'px'; el.style.height = Math.round(height * i / count) + 'px'; if (typeof el.style.opacity == 'string') { el.style.opacity = i / count; } else { el.style.filter = 'Alpha(opacity=' + Math.round(i / count * 100) + ')'; } setTimeout(arguments.callee, 20); } })(); } </script> </body> </html> Это если уж совсем без библиотек. |
да и что бы не создавать новую тему такой вопрос.
я погуглил 5ть мин и не нашел ничего про регулярки в jquery, их там нет и их писать, как на js? или все же, как то по другому? |
Kolyaj
Я пользуюсь таким же примером для анимации :) |
Цитата:
Цитата:
|
розовый слоник,
jquery - это тот же javascript, просто с добавленной библиотекой. Все, что работало на чистом javascript, будет работать и с ней, регулярные выражения в том числе. Зачем им добавочный функционал, они и так неплохо обрабатываются. |
вот тот же код на jquery, без использования ее возможностей в плане анимации
<html> <head> <title>test</title> <style type="text/css"> .block { width: 800px; height: 300px; background: red; } </style> </head> <body> <button onclick="hide()">Скрыть</button> <div id="t" class="block"></div> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script> <script type="text/javascript"> function hide() { var count = 10, i = count, width = $('#t').width(), height = $('#t').height(); (function() { if (i--) { $('#t').css({ 'width': Math.round(width * i / count) + 'px', 'height': Math.round(height * i / count) + 'px', 'opacity': i / count }); setTimeout(arguments.callee, 20); } })(); } </script> </body> </html> в данном конкретном случае изменения, может быть, небольшие. Но деталей реализации меньше. Следовательно проще понять, что эта функция делает. Если по какой-либо причине вам нужно в первую очередь видеть не что делает код, а как он это делает, это не значит, что так должно быть всегда и везде. Оба подхода имеют право на жизнь. Да, пряча реализацию, мы можем усложнить себе отладку в дальнейшем. Но это всего лишь возможность, у нее есть свои достоинства и недостатки. Где-то это уместно, где-то - нет, для кого-то подходит, для кого-то - нет. Да и просто, не прятать реализацию - значит не использовать функции. И люди делают это в разной степени, кто-то больше, кто-то - меньше в общем, я к тому, что там 200КБ несжатого кода и куча недоплагинов, но ими можно пользоваться. :) И это опять же одна из возможностей, со своими достоинствами и недостатками |
Цитата:
В jQuery нет инструментов для удобного наследования "классов", поэтому я не понимаю, как на нём можно создавать сложные приложения. |
Цитата:
Цитата:
и еще, на чистом js проще писать неподдерживаемый код, потому что jquery - более высокоуровневая штука |
Цитата:
А плагины вообще упоминать глупо, ибо любой скрипт это плагин к нативному JS, так что у нативного JS плагинов заведомо больше, чем у jQuery :) Цитата:
Цитата:
|
Напиши по пунктам, чем ты пользуешься в jQuery (селекторы, ajax, ...), обсудим :)
|
а что обсуждать? ну вот тут, например, слева список категорий. Не пользовался Deferred Object, Plugins, Internals
|
Цитата:
Ещё одна большая часть -- ajax. Вообще ajax, вопреки расхожему мнению, штука кроссбраузерная, просто неудобная. Поэтому для промышленного использования нужны всё те же 5-10 строк на чистом JS, чтобы запросы к серверу делать было удобно. А все функции в jQuery для того, чтобы Вася Пупкин, не понимающий, как работают браузеры, как они общаются с сервером, и как вообще работает HTTP, мог "делать сайты на аяксе". Непонятно, зачем это в больших проектах, разработчики которых априори должны быть профессиональней того Васи Пупкина. Ну анимация выше была. Есть ещё одна обширная, достаточно сложная штука, реализованная в jQuery -- взятие значений CSS-свойств. Эта штука не нужна в принципе, т.к. если вам это понадобилось, значит у вас очень хреново спроектировано приложение. Так и получается, что ради нескольких необходимых функций, подключается 200 кб кода, да ещё и навязывается неудобная концепция "нет DOM-элементов, есть коллекции". P.S. Дада, разумеется это всё моё личное мнение :) И касается оно исключительно крупных проектов. Хомпаги без разницы на чём делать. |
и тут выяснилось, что мы про большие проекты говорим...
![]() а вообще да, jquery такой, в частности, чтобы работало в кривых руках и на кривых проектах. Но это помогает и с нормальными проектами. Например, нужно меньше знать, чтобы что-то делать. И вместо того, чтобы разбираться с каким-то очередным багом, можно выполнять поставленную задачу а как ты, кстати, определяешь координаты элемента? Цитата:
Цитата:
p.s. если подключение библиотеки в 30КБ не позволяет проект либо религиозные убеждения, то да, ничего не поделаешь :) p.p.s. http://en.wikipedia.org/wiki/Not_Invented_Here |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
$('a').width() возвращала бы массив длин всех ссылок. 2 * $('a').width() + 2 * $('a').height() -- массив периметров всех ссылок. А так пришлось вводить идеологический хак: .width() возвращает ширину первого элемента в коллекции. Ну и, пожалуй, половина объёма библиотеки -- жертва этой концепции. Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
В CSS лежат неизменяемые стили или конечный набор переключаемых стилей. В случае анимации значения стилей задаёт JS.
Если бы положив значение в CSS, можно было бы его оттуда достать в том же виде, тогда проблем не было бы. Но значение в CSS не равно значению в JS, кроме совсем простых z-index и opacity. |
Цитата:
Цитата:
|
Цитата:
Цитата:
а по поводу концепции, она удобна тем, что можно выполнить ряд дейтствий над группой обьектов, без дополнительных проверок типа "а есть ли уже такой обьект?". Но неможко неудобна, когда нужно работать с одним обьектом. В mootools, например, можно и так ($$), и так ($). И $$('a').getStyle('width'), например, вернет массив ширин, а не ширину первого элемента. По сути так работает коллекция, возвращаемая $$ - она тупо перенаправляет вызов метода каждому элементу и возвращает массив результатов. А в jquery просто меньше ценят последовательность/целостность/красоту, и больше - простоту/практичность и вообще, я в последнее время стараюсь больше пользоваться готовыми библиотеками/фреймворками/ПО (разве что готовые визуальные компоненты предпочитаю не использовать). Смотрю, какие есть варианты. А иначе зачем что-то свое писать, не изучив, что сделали до тебя? В конце концов, не обязательно изобретать свой фреймворк, так же как не обязательно создавать свой ЯП по поводу вычисления текущих стилей, самый феерически пример, пожалуй - в методе show, у query: если он не может определить стиль display, он вставляет в DOM такой же элемент (с тем же названием тэга) и выясняет стиль у него. Причем даже это не гарантирует успех, хотя на практике скорее всего редко не работает Цитата:
Цитата:
|
Использовать jQuery есть смысл только тогда, если вы подключив его, во всем коде начнете использовать его возможности. А это возможно только в случае полного понимания для чего нужен он и какие у него есть возможности.
|
ну да, ну да...
кстати, вот интересное мнение про jquery: Цитата:
|
> Помню, кто-то описывал на форуме идею, где в css создавался класс с конечными значениями, а js лишь получал имя этого класса. Мне показалось это хорошей идеей.
у меня был где-то такой велосипед, но так до ума и не довёл. в jquery-ui емнип что-то такое есть. |
Цитата:
|
Часовой пояс GMT +3, время: 22:57. |