[Seaside] Asynchronous update from web server

dtrussardi at tiscali.it dtrussardi at tiscali.it
Wed Apr 10 18:28:04 UTC 2019


Ciao Esteban,

	thanks for your support.

> The library is fine and the JQDevelopmentLibrary is just for the
> replacement, the setTimeout() and interval() are part of the built-in
> functions in all browsers and comes in the Javascript package of
> Seaside itself.
	
OK
.
> 
> Can you share the code you're using? Is it exactly the same example I
> sent a few mails back?
	
I do some test with Seaside 3.3.

	i use this code:

		scriptUpdaterOn: aJSScript
			 aJSScript <<
  				 ((aJSScript jQuery ajax
				     script: [ :s |
    				   self shouldUpdate ifTrue: [ self scriptBannerUpdateOn: s ].
     				  self scriptUpdaterOn: s ]) setTimeout: 1 minute)
	
	And all works well.

	if I use the same code ( changing only 	 setTimeout  	to 	timeout: 	)

	with Seaside 3.2.2 	 it happens  that the browser application loads the CPU of 50%.

	and this complicates the situation.

	If everything is clear to you and matches how it should work, 

	for now i use		 interval: 	in Seaside 3.2.2 

	and then update everything to 	setTimeout:	when I bring the code into Seaside 3.3

	Thank you so much,

		Dario

	P.S.  is it not clear to me why	  scriptUpdaterOn: aJSScript		it calls itself?	

