Итератор - прохождение больших массивов в JavaScript
Предположим у вас есть очень большой массив, который необходимо обойти (или функция, которую необходимо вызвать очень большое число раз). Воспользовавшись стандартными методами (for, while) вы понимаете, что приложение зависает на неприлично большое количество времени. Предлагаю решить эту проблему с помощью класса Iterator.
До того как вы вчитаетесь в код поясню вкратце чем занимается итератор:
- Принимает в качестве аргумента колбэк, массив и хэш опций.
- Колбэк будет вызываться для всех значений массива (хотя можно задать любое число его вызовов и без массива) и принимать в качестве аргументов всю необходимую информацию о текущем шаге итерации: текущий индекс, значение массива для этого индекса, общее число всех элементов.
- В итераторе вызов колбэка происходит в небольших циклах for, которые инициализаруются последовательно с интервалом до тех пор, пока все вызовы не будут осуществлены.
Изменение метода интерполяции изображения в CSS
При масштабировании изображения разные браузеры используют различные методы интерполяции, между которыми иногда получается переключаться.
Internet Explorer
IE версии 6 и ниже использует метод ближайшего соседа (Nearest Neighbor interpolation) при масштабировании. IE7+ также поддерживает бикубическую интерполяцию (Bicubic interpolation). И начиная с 7 версии с помощью свойства -ms-interpolation-mode можно переключаться между этими двумя методами.
По умолчанию в ИЕ7 при масштабе страницы 100% включена интерполяция методом ближайшего соседа, при изменении масштаба дефолтной становится бикубическая интерполяция. В ИЕ8-9 по умолчанию всегда включена бикубическая интерполяция независимо от масштаба страницы.
img.highqual { -ms-interpolation-mode:bicubic }
img.nearestn { -ms-interpolation-mode:nearest-neighbor }
Кэширование длины массива
Есть мнение, что кэширование длины массива увеличивает производительность. Якобы обращение к свойству объекта занимает больше времени, чем обращение к примитиву и на больших циклах лучше кэшировать свойство length. Проверим с помощью jsfiddle.net ряд утверждений:
- имеет ли место сам факт снижения производительности без кэширования,
- в каких браузерах проблема актуальнее,
- начиная с какой длины массива имеет смысл вспомнить о кэшировании.
Оператор ~
Подсмотрено здесь. В JavaScript есть оператор тильда (побитовое НЕ), выполняющий для целых чисел фактически -( n + 1 ). Примеры:
~0 // -1 ~1 // -2 ~-1 // 0
Так как -1 тильда превращает в ноль, довольно удобно использовать этот опереатор совместно с indexOf() для определения факта вхождения подстроки:
var s = "string";
!!~s.indexOf('s') // true
!!~s.indexOf('t') // true
!!~s.indexOf('h') // false
UPD. Дробную часть числа тильда отбрасывает:
~123.456 // -124
Комбинация двух тильд можно использовать вместо parseInt():
~~123.456 // 123
Оператор запятая
Все сведения были подсмотрены в одноименной статье на Хабре. Сделаю выжимку самого ценного и интересного. Примеры и текст мной модифицированы для улучшения понимания.
Вводная
var a = (10, 7, 5); // 5 // оператор запятая выполняет все операнды (слева направо) // и возвращает значение последнего оператора.
Оператор запятая имеет наименьший приоритет из всех операторов:
(function() {
return 5 * 2 + 3, 22; // 22
})();
+++
Прекрасные анимации на canvas и не только: http://hakim.se/
+++: сервисы
Распаковка пожатых джаваскриптов: http://jsbeautifier.org/.
Первый, второй, третий обфускаторы для JavaScript и статья о них на Хабре.
Куда же мы без http://closure-compiler.appspot.com/home.
Эволюция
Раз
jQuery(function($) {
var _link = $("#component_init_link"),
_block = $("#component"),
_close = $(".close", _block);
_link.click(function() {
_block.show();
return false;
});
_close.click(function() {
_block.hide();
return false;
});
});
+++
К изучению:
Modernizr
HTML5 ★ BOILERPLATE
jQuery Waypoints