PDA

View Full Version : [CLOSED] Page load performance



matrixwebtech
Oct 08, 2014, 3:28 AM
Hi
My application in MVC and Razor view.In my entry page I have 7 combobox,some fields and a gridpanel, and I fill each combo with
.DataSource(ViewBag.MaterialCatergory),It will take always more than 30seconds sometime 48-55 seconds.

after that I remove
.DataSource() from all combo box and load the page again then I will take near about 6-7 seconds.which is respectively good.

but may be one day the grid panel contains more then 100 rows ,then what I do?

please suggest me best practice ,to tune page load performance .


Should I use Proxy instead of DataSource for all store?and load the store AfterRender? Is that helps to page load time?

For Control Listner

.Listeners(l =>
{

l.AfterRender.Handler = "this.getStore().reload()";
})

For Store

.AutoLoad(false)
.Proxy(X.AjaxProxy().Url(Url.Action("getproject")).Reader(Html.X().JsonReader().Root("data")))

Suppose there are 6 combo box and 1 grid panel in a page then after page render 7 Ajax request will occur,as per above approach. So is that cause any performance issue?or If I use
.Buffered(true) for every store is it improve page load?

please assists me .

Daniil
Oct 08, 2014, 6:14 PM
Hi @matrixwebtech,


.DataSource(ViewBag.MaterialCatergory)

How many data does it load?

In any way, you are on the right way. Using an AjaxProxy lets the data to be loaded in a separate request and let the main page to be loaded faster.

Moreover, if suitable, you can set AutoLoad="false" for the ComboBoxes' Stores. Then it will load the data on first trigger click.

Also consider using of remove paging.


but may be one day the grid panel contains more then 100 rows ,then what I do?

Generally speaking, 100 rows should not be a problem. Wait a bit, you use ComponentColumns (probably, seven?) and each ComponentColumn holds a ComboBox?

Ideally, providing us with a test case to reproduce the problem would be best.

Vladimir
Oct 08, 2014, 6:18 PM
Hi

First, it will be best if you provide runable test sample. In this case, we can investigate and give suggestions to improve it.



My application in MVC and Razor view.In my entry page I have 7 combobox,some fields and a gridpanel, and I fill each combo with

1

.DataSource(ViewBag.MaterialCatergory)







,It will take always more than 30seconds sometime 48-55 seconds.

What server side time rendering? Just need to understand what percents of that time belongs server side and what part to the client side. I can assume that you bind a big datasource for each widget (for example, with several thousands record) otherwise i cannot explain such long start of the page. So, 'ViewBag.MaterialCatergory' how many records in that datasource?



after that I remove

1

.DataSource()







from all combo box and load the page again then I will take near about 6-7 seconds.which is respectively good.

It proves my assumption that you bind big datasource (or may be datasourceis quite strange collection which is very heavy for enumeration and serialization). So, we need test sample from you for investigation



please suggest me best practice ,to tune page load performance .

Here you can find links to threads with some performance tips
http://forums.ext.net/showthread.php?42391-Performance-improvement-tips-while-using-EXT-NET-based-controls&p=192831&viewfull=1#post192831



Should I use Proxy instead of DataSource for all store?and load the store AfterRender? Is that helps to page load time?

It reduces initial time of page starting because data will be requested by separate ajax request after page rendering. But user should wait while the request is finished to start to work with that widget



Suppose there are 6 combo box and 1 grid panel in a page then after page render 7 Ajax request will occur,as per above approach. So is that cause any performance issue?

Yes, one request for each store with proxy. What you mean under performance issues? 7 requests is slower if compare with data bounding without proxy (via DataSource) (slower means that preparing time (data requsting + data rendering) will be increased) but page rendering time will be smaller and user can work with another widgets which don't request data



or If I use

1

.Buffered(true)







for every store is it improve page load?

