Как стать автором
Обновить

Джон Резиг: WebKit — это jQuery для браузерных движков

Время на прочтение3 мин
Количество просмотров31K
imageС тех пор, как стало известно, что Opera полностью переходит на движок WebKit (как в мобильном, так и в десктопном вариантах своего браузера), в Твиттере не утихает стон, плач и скрежет зубовный. Пожалуй, мне есть что сказать по этому поводу, ведь похожие чувства я испытывал в 2008-2009 годах в отношении Google Chrome. А сейчас, в 2013, команда разработчиков Chrome/Chromium убедительно доказала, что использование готового движка WebKit вовсе не привело к стагнации и недостатку в инновациях. На самом деле это позволило ускорить разработку, тратя меньше времени на реализацию стандартов. Я бы сказал, что WebKit — общепринятый фреймворк для создания соответствующей стандартам части веб-браузера — это практически то же самое, что и jQuery — общепринятый фреймворк для создания соответствующей DOM-стандартам части веб-приложения.

Вот некоторые из аргументов против такого перехода:
Читать дальше →
Всего голосов 116: ↑100 и ↓16+84
Комментарии95

Вышла версия jQuery 1.6 RC 1

Время на прочтение1 мин
Количество просмотров478
Джон Резиг позавчера сообщил о выходе предпросмотровой версии будущей библиотеки jQuery 1.6.

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

Резиг прилагает довольно обширный список изменений в версии 1.6 RC 1, в основном сводящихся к исправлению ошибок (иногда довольно замысловатых), ко сглаживанию шероховатостей, к ускорению работы отдельных функций. Есть и заметные новинки. Помимо тех, которые я ужé упоминал в обзоре бета-версии, появилась возможность вызывать jQuery.noConflict() в любое время, а также новый метод jQuery.holdReady() для того, чтобы при необходимости можно было придержать наступление события ready.

Метод .animate() снабдили поддержкою deferred-интерфейса (см. [1], [2]), так что делается возможным простое навешивание такой функции, которая должна сработать опосля завершения всех анимаций:
$.when(
   $elements.animate(properties),
   $elements2.animate(properties2),
   …
).then(function(){
   …
});

Вы наверняка согласитесь, что эта новинка необыкновенно приятна, потому что совершенно избавляет в таких случаях от необходимости возёхаться.
Всего голосов 64: ↑47 и ↓17+30
Комментарии25

Джон Резиг: Пишите код каждый день

Время на прочтение5 мин
Количество просмотров129K
Прошлой осенью работа над моими побочными проектами зашла в тупик: я практически не продвигался вперёд и у меня никак не получалось делать больше, не принося в жертву свою основную работу в Khan Academy.

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

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

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

image
Иллюстрация Стивена Резига
Читать дальше →
Всего голосов 196: ↑183 и ↓13+170
Комментарии56

10 отцов-основателей веба

Время на прочтение6 мин
Количество просмотров5.1K
Хотя выражение «отцы-основатели» часто используется в сочетании с такими людьми, как Бенджамин Франклин, Томас Джефферсон и Джордж Вашингтон, мы хотели бы подумать об этом выражении на глобальном уровне.

А что же более глобальное, чем Всемирная паутина?

Так что мы попробуем рассмотреть 10 лиц, которые сыграли важную роль в формировании Всемирной паутины и интернет-культуры.
Читать дальше →
Всего голосов 117: ↑81 и ↓36+45
Комментарии52

Самовызывающийся конструктор Джона Резига и размышление о том, почему это решение не прижилось

Время на прочтение7 мин
Количество просмотров13K
Настала пора мысленно вернуться на четыре с небольшим года назад ко блогозаписи «Simple “Class” Instantiation» из блога Джона Резига, прославленного создателя необыкновенно удобной библиотеки jQuery. И вернёмся.

Однако же, так как я вовсе не вижу её в результатах поиска на Хабрахабре по слову «Resig», то поневоле приходится думать, что эту полезную блогозапись никто не удосужился перевести (или хотя бы пересказать) за четыре прошедших года — мне придётся, стало быть, самостоятельно пересказать блогозапись Резига прежде, чем я исполню моё главное намерение: поразмыслить вслух, почему же предложенный Резигом способ решения указанной им проблемы так и не сделался общераспространённым. И перескажу. (Сам этот пересказ ужé был бы полезен читателю, даже кабы я к нему ничего от себя не прибавил. А я прибавлю.)



Шестого декабря 2007 года Резиг рассмотрел, что получается, когда в джаваскрипте используется операция «new» для создания объекта (в языках с классами мы сказали бы «экземпляра класса»):

function User(first, last){
   this.name = first + " " + last;
}

var user = new User("John", "Resig");

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

Поэтому, рассудил Резиг, рано или поздно кто-нибудь попробует вызвать «User()» без «new» и тем получит на свою голову сразу две неприятные проблемы. Во-первых, переменная «user» останется неопределённою: функция «User()» задумана ведь как конструктор, а значения она никакого не возвращает. Во-вторых, что ещё хуже, попытки обращения к «this» изнутри такого (некорректно вызванного) конструктора неизбежно приведёт к засорению глобального пространства имён — а это чревато зловещими и трудноуловимыми последствиями. Обе проблемы Джон Резиг продемонстрировал на примере:

var name = "Resig";
var user = User("John", name);
// здесь переменная «user» не определена
// БОЛЕЕ ТОГО: значение «name» теперь ужé не «Resig»!
if ( name == "John Resig" ) {
   // фигассе!…
}

Читать дальше →
Всего голосов 78: ↑67 и ↓11+56
Комментарии50