We are almost finished a large application using Servoy Smart Client (currently 3.5.7). In the last tests, I noticed some performance issues so I monitored several things, among them I monitored bandwidth used by the smart client and I came up with a great surprise: Smart Client uploads far more data than it downloads!!! And I mean “far more”…
The test is simple, I enter the main window of our application and I start navigating records up and down without exiting the same form and the results are kind of amazing:
Navigating from record 1 to record 20 using custom navigation arrows (up-right on the window)
Uploaded data: 1.26 MB
Downloaded data: 263.2 KB
[attachment=1]mainForm.jpg[/attachment]
[attachment=2]consumo.jpg[/attachment]
[attachment=0]bandwidth2.jpg[/attachment]
Going back from record 20 to record 1 using custom navigation arrows (up-right on the window)
Uploaded data: 1.11 MB
Downloaded data: 238.6 KB
This is a big issue because more than 10 clients navigating records would cause a bandwidth consumption of more than 2MB/s
The form has some logic on the nextRecord/previousRecord/recordSelection, but this shouldn’t be a problem, should it?. I thought that with Smart Client application logic was executed on client (though calls to server had to be made somewhere), but it seems that the client sends a lot of information so the server execute data…
I’ve used Microsoft Network Monitor to inspect TCP packets sent between client and server and It seems that with every time a click on the navigation arrow several packets send this info:
..K°OZ..ÂÜ.x..E...þë@.?..{À¨º*À¨º..l.Kèd.e?ÑÓP.ÿêA1..P¬í..w"£ôò-.®?.ÍT¢^....yF.ð?.ÿÿÿÿsíl.=?..t.$dd260149-d1cf-4d43-9c5e-5d052e4208d4t..ivi_gcq.~..psr.-com.servoy.j2db.util.serialize.ReplacedObjectm\2ò¦æí?...S..aL..dot..Ljava/lang/String;L..fort..Ljava/lang/Object;t.´http://serverequipo2:8080/lib/j2db.jar http://serverequipo2:8080/lib/js.jar http://serverequipo2:8080/lib/BrowserLauncher2.jar http://serverequipo2:8080/lib/commons-logging.jar http://serverequipo2:8080/lib/MRJAdapter.jar http://serverequipo2:8080/beans/molecule.jar http://serverequipo2:8080/beans/datasetgrid.jar http://serverequipo2:8080/beans/DndDBTreeView.jar http://serverequipo2:8080/beans/foundsetgrid.jar http://serverequipo2:8080/beans/htmlbean.jar http://serverequipo2:8080/beans/it2be-calendarbean.jar http://serverequipo2:8080/beans/swingbeans.jar http://serverequipo2:8080/beans/s11_chart.jar http://serverequipo2:8080/beans/IClock.jar http://serverequipo2:8080/beans/datagrid.jar http://serverequipo2:8080/beans/dbtreeview.jar http://serverequipo2:8080/lafs/skinlf.jar http://serverequipo2:8080/lafs/kunststoff.jar http://serverequipo2:8080/lafs/tinylaf.jar http://serverequipo2:8080/plugins/default_validators.jar http://serverequipo2:8080/plugins/xmlreader.jar http://serverequipo2:8080/plugins/rawSQL.jar http://serverequipo2:8080/plugins/images.jar http://serverequipo2:8080/plugins/images/jai_imageio.jar http://serverequipo2:8080/plugins/images/metadataextractor.jar http://serverequipo2:8080/plugins/dialog.jar http://serverequipo2:8080/plugins/dateUtils.jar http://serverequipo2:8080/plugins/drmaison-lib/support.jar http://serverequipo2:8080/plugins/tabxport.jar http://serverequipo2:8080/plugins/scheduler.jar http://serverequipo2:8080/plugins/scheduler/quartz.jar http://serverequipo2:8080/plugins/excelxport.jar http://serverequipo2:8080/plugins/jakarta-poi/jakarta-poi.jar http://serverequipo2:8080/plugins/udp.jar http://serverequipo2:8080/plugins/mail.jar http://serverequipo2:8080/plugins/serialize.jar http://serverequipo2:8080/lib/slf4j-api.jar http://serverequipo2:8080/lib/client/slf4j-jdk14.jar http://serverequipo2:8080/plugins/serialize/jabsorb-1.2.2.jar http://serverequipo2:8080/plugins/ivi_popupmenu.jar http://serverequipo2:8080/plugins/file.jar http://serverequipo2:8080/plugins/pdf_output.jar http://serverequipo2:8080/plugins/pdf_output/itext.jar http://serverequipo2:8080/plugins/pdf_output/bcmail-jdk14-135.jar http://serverequipo2:8080/plugins/pdf_output/bcprov-jdk14-135.jar http://serverequipo2:8080/plugins/it2be-calendar.jar http://serverequipo2:8080/plugins/it2be-runtime/calendar-runtime.jar http://serverequipo2:8080/plugins/it2be-lib/migcalendarbean.jar http://serverequipo2:8080/plugins/it2be-lib/ical4j.jar http://serverequipo2:8080/plugins/it2be-server.jar http://serverequipo2:8080/plugins/it2be-updatemanager.jar http://serverequipo2:8080/plugins/it2be-lib/it2be-helper.jar http://serverequipo2:8080/plugins/it2be-lib/it2be-keys.jar http://serverequipo2:8080/plugins/it2be-lib/it2be-utilities.jar http://serverequipo2:8080/plugins/it2be-runtime/server-runtime.jar http://serverequipo2:8080/plugins/drmaison.jar http://serverequipo2:8080/plugins/drmaison-lib/servoy3support.jar http://serverequipo2:8080/plugins/drmaison-lib/servoy35support.jar http://serverequipo2:8080/plugins/drmaison-lib/servoy4support.jar http://serverequipo2:8080/plugins/it2be-tools.jar http://serverequipo2:8080/plugins/spellcheck.jar http://serverequipo2:8080/plugins/spellcheck/RapidSpell.jar http://serverequipo2:8080/plugins/spellcheck/RapidSpell_US_UK_Dict.jar http://serverequipo2:8080/plugins/jasperPluginRMI.jar http://serverequipo2:8080/plugins/jasperPluginRMI/commons-beanutils.jar http://serverequipo2:8080/plugins/jasperPluginRMI/commons-collections.jar http://serverequipo2:8080/plugins/jasperPluginRMI/commons-digester.jar http://serverequipo2:8080/plugins/jasperPluginRMI/commons-javaflow.jar http://serverequipo2:8080/plugins/jasperPluginRMI/itext.jar http://serverequipo2:8080/plugins/jasperPluginRMI/jasperreports.jar http://serverequipo2:8080/plugins/jasperPluginRMI/jdt-compiler.jar http://serverequipo2:8080/plugins/popupmenu.jar http://serverequipo2:8080/plugins/ivi_ldaplogin.jar http://serverequipo2:8080/plugins/kioskmode.jar http://serverequipo2:8080/plugins/ivi_valuelist.jar http://serverequipo2:8080/plugins/http.jar http://serverequipo2:8080/lib/commons-httpclient.jar http://serverequipo2:8080/lib/commons-codec.jar http://serverequipo2:8080/plugins/agent.jar http://serverequipo2:8080/plugins/amortization.jarxp..t..Qur..[Ljava.lang.Object;ÎX?.s)l...pxp....sq.~....q.~..t..TB_PERSONAsr..java.util.ArrayListxÒ.?Ça...I..sizepxp....w.....sq.~....q.~..uq.~......sr..java.lang.Integer.â ¤÷?8...I..valuepxr..java.lang.Number?¬?..?à?...pxp....sq.~....q.~..uq.~......sq.~......pt..nxsr..java.lang.Byte?N`?îPõ....B..valuepxq.~...sr..java.util.HashMap..ÚÁÃ.`Ñ...F..loadFactorI..thresholdpxp?@......w.........t..FILTERsq.~....q.~..sq.~......w.....sq.~....q.~..uq.~......ur..[IMº`&vê²¥...pxp........uq.~......sq.~....q.~..uq.~......q.~..sq.~....¶.ur..[[Ljava.lang.Object;.¿ûSäkÛÊ...pxp....uq.~......sr..java.lang.Long;?äÌ#ß...J..valuepxq.~..........sr..java.lang.BooleanÍ r?Õ?úî...Z..valuepxp.xxpppw..........
I’ve also noted that every user_query is sent to the server (so it could process it I guess). Maybe this is also increasing uploaded data… However I’d like to understand better what is causing this huge traffic and if there is anything I could do to reduce it.
Thanks!!