Buffered must be used if you have big data on the server. In this case, store will request data by portions for displaying (infinite scrolling)
I suggest to use Buffered if you need to display >5000 records only and you don't want to use paging (buffered has many limitations, like you cannot add/remove records, it is for displaying data only, not for any modifications)

In any way, we can give more suitable advices after investigation your test sample (it should be runable and simplified as much as possible, any code which doesn't impact on issue reproducing should be removed). 48 seconds is too much and i am sure that we can reduce the time significantly

matrixwebtech
Oct 08, 2014, 7:59 PM
Hi,First of all thanks for reply Daniil and Vladimir.

@Daniil


How many data does it load?

it depends may be 1-10 or may be more then 100.


Moreover, if suitable, you can set AutoLoad="false" for the ComboBoxes' Stores. Then it will load the data on first trigger click.

yes Already doing this.


you use ComponentColumns (probably, seven?) and each ComponentColumn holds a ComboBox?

Not ComponentColumns ,I use Editor and each Editor holds a ComboBox.

@Vladimir


What server side time rendering? Just need to understand what percents of that time belongs server side and what part to the client side. I can assume that you bind a big datasource for each widget (for example, with several thousands record) otherwise i cannot explain such long start of the page. So, 'ViewBag.MaterialCatergory' how many records in that datasource?

Yes ,true.but not thousands record one of store load with 110 records with data source.


What you mean under performance issues?
Now for test I make 7 requests ,but It surely increase on development time.
suppose I make 20 or 30 requests is browser supports?or any other?



buffered has many limitations, like you cannot add/remove records, it is for displaying data only, not for any modifications)
Thanks for let me know limitations of buffered .

But guys good news I use my previous approach.

Using an AjaxProxy lets the data to be loaded in a separate request and let the main page to be loaded faster.

and now main page with all controls render and its take not more then 6 secs,I test 15 times (Internet speed 512 kbps) ,and more or less same result,5.32-6.17 secs.and data will come after a small delay(not more then 4 secs).

I am not use Datasource for stores.

I have One more finding ,may be it also a cause of this delay,not related to EXT.net but c#.If possible please give your comment.

I have a Class =>materialcategory,it has some property (may be more than 10)
But I use only 2 property of this class and make a list.


var list_tbl_Pur_Master_MaterialCategory = new List<tbl_Pur_Master_MaterialCategory>(dt.Rows.Count);
foreach (DataRow row in dt.Rows)
{
var values = row;
var _tbl_Pur_Master_MaterialCategory = new tbl_Pur_Master_MaterialCategory()
{
MaterialCatergoryID = Convert.ToInt64(values["MaterialCatergoryID"].ToString()),
CategoryName = Convert.ToString(values["CategoryName"].ToString()),
};
list_tbl_Pur_Master_MaterialCategory.Add(_tbl_Pur_ Master_MaterialCategory);
}
and return to store


return this.Store(_tbl_Pur_Master_MaterialCategory.Cast<object>().ToArray());

but I found in firebug it generate JSON record for each row like bellow


{"MaterialCatergoryID":10,"CreatedBy":0,"CreatedDate":"2014-10-09T00:45:36.2835054","IsActive":false,"ModifiedBy":0,"ModifiedDate":"2014-10-09T00:45:36.2835054","CompanyID":0,"BranchID":0,"CategoryName":"materialcheck","MaterialGroupID":0,"Parent_MaterialCatergoryID":0,"CategoryDescription":"","MaterialGroupName":"","Parent":""}

so the list prepare with its all property and and default value.
I just want to know is there any way with that I can initialize a list with specific member of this class,not all.

It will take some time to prepare a test case ,i will try asap.
is it ok,if I give URL of my application and you just go through with this.

Daniil
Oct 10, 2014, 1:49 PM
so the list prepare with its all property and and default value.
I just want to know is there any way with that I can initialize a list with specific member of this class,not all.

You can use the ModelSerializer helper class.
http://forums.ext.net/showthread.php?26842