Silverlight HCI:让用户提前等待,还是分期付款?

Silverlight HCI:让用户提前等待,还是分期付款?,silverlight,hci,Silverlight,Hci,我正在编写一个silverlight应用程序,它查询web服务以填充树控件。每个元素将至少有2个级别的子元素,因此如下所示: a +-b +-c d +-g +-h e +-i +-j f +-k +-l web服务API是这样的,我一次只能得到一个级别的子节点,所以在第一次访问中,我可以得到a、d、e、f。为了得到b,g,i,k,我必须做4次旅行。同样地,我还要再跑4次才能得到c,h,j,l。(该服务实际上允许我在一次行程中获取所有节点,但它不同时提供父子关系:-() 我的问

我正在编写一个silverlight应用程序,它查询web服务以填充树控件。每个元素将至少有2个级别的子元素,因此如下所示:

a
+-b
  +-c
d
+-g
  +-h
e
+-i
  +-j
f
+-k
  +-l
web服务API是这样的,我一次只能得到一个级别的子节点,所以在第一次访问中,我可以得到a、d、e、f。为了得到b,g,i,k,我必须做4次旅行。同样地,我还要再跑4次才能得到c,h,j,l。(该服务实际上允许我在一次行程中获取所有节点,但它不同时提供父子关系:-()

我的问题是:我应该让用户在获取树视图的所有节点之前等待一段时间,还是只获取顶部的几个节点,然后按需获取其他节点,还是在后台任务中?此外,节点可以异步更改,因此如果我获取所有节点,我需要“刷新”按钮,如果我按需操作,我必须有一个缓存策略


哪一个最适合用户?

一种折衷方法,即先加载第一级,然后在后台加载其余项目,并根据需要按需覆盖。如果加载节点,则宽度优先(例如A、d、e、f,然后是b、g、i、k),而不是深度优先(例如A、d、e、f,然后是b、c)您可以将加载重定向到最新扩展的节点。

一种折衷方法,即先加载第一级,然后在后台加载其余项目,按需覆盖。如果加载节点,则宽度优先(例如A、d、e、f,然后是b、g、i、k),而不是深度优先(例如A、d、e、f,然后是b、c)您可以将加载重定向到最新扩展的节点上。

就个人而言,作为用户,我希望所有数据都提前加载,以便在应用程序完成加载后,我可以相信我不必再等待(或至少不等待太多)

但是,我认为这取决于应用程序/数据的几个特点:

  • 数据的动态性如何?更新频率是否高于用户浏览节点的速度?如果更新频率高于用户浏览节点的速度,则您必须在用户浏览数据时读取数据,否则您可能只能偶尔更新数据,并在执行重要操作之前检查最新的数据
  • 在正常使用过程中,用户将浏览多少数据?如果他们在整个树中不断浏览,那么加载整个树是很重要的。另一方面,如果大多数用户通常只会扩展树的一小部分,那么按需加载可能会更好,这样您就不会浪费时间加载他们无论如何都看不到的数据
  • 这对性能有多大影响?加载所有数据真的需要很长时间吗?如果数据不太多,可能整个过程可以在几秒钟内加载,在这种情况下,实施优化的工作量对最终用户来说并不重要,反过来也不会有好的效果投资回报

你很可能没有明确的答案来回答这些问题,但是当你攻击这个有趣的问题时,他们可能会很好的考虑。

< P>个人,作为一个用户,我希望所有的数据都被加载到前面,这样一旦应用程序完成加载,我就可以相信我不再需要等待(或者至少很少)。

但是,我认为这取决于应用程序/数据的几个特点:

  • 数据的动态性如何?更新频率是否高于用户浏览节点的速度?如果更新频率高于用户浏览节点的速度,则您必须在用户浏览数据时读取数据,否则您可能只能偶尔更新数据,并在执行重要操作之前检查最新的数据
  • 在正常使用过程中,用户将浏览多少数据?如果他们在整个树中不断浏览,那么加载整个树是很重要的。另一方面,如果大多数用户通常只会扩展树的一小部分,那么按需加载可能会更好,这样您就不会浪费时间加载他们无论如何都看不到的数据
  • 这对性能有多大影响?加载所有数据真的需要很长时间吗?如果数据不太多,可能整个过程可以在几秒钟内加载,在这种情况下,实施优化的工作量对最终用户来说并不重要,反过来也不会有好的效果投资回报

<>最有可能的是你对这些问题没有明确的答案,但是当你攻击这个有趣的问题时,他们可能会很好的考虑。

简短的答案是让用户尽可能少的等待。如果你在应用程序负载上等待10-20秒,他们会诅咒你的名字,但是不会注意到树的0.1-0.2秒。要展开的节点

我有一个类似结构的应用程序正在生产中。我无法提前加载,因为它会有效地加载整个数据库。以下是我的策略:

  • 树控件从根下面展开的1级开始
  • 每个未展开的节点都有一个虚拟子节点,以便显示[+]展开图标
  • 当一个节点展开时,它会触发一个被应用捕获的事件。如果唯一的子节点是虚拟节点,则会删除虚拟节点,并从数据库中加载子节点
  • 可见节点不会自动反映数据中的更改,但是树的上下文菜单具有可用于刷新节点的刷新项
我曾考虑过异步显示更新,但倾向于避免这种情况,因为树中可以显示大量数据,如果我检查所有更新是否有更改,我会担心数据库负载