> 
> 
>> Which version of Seaside are you using?
> 
>        I using the Seaside 3.2.2   on Pharo 7.0-64-1262
> 
> 
>> I can see that #timeout: is the deprecated implementation of the
>> #setTimeout: method of latest Seaside releases, and it instantiates a
>> JSTimeout object whose #javascriptContentOn: is as follows:
> 
>        The following code is identical
> 
>> JSTimeout>>javascriptContentOn: aStream
>> aStream nextPutAll: 'setTimeout(function(){'.
>> super javascriptContentOn: aStream.
>> aStream
>>   nextPutAll: '},';
>>   javascript: self duration;
>>   nextPut: $)
>> 
>> So in theory it should do the same thing.
>> 
>> Did you try my attached example replacing the #setTimeout: call by the
>> #timeout: equivalent?
> 
>        Yes, don't works
>> 
>> Are you replacing the right DOM element in #scriptBannerUpdateOn: ?
> 
>        Yes.  With interval:  is right update   ( therefore the reference is correct )
> 
> 
> 
>        But which libraries should I add when register the application?
> 
>        I register it with:
> 
>                app := WAAdmin register: self asApplicationAt: 'recursiveTimeout'.
> 
>                app addLibrary: JQDevelopmentLibrary
> 
>        it's right?
> 
>        Thanks,
> 
>                Dario
> 
>> Regards,
>> 
>> Esteban A. Maringolo
>> 
>> El mié., 10 abr. 2019 a las 12:36, dtrussardi at tiscali.it
>> (<dtrussardi at tiscali.it>) escribió:
>>> 
>>> Ciao,
>>> 
>>> 
>>>> Shouldn't your script have two < instead of one?  Like this:
>>> 
>>>       it's an error in the email.
>>> 
>>>       The code is right,
>>> 
>>>               but with                 timeout:           the banner is not update.
>>> 
>>>               with             interval:      it is update.
>>> 
>>>       considerations ?
>>> 
>>>       Thanks,
>>> 
>>>               Dario
>>> 
>>>> 
>>>> scriptUpdaterOn: aJSScript
>>>>                aJSScript <<
>>>>                       ((aJSScript jQuery ajax
>>>>                        script: [ :s |
>>>>                                      self shouldUpdate ifTrue: [ self
>>>> scriptBannerUpdateOn: s ].
>>>>                        ]) timeout: 1 minute)
>>>> 
>>>> 
>>>> 
>>>> 
>>>> dtrussardi at tiscali.it wrote
>>>>> Ciao,
>>>>> 
>>>>>> But using interval() is wrong. You're creating one new interval on every
>>>>>> call! And it doesn't have to be recursive.
>>>>>> 
>>>>>> Maybe instead of #setInterval: it is #interval: in your image.
>>>>> 
>>>>>    You mean      timeout:
>>>>> 
>>>>>    But with:
>>>>> 
>>>>> 
>>>>>            scriptUpdaterOn: aJSScript
>>>>>               aJSScript <
>>>>>                       ((aJSScript jQuery ajax
>>>>>                        script: [ :s |
>>>>>                                      self shouldUpdate ifTrue: [ self
>>>>> scriptBannerUpdateOn: s ].
>>>>>                       ]) timeout: 1 minute)
>>>>> 
>>>>>            i don't have any updating.
>>>>> 
>>>>>    With:   scriptUpdaterOn: aJSScript
>>>>>                            aJSScript <
>>>>>                             ((aJSScript jQuery ajax
>>>>>                                      script: [ :s |
>>>>>                                            self shouldUpdate ifTrue: [ self
>>>>> scriptBannerUpdateOn: s ].
>>>>>                                            self scriptUpdaterOn: s
>>>>>                       ]) timeout: 1 minute)
>>>>> 
>>>>>    i have strange behavior.
>>>>> 
>>>>>    The browser application go to 50% of CPU.
>>>>> 
>>>>>    Thanks,
>>>>> 
>>>>>            Dario
>>>>> 
>>>>>> 
>>>>>> Regards,
>>>>>> 
>>>>>> El mar., 9 de abr. de 2019 11:30,
>>>> 
>>>>> dtrussardi@
>>>> 
>>>>> <
>>>> 
>>>>> dtrussardi@
>>>> 
>>>>> > escribió:
>>>>>> Ciao,
>>>>>> 
>>>>>>      thanks.
>>>>>> 
>>>>>>> El lun., 8 abr. 2019 a las 7:48,
>>>> 
>>>>> dtrussardi@
>>>> 
>>>>>>> (<
>>>> 
>>>>> dtrussardi@
>>>> 
>>>>> >) escribió:
>>>>>>> 
>>>>>>>>     In my case i haven't any user actions on the client.
>>>>>>>>     The client display some data with dynamic banner ( marquee tag
>>>>>> )
>>>>>>>>     and i need to update it only when the data to display change
>>>>>> from the server.
>>>>>>>>     When the data on the server relative to an banner change i need
>>>>>> to force the clients banners update.
>>>>>>>>     it seems to me that your initial solution may be fine.
>>>>>>>> 
>>>>>>>>     What do you think?
>>>>>>> 
>>>>>>> Too complex for such a simple task.
>>>>>>> 
>>>>>>> Is the
>>>>> <marquee>
>>>>> tag still a thing? I though it dissapeared when
>>>>>>> Geocities closed. :)
>>>>>>> 
>>>>>>> See below my suggestion.
>>>>>>> 
>>>>>>> 
>>>>>>>>     Another solution could be to manage an client ajax request with
>>>>>> a specific interval
>>>>>>>>     but  update the relative  banner div  only if the related data
>>>>>> received from the server changed.
>>>>>>>>             ( But how i can manage it?
>>>>>>>>              Can i not reply to an client ajax request
>>>>>>>>                     or respond to doing nothing and continue to
>>>>>> view the current status )
>>>>>>> 
>>>>>>> You can have a recursive call to setInterval() that returns a script
>>>>>>> (javascript) that updates the mentioned banner, and if no update is
>>>>>>> necessary you do nothing. Doing it once per minute is nothing for the
>>>>>>> server, since it's a simple AJAX call, which if nothing needs
>>>>>>> updating, is fast to answer.
>>>>>>> 
>>>>>>> These are the key parts:
>>>>>>> 
>>>>>>> renderContentOn: html
>>>>>>> self renderBannerOn: html.
>>>>>>> html script: (html jQuery script: [ :script | self scriptUpdaterOn:
>>>>>> script ])
>>>>>>> 
>>>>>>> scriptUpdaterOn: aJSScript
>>>>>>> aJSScript <<
>>>>>>> ((aJSScript jQuery ajax
>>>>>>>   script: [ :s |
>>>>>>>     self shouldUpdate ifTrue: [ self scriptBannerUpdateOn: s ].
>>>>>>>     self scriptUpdaterOn: s ]) setTimeout: 1 minute)
>>>>>> 
>>>>>>      The setTimeout is not implemented in my system.
>>>>>> 
>>>>>>      With    timeout:    i have some   problematic.
>>>>>> 
>>>>>>      I change the             scriptUpdaterOn: aJSScript     to:
>>>>>> 
>>>>>>      scriptUpdaterOn: aJSScript
>>>>>>              aJSScript <
>>>>>>                       ((aJSScript jQuery ajax
>>>>>>                        script: [ :s |
>>>>>>                                      self shouldUpdate ifTrue: [ self
>>>>>> scriptBannerUpdateOn: s ].
>>>>>>                      ]) interval: 1 minute)
>>>>>> 
>>>>>>      It works very well relatively to my current needs.
>>>>>> 
>>>>>>      Dario
>>>>>> 
>>>>>>> 
>>>>>>> scriptBannerUpdateOn: s
>>>>>>> s << ((s jQuery id: 'banner') replaceWith: [ :h | self renderBannerOn:
>>>>>> h ])
>>>>>>> 
>>>>>>> Attached to this mails goes a working example of this.
>>>>>>> 
>>>>>>> In #scriptBannerUpdateOn: I would put all the logic, even by replacing
>>>>>>> the whole component as a whole (sometimes the best compromise) or
>>>>>>> indidividual elements within it).
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Regards,
>>>>>>> 
>>>>>>> Esteban A. Maringolo
>>>>>>> 
>>>>> <EAMRecursiveTimeout.st>
>>>>> _______________________________________________
>>>>>>> seaside mailing list
>>>>>>> 
>>>> 
>>>>> seaside at .squeakfoundation
>>>> 
>>>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>>>> 
>>>>>> _______________________________________________
>>>>>> seaside mailing list
>>>>>> 
>>>> 
>>>>> seaside at .squeakfoundation
>>>> 
>>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>>>> _______________________________________________
>>>>>> seaside mailing list
>>>>>> 
>>>> 
>>>>> seaside at .squeakfoundation
>>>> 
>>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> seaside mailing list
>>>> 
>>>>> seaside at .squeakfoundation
>>>> 
>>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Sent from: http://forum.world.st/Seaside-General-f86180.html
>>>> _______________________________________________
>>>> seaside mailing list
>>>> seaside at lists.squeakfoundation.org
>>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>> 
>>> _______________________________________________
>>> seaside mailing list
>>> seaside at lists.squeakfoundation.org
>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> 
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
_______________________________________________
seaside mailing list
seaside at lists.squeakfoundation.org
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/seaside/attachments/20190410/676e76d6/attachment-0001.html>


More information about the seaside mailing list