jQuery-плагин лайфстрим


Это плагин, который отслеживает онлайн-активность ака лайфстрим. Вы сейчас в состоянии использовать каналы как:

  • Вкусные
  • Фликр
  • На GitHub
  • Читатель Google
  • Последние.ФМ
  • Сайте StackOverflow
  • Твиттер
  • Ютуб

Сначала я решил загружать все каналы в конце всех асинхронных запросов. Это требуется только один запрос дом в конце.

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

Что я делаю сейчас меняет дом после каждого запроса корма (например, Твиттер). На данный момент это означает 8 изменения дом.

Что бы быть лучшей практике в данной ситуации? Делаем setTimeout и заходя в дом после например 400ms? Или вы бы оставить все как есть сейчас?

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

/**
* Initializes the lifestream plug-in
* @param {Object} config Configuration object
*/
$.fn.lifestream = function(config){

var outputElement = this;

// Extend the default settings with the values passed
var settings = jQuery.extend({
  "classname": "lifestream",
  "limit": 10
}, config),
data = {
  "count": settings.list.length,
  "items": []
};

var finished = function(inputdata){

  $.merge(data.items, inputdata);

  data.items.sort(function(a,b){
      if(a.date > b.date){
          return -1;
      } else if(a.date === b.date){
          return 0;
      } else {
          return 1;
      }
  });

  var div = $('<ul class="' + settings.classname + '"/>');

  var length = (data.items.length < settings.limit)
    ? data.items.length
    : settings.limit

  for(var i = 0, j=length; i<j; i++){
    if(data.items[i].html){
      div.append('<li class="'+ settings.classname + "-"
        + data.items[i].service + '">'
        + data.items[i].html + "</li>");
    }
  }

  outputElement.html(div);

}

var load = function(){

  // Run over all the items in the list
  for(var i=0, j=settings.list.length; i<j; i++) {
    var item = settings.list[i];
    if($.fn.lifestream.feeds[item.service] &&
        $.isFunction($.fn.lifestream.feeds[item.service])){

      $.fn.lifestream.feeds[item.service](item, finished);
    }
  }
}

load();

};

Полный код:

Документация:



Комментарии
1 ответ


Сначала я решил загружать все каналы в конце всех асинхронных запросов. Это требуется только один запрос дом в конце. Проблема с этим подходом заключается в том, что он просто занимает слишком много времени для загрузки. Некоторые запросы по тайм-ауту, а другие просто потребовалось время.

И мне непонятно, почему запросы по тайм-ауту, но вы могли просто хранить результаты ответов в памяти, а не то, что вы делаете; логика синхронизации не нужно, нужно только знать, когда все запросы закончились. Однако, недостатком такого подхода является то, что тайм-ауты могут сделать ваше приложение не показать своим посетителям, что вы действительно не хотите делать...


Что я делаю сейчас меняет дом после каждого запроса корма (например, Твиттер). На данный момент это означает 8 изменения дом.

Мне кажется, что 8 дом изменения тривиальны, чтобы сделать в вашем браузере; но вот чтобы на самом деле выяснить, сколько просит ваш код должен быть способен обрабатывать.

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

3
ответ дан 29 марта 2012 в 06:03 Источник Поделиться