in reply to Re^3: webperl: fetching data over the web
in thread webperl: fetching data over the web

Ah, I see - the democode stuff is in the repo, and it'll also be part of the next release. webperl_demo.html uses Perl.makeOutputTextarea(id), which merges STDOUT and STDERR (which I just added to the documentation, thanks :-) ).

Replies are listed 'Best First'.
Re^5: webperl: fetching data over the web
by LanX (Saint) on Nov 08, 2018 at 17:39 UTC
    OK I'm back online. :)

    I created the following page called weblib_demo.html inside the deflated zip-dir (webperl_prebuilt_v0.07-beta.zip) from your webpage:

    It shows the alert box from JS but the Perl execution blocks the tab till I get a "Tab crashed" message (in German) after a minute or so.

    Reproducible in FF and chrome.

    I'm suspecting it has to do with error handling of the deprecation warning.

    I tried to copy the democode directory directly from github, but calling demo.html creates an endless loop of "Perl initializing" and "ended" messages.

    I suppose the webperl versions are not compatible and I need to clone the whole github rep.

    That's the messages I get on the console

    I think creating a new zip including the "democode" stuff would be helpful for causal tests.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      Thank you, with that HTML file I can reproduce it too. (BTW, req.open('GET', 'http://localhost:5000/emperl.js', false); should probably be req.open('GET', url, false);)

      emperl.js is pretty huge, so I tried changing it to webperl.js, and although it exhibited the same behavior of seeming to block the webpage, after a little while it got unstuck and displayed the output. If you do print length(js(...)) instead of print js(), you get a result much quicker. The same is true if you remove the <textarea> from the HTML page, which causes the output to go to the JS console. There is obviously something very inefficient going on with the <textarea>, I'll take a guess that it's this line: ta.value = ta.value + str;.

      I didn't put a lot of effort into optimizing the STDOUT/ERR routines because in the WebPerl applications I was imagining, there wouldn't be any console output, and everything would get handled through the UI. But in the case of this textarea, there's certainly a lot of room for improvement. (Patches welcome :-) )

      The endless loop of initializing/ended is also interesting, something I haven't seen yet, could you tell me the steps to reproduce that?

        running in Edge gives more hints

        weblib_demo.html ...

        prints this output into the textarea

        wasm streaming compile failed: CompileError: Function body too big falling back to ArrayBuffer instantiation failed to asynchronously prepare wasm: CompileError: Function body too + big CompileError: Function body too big CompileError: Function body too big

        plus a popup "Perl Aborted"

        democode/demo.html ...

        does 2-4 popups saying "Perl aborted"

        I also have the feeling that a reload doesn't do a reset of the Perl engine.

        > should probably be req.open('GET', url, false);

        Indeed, fixed :)

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        > The endless loop of initializing/ended is also interesting, something I haven't seen yet, could you tell me the steps to reproduce that? NB demo.html not index.html like in the online version.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        > There is obviously something very inefficient going on with the <textarea>, I'll take a guess that it's this line: ta.value = ta.value + str;.

        I've testet it in pure JS inside your webperl/plack environment.

        Adding the whole of emperl.js to a textarea works without problem in my FF.

        But appending 3000 lines in a loop creates an "out of memory" exception (adding only half the lines still works)

        So buffering output (think $| ) might be a solution.

        I'm expecting your ta.scrollTop = ta.scrollHeight; to mean even more trouble. *

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        *) indeed scrolling makes the whole unresponsive with much smaller line-counts already.