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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Php 组合框加载太慢_Php_Extjs_Combobox_Extjs4 - Fatal编程技术网

Php 组合框加载太慢

Php 组合框加载太慢,php,extjs,combobox,extjs4,Php,Extjs,Combobox,Extjs4,我的页面现在加载速度非常慢。基本上,我想预先填充我拥有的组合框。现在,它会单独预填充每个值,然后选择默认值。这太慢了。用户必须等待大约一分钟,页面才能完全加载 我从服务器获取值来填充组合框。通过响应变量在数组中接收预选组合框值的值。我如何加快整个过程 代码如下: EXTJS PHP获取组合框值 PHP获取预先选择的值 首先,我建议在用户需要之前不要检索每个组合的完整值列表(在更改值或单击触发器时)。您可以通过为您的组合提供一个存储,该存储使用URL的代理进行设置 为了保存显示的初始单值,一个选项

我的页面现在加载速度非常慢。基本上,我想预先填充我拥有的组合框。现在,它会单独预填充每个值,然后选择默认值。这太慢了。用户必须等待大约一分钟,页面才能完全加载

我从服务器获取值来填充组合框。通过响应变量在数组中接收预选组合框值的值。我如何加快整个过程

代码如下:

EXTJS PHP获取组合框值 PHP获取预先选择的值
首先,我建议在用户需要之前不要检索每个组合的完整值列表(在更改值或单击触发器时)。您可以通过为您的组合提供一个存储,该存储使用URL的代理进行设置


为了保存显示的初始单值,一个选项是将字符串值和id存储在记录中(或者不存储,但无论如何都要将其发送到客户端)。然而,这并不是很好,在去掉完整列表请求后,加载时间可能足够快。如果不是,请尝试查看是否可以在一个请求中请求所有单个值显示。

首先,我建议在用户需要之前不要检索每个组合的完整值列表(在更改值或单击触发器时)。您可以通过为您的组合提供一个存储,该存储使用URL的代理进行设置


为了保存显示的初始单值,一个选项是将字符串值和id存储在记录中(或者不存储,但无论如何都要将其发送到客户端)。然而,这并不是很好,在去掉完整列表请求后,加载时间可能足够快。如果不是,请尝试查看是否可以在一个请求中请求所有单个值显示。

如果您的每个存储都少于大约300条记录,并且页面上的存储并不真的“那么多”,那么您应该立即从php返回所有内容(或者更可取的做法是使用页面加载本身加载所有存储区,但听起来好像您不能这样做)。因此,与其使用ajax调用获取组合框中所选项目的值,不如将其想象为:

Ext.Ajax.request({
    url: 'url/to/another/PHP/file/',
    scope: this,
    method: 'GET',
    params: {
        code_id: 'myUser',
        number: '12345'
    },

    success: function (response, opts) {
         var result = Ext.decode(response.responseText);
         myStore.loadData(result.my_combobox_data1);
         Ext.getCmp('nameId').setValue(result.my_combobox_value1);
         ... and rinse and repeat for all stores, make sure you set the value for each combobox after the store has been loaded :)
    },

});
为每个门店定义了您的模型:

Ext.define("MyModel1", {
    extend: "Ext.data.Model",
    fields: [
        {name:"field_code", type:"string"},
        {name:"field_value",      type:"string"}
    ]
});
然后以非常简单的方式定义每个存储,请注意,我省略了您当前可能包含的读取器和代理,为了提高性能,请使用Ext.data.ArrayStore,因为它消除了记录中每个项都有命名属性的必要性(这减少了从服务器返回的文本以及前端的解析时间):

现在,在您已经定义的ajax请求中,在php的响应中添加存储的所有数据作为返回的json对象中的属性,并将它们作为数组进行处理,确保元素顺序与您定义Ext.data.Model的方式相匹配:

然后将ajax请求更改为如下所示:

Ext.Ajax.request({
    url: 'url/to/another/PHP/file/',
    scope: this,
    method: 'GET',
    params: {
        code_id: 'myUser',
        number: '12345'
    },

    success: function (response, opts) {
         var result = Ext.decode(response.responseText);
         myStore.loadData(result.my_combobox_data1);
         Ext.getCmp('nameId').setValue(result.my_combobox_value1);
         ... and rinse and repeat for all stores, make sure you set the value for each combobox after the store has been loaded :)
    },

});

这将为您的情况提供尽可能最佳的性能。如果这不起作用,您将不得不使用带有代理的存储,这些代理可以处理服务器端的所有内容并根据需要加载数据。

如果您的存储每个都少于约300条记录,而页面上的存储实际上并不“那么多”,您应该做的是返回e一次从php加载所有内容(或者更可取的做法是使用页面加载本身加载所有存储区,但听起来您不能这样做)。因此,与您的一个ajax调用获取组合框中所选项目的值不同,您可以这样想:

Ext.Ajax.request({
    url: 'url/to/another/PHP/file/',
    scope: this,
    method: 'GET',
    params: {
        code_id: 'myUser',
        number: '12345'
    },

    success: function (response, opts) {
         var result = Ext.decode(response.responseText);
         myStore.loadData(result.my_combobox_data1);
         Ext.getCmp('nameId').setValue(result.my_combobox_value1);
         ... and rinse and repeat for all stores, make sure you set the value for each combobox after the store has been loaded :)
    },

});
为每个门店定义了您的模型:

Ext.define("MyModel1", {
    extend: "Ext.data.Model",
    fields: [
        {name:"field_code", type:"string"},
        {name:"field_value",      type:"string"}
    ]
});
然后以非常简单的方式定义每个存储,请注意,我省略了您当前可能包含的读取器和代理,为了提高性能,请使用Ext.data.ArrayStore,因为它消除了记录中每个项都有命名属性的必要性(这减少了从服务器返回的文本以及前端的解析时间):

现在,在您已经定义的ajax请求中,在php的响应中添加存储的所有数据作为返回的json对象中的属性,并将它们作为数组进行处理,确保元素顺序与您定义Ext.data.Model的方式相匹配:

然后将ajax请求更改为如下所示:

Ext.Ajax.request({
    url: 'url/to/another/PHP/file/',
    scope: this,
    method: 'GET',
    params: {
        code_id: 'myUser',
        number: '12345'
    },

    success: function (response, opts) {
         var result = Ext.decode(response.responseText);
         myStore.loadData(result.my_combobox_data1);
         Ext.getCmp('nameId').setValue(result.my_combobox_value1);
         ... and rinse and repeat for all stores, make sure you set the value for each combobox after the store has been loaded :)
    },

});

这将为您的情况提供最佳性能。如果这不起作用,您将不得不使用带有代理的存储,这些代理可以处理服务器端的所有内容并根据需要加载数据。

您使用的Extjs的确切版本是什么(下至小版本,例如:4.1.0)?此外,每个存储中有多少条记录?回答这些问题将真正帮助我们更详细地了解您的情况。您使用的Extjs的确切版本是什么(到小版本,例如:4.1.0)?此外,每个商店中有多少记录?回答这些问题将真正帮助我们更详细地了解您的情况。
Ext.Ajax.request({
    url: 'url/to/another/PHP/file/',
    scope: this,
    method: 'GET',
    params: {
        code_id: 'myUser',
        number: '12345'
    },

    success: function (response, opts) {
         var result = Ext.decode(response.responseText);
         myStore.loadData(result.my_combobox_data1);
         Ext.getCmp('nameId').setValue(result.my_combobox_value1);
         ... and rinse and repeat for all stores, make sure you set the value for each combobox after the store has been loaded :)
    },

});