В этой заметке расскажу о своем опыте юнит-тестирования JS-кода, опыте использования среды выполнения тестов js-test-driver, ее возможности code coverage и скручивании ежа с ужом, а именно данных о code coverage от js-test-driver и генератора отчетов о покрытии PHP_CodeCоverage. Сам результат скручивания можно будет поглядеть и потрогать руками…
Continue reading…
JavaScript
Не так давно Яндекс стал отдавать данные о пробках для большого количества других регионов, кроме Москвы, Питера, Киева и Екатеринбурга. Как разместить слой с пробками на своей карте я писал ранее. Сегодня разберемся как можно получить список регионов, в которых обрабатываются пробки.
У Яндекс.Пробок наряду с http://trf.maps.yandex.net/trf/stat.js есть еще http://trf.maps.yandex.net/trf/coverage.js. Этот скрипт рассказывает нам, какие регионы покрыты данными о пробках (ну или хотя бы такая информация поддерживается).
Вот что отдает данный скрипт…
API Яндекс.Карт не позволяет «автоматически» нанести на карту слой с пробками. По крайней мере пока. Но проблема решается довольно просто средствами API.
API имеет методы для размещения на карте собственного слоя. Слой карты характеризуется источником тайлов (YMaps.TileDataSource). Для создания источника требуется указать шаблон URL с тайлами.
Источник тайлов
Первая проблема – узнать адрес источника, используемого Я.картами. Решается просто – смотрим с помощью FireBug на карту с пробками и видим в самом верху img с src=http://jgo.maps.yandex.net/tiles?l=trf&x=2500&y=1244&z=12&tm=1267986241. Здесь x,y и z – координаты тайла и информация о зуме карты. tm – временная отмека, за которую отдаются данные о пробках. Без указания параметра tm сервер тайлов отдает 404…
Простой плагин для jQuery, позволяющий закэшировать работу селекторов.
По наводке tenshi в камментах к http://olegas.habrahabr.ru/blog/63119/
(function($) {
var selectorCache = [];
$.cache = {
get : function(selector) {
return selectorCache[selector] || (selectorCache[selector] = $(selector));
},
clear: function(selector) {
selector == null ? selectorCache = [] : selectorCache[selector] = null;
}
}
})(jQuery);
Использовать примерно так:
// Before
$('#some .css .selector').some().action();
// After
$.cache.get('#some .css .selector').some().action();
Задача – сделать на PHP эвенты а-ля C# т.е. произвольный объект может генерировать события. Другие объекты могут на эти события подписываться непосредственно у экземпляра генерирующего объекта.
Continue reading…
Дано – раз в секунду дергается AJAX’ом скрипт, в нем несколько вызовов одной функции (назовем ее updater) с разными аргументами. Функция в соответствии с аргументами апдейтит некоторый набор DOM-элементов (меняет контент, скрывает, показывает) на текущей странице. Используется jQuery, визэффекты и т.п. Т.е. на клиента приходит примерно такой код…
updater('id1', 10, 20);
updater('id33', 11, 22);
updater('id181', 102, 27);
Проблема – после увеличения количества вызываемых функций (увеличилось количество типовых блоков) все жутко тормозит – много времени уходит на jQuery, на выбор DOM-элементов по селекторам.
Требуется по-возможности быстро и безболезненно, не меняя верстку и не отказываясь от jQuery оптимизировать процесс.
Continue reading…