Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs 如何缓存大型应用程序的组件_Extjs_Extjs4_Extjs4.1_Extjs Mvc - Fatal编程技术网

Extjs 如何缓存大型应用程序的组件

Extjs 如何缓存大型应用程序的组件,extjs,extjs4,extjs4.1,extjs-mvc,Extjs,Extjs4,Extjs4.1,Extjs Mvc,我需要设置一个相当大的应用程序与arround>20个主视图加上表单。主视图将至少包含一个网格,但最多可以包含十个网格。还有一些主视图包含门户面板 现在,需要相当长的时间才能打开一个主视图,但当我用一个而不是>20来测试它时,它不会发生。应用程序位于具有fit layout的视口中,其中包含具有Borderlayout的容器。主视图始终在中心渲染,而其他区域用于导航 我的第一种方法在选项卡面板中缓存内容 我的第一个方法是使用带有隐藏选项卡的选项卡面板。与此并行,我管理一个MixedCollect

我需要设置一个相当大的应用程序与arround>20个主视图加上表单。主视图将至少包含一个网格,但最多可以包含十个网格。还有一些主视图包含门户面板

现在,需要相当长的时间才能打开一个主视图,但当我用一个而不是>20来测试它时,它不会发生。应用程序位于具有fit layout的视口中,其中包含具有Borderlayout的容器。主视图始终在中心渲染,而其他区域用于导航

我的第一种方法在选项卡面板中缓存内容

我的第一个方法是使用带有隐藏选项卡的选项卡面板。与此并行,我管理一个
MixedCollection
,如果视图已经插入到选项卡面板中或必须创建,我会在其中进行查找。如果它已经被插入,我将从MixedCollection获取position并运行
setActiveTab()
。但它似乎毫无价值,因为使用setActiveTab()插入新的mainview或激活现有的mainview都需要相同的时间

那么,我做错了什么,我如何才能让它变得更好呢

编辑

问题似乎来自rendertime,每次使用setActiveTab()时组件似乎都会被重新引用。将视图渲染到中心面板最多需要2-3秒。因此,我认为我可以通过缓存已经创建的视图来加快速度,这样就不需要进行渲染和调整大小。我想我应该提到的是,在北方地区,每次都会呈现一个菜单,这不会有什么问题,但这不重要,不是吗

如何切换视图


我有一个额外的控制器来管理菜单视图和主视图的更改。为此,将从容器中删除菜单并添加新菜单,如果已经创建了视图,并且收到了选项卡索引并激活了选项卡,则在所述混合集合中对主视图执行查找。如果没有,则视图将作为新选项卡添加,并随后将其标识和索引添加到混合集合中。

它可能会帮助您查看

运行
Ext.suspendLayouts()开始更改视图之前,以及
Ext.resumealayouts(true)
完成所有视图之后

您还应该检查嵌套是否过多,这意味着您已经将许多组件嵌套到彼此中

示例:


如果网格是tabpanel中唯一的组件,那么如果您将网格放置在额外的面板中,然后放入tabpanel中,那么它将是嵌套过度的。

首先,我发现非活动选项卡将被填充。我不知道为什么。但我的存储没有加载活动标签。 其次,你的应用程序的大小并不重要。我们有很多视图,一切都运行得很快。 在大多数情况下,这取决于:

  • 首先是嵌套-检查您的代码。嵌套越少,速度越快。例如,如果您不需要面板提供的所有内容,请使用容器代替面板。因为所有这些都是在dom中添加更多div
  • 取决于如何创建视图。没有你的代码,很难说它为什么慢。也许每次打开选项卡或转到其他视图时都会创建视图
  • 正如所提到的@sra尝试使用suspendLayouts-这意味着您的浏览器将只呈现您的内容resumeLayouts,而不是每次添加任何组件时都重新呈现所有内容
  • 如果使用windows-请使用closeAction:隐藏而不是销毁
  • 不使用Ext.getCmp()。我还听说REF会减慢应用程序的速度,因为它们开始从主体搜索组件。但是它没有被证实的信息:)使用component.down('id')、component.up('xtype')它将只从您的组件而不是从主体进行搜索
  • 不是每次使用Ext.create('Panel')执行操作时都从控制器创建视图。这意味着它每次都会被创造出来
  • 减少使用全局事件,因为这也会降低应用程序的速度

  • 在没有代码的情况下,很难说问题出在哪里。这是唯一能帮助你的几点。但是我的建议是查看嵌套以及如何和在何处创建视图。

    您可以动态加载视图-因此每个视图都是按需加载的。这就是你想要的吗?@Izhaki不,大多数视图(类)在应用程序启动时就已经存在了。请参见我的编辑…您可能正在渲染所有组件。在我们的应用程序中。我们有76个视图,109个模型,66个控制器,它的运行速度非常快,问题不在于你的应用程序的大小。但在什么样的应用程序。代码正在那里执行。请给我们看一些代码。@lontivero不,我不是每次都渲染所有视图,只有两个:北面的菜单和中央的主视图。发布那一堆代码是毫无价值的。没有人能解决这个问题。但是我会补充更多的信息。。。我昨天刚刚在这个问题上纠结了一下,因为另一个用户给了我建议,让我把这个和显示字段一起使用。。。我要试试看!无论如何,谢谢你的回复!令人惊叹的!成功了!!这似乎是所有关于一些过度嵌套和许多系列渲染!非常感谢你!谢谢你的回答和提示。sra的答案已经解决了这些问题