scroll - 如何在 SproutCore ListView 中预加载项目?

标签 scroll sproutcore sproutcore-views

我有一个相对较快的 SproutCore 应用程序,我正试图让它更快一点。

现在,当用户滚动我的 SC.ListView 并滚动查看一些尚未从服务器加载的列表项(例如从关系中加载)时,应用程序会自动调用服务器以加载这些记录。尽管这很快,但我的列表项仍有一小段时间是空白的。

我知道我可以让他们说“正在加载...”或类似的东西(我有),但我想知道:有没有办法预加载我的“屏幕外”记录,以便在用户滚动时,列表项已经加载?

我的 ListItemViews 将相当大(以像素为单位),因此从 AJAX 的角度来看,即使加载两倍的数据量也不会成为杀手,如果用户滚动时总是加载内容会很好(除非他们滚动 SUPER-SUPER-fast,在这种情况下,我可以让他们看到加载指示器)。

我目前通过将以下内容添加到我的 SC.ListView 找到了解决方案,但我注意到移动设备上的一些主要性能问题,它们与进行此更改直接相关,所以我想知道是否有更好的方法。

    contentIndexesInRect: function(rect) {

      rect.height = rect.height * 2;

      return sc_super();

    }

最佳答案

覆盖 contentIndexesInRect 是我这样做的方式。不过,我不会将其翻倍——我可能会从 sc_super() 获得结果,然后将一些额外的项目添加到结果索引集中。 (我相信它会重新卡住,因此您可能必须克隆-编辑-卡住。)额外的一两个可能会给您足够的喘息空间来加载内容,而不会对明显的性能问题造成几乎同样的影响。

我很惊讶它会导致主要的性能问题。在我看来,您的列表项本身可能比它们需要的重量更重——例如,它们可能有很多绑定(bind)可以钩住和解开。如果这是正在发生的事情,您可能会从提高他们的效率中受益更多。

关于scroll - 如何在 SproutCore ListView 中预加载项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20010499/

相关文章:

android - 设置 ScrollView 的内容偏移量

java - 构建丰富的 Web 应用程序有哪些选择?

sproutcore - 从tabview菜单未加载splitview

javascript - 使用Sproutcore 1.6实现下拉列表

layout - 如何在 SproutCore 中设置 LabelView 的文本大小

sproutcore - 如何将数据推送到 SC.SourceListView

iOS Safari 粘性输入底部不需要的空白

javascript - 如何在jquery mobile中启用垂直滚动

javascript - jQuery滚动事件卡住页面

javascript - Sproutcore 中的文本字段输入错误警报