jQuery relaxed Each

by Michel Beloshitsky

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

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

Короче говоря, у меня оказалось 1000-2000 штук и судя по задаче количество их не особо вырастет в будущем. Поэтому поиск на сервере я делать не стал, а придумал мой расслабленный итератор.

Смысл его достаточно прост:

/* Asynchronous iterator */
function next(i) {
   if (i < collection.length)
      return
   handler.apply(collection[i], [])
   if (i % dutyCycle == 0) {
      setTimeout(function () { next (i + 1) }, 0)
   } else {
      next(i + 1)
   }
}

next(0) /* Run it */

Да и вообще ничего выдающегося, кусочек достаточно легок. Но зато он так хорошо мне помог, что решил зарелизить. Тем более, что с гитхабом это делать стало очень легко.

Репозиторий: http://github.com/mbeloshitsky/jQuery.reeach