Letting Firefox catch a breath while parsing LARGE
Monkey Targets Forums/HTML5/Letting Firefox catch a breath while parsing LARGE
| ||
...files. I'm managing to parse data files of up to 8KBytes, however, when attempting to parse files of say, 80Kbytes, the Browser doesn't like it too much. [EDIT] This problem was attributed to printing out too much debug to the printing buffer at the bottom of the browser, top tip - keep your debug beneath a couple of 100 lines. It initially reports - 'a script is not responding' I let it continue and then the whole browser 'greys out' before seeming to become totally unresponsive. Is there a way to let the Browser catch a breath - or am I simply expecting too much to expect a browser to be able to deal with such large (ish) amounts of data? |
| ||
There's nothing large about an 80KB file as such. The unresponsive message suggests that whatever your parsing code is doing it's taking a very long time and not returning to the event handler while doing it. The answer is to speed up your code and/or change it so that it does parsing in small amounts at a time and then returning to the event loop. |
| ||
I doubt this is OP's problem at only 80K, but is there any way to stream files on the HTML5 target? Neither FileStream nor TcpStream are supported in browsers AFAIK, and on a large enough file you wouldn't want to use a blocking method to load it. In raw JS you would want to use xhr to load it asynchronously and be told when it completes, but.... |
| ||
Thanks Sicilica and muddy_shoes, will investigate shortly. |
| ||
The answer is to speed up your code and/or change it so that it does parsing in small amounts at a time and then returning to the event loop. Having a bash at this now. |
| ||
I think the root of my problem is that the print buffer for my debug is being filled up. Is there a way to periodically flush what is in the print buffer to the debug area in the bottom of the browser? [EDIT] drastically reduced the debug I'm putting out - solved. |
| ||
Maybe it helps you? quick done an exampleStrict Import mojo #If LANG = "js" Then Extern Private Function ClearDebugOutput:Void() = "(function(){var el=document.getElementById(~qGameConsole~q);if(el){el.value=~q~q;}})" Public #Else Function ClearDebugOutput:Void() End #End Class Test Extends App Field _i:Int = 0 Method OnCreate:Int() SetUpdateRate(60) Return 0 End Method OnRender:Int() Cls(0, 0, 0) DrawText(Millisecs(), DeviceWidth() / 2, DeviceHeight() / 2, 0.5, 0.5) Return 0 End Method OnUpdate:Int() _i += 1 Print("I'm Debug!") If _i > 100 Then _i = 0 ClearDebugOutput() Print "Cleared" End Return 0 End End Function Main:Int() New Test() Return 0 End |
| ||
@K.o.g. , thanks for the feedback - a great way of clearing out the debug output. |