Comparison of Speed of LiveCode with PHP
Peter W A Wood
peterwawood at gmail.com
Tue Nov 25 03:23:23 EST 2014
Hi Andre
I agree with your comments on the appropriateness of the tests. I’ll give some thought to incorporating more I/O based tests.
Do you think that having FastCGI support so that LiveCode could be run behind a load balancing server would be an improvement from a scalability point of view.
Regards
Peter
> On 24 Nov 2014, at 23:42, Andre Garzia <andre at andregarzia.com> wrote:
>
> Hi Peter,
>
> Thanks for your testing!
>
> I think we're approaching this performance issue wrong. Most webapps will
> be I/O bound and not CPU bound. Calculations are not the most common thing
> going on but I/O in the sense of reading and writing from database and
> files are. Also the only way to deal with structured data in memory in a
> straight forward way is LiveCode multilevel arrays but there is no built-in
> way to serialize these arrays for consumption outside of LiveCode. For
> example, a common thing these days is to have your client-side HTML5 code
> calling back your server-side code for more information which is normally
> presented in JSON but LiveCode has no built-in function for JSON encoding
> and decoding, so both operations happen in pure transcript (or whatever
> they are calling it these days) which will make it really slow.
>
> If we want LiveCode to have better performance we need ways to improve I/O.
> Things that would be good and have a real impact out of the box:
>
> - JSON and XML encode and decode functions in the engine.
> - Non-blocking DB routines
>
>
> A different issue is scalability. Right now, LiveCode Server works in CGI
> mode which is very straight forward but it is not the most scalable thing
> under the sun. When I say scale, I am not saying things such as serving
> 5.000 users. Serving a couple thousand users is easy. I am saying serving
> some hundred thousand users with complex server side logic, afterall doing
> 100.000 hello worlds is easy.
>
> PHP is going thru lots of revolutions in the form of the Facebook
> initiatives such as "hack" (new PHP variation), that VM they created and
> the little compiler they created which I forgot the name. The PHP
> developers are also pushing PHPNG and other gizmos. Even current generation
> PHP is not usually server with CGI technology.
>
> Ruby, Node, Python, Clojure, Java, none are served with CGI. Most of them
> could be used as CGI but no one is using them this way. CGI is easy but it
> is not scalable. Imagine that if you were serving 10.000 concurrent
> requests on your little server farm, you're have a collection of 10.000
> LiveCode server processes between your servers.
>
> What we need is something like Python WSGI or a non-blocking engine such as
> Node. Then we could with a simple pool of couple LiveCode engine instances
> serve a lot of people.
>
> On Mon, Nov 24, 2014 at 1:33 AM, Peter W A Wood <peterwawood at gmail.com>
> wrote:
>
>> In a previous email Richard Gaskin, the LiveCode Community Manager, wrote
>> "Given the role of memory and performance for scaling, if we want to see LC
>> Server taken seriously as a professional server tool we need to identify
>> and eliminate any significant performance difference between it and PHP.”
>>
>> I thought that it would be worth spending a little time to compare the
>> speed of LiveCode against the speed of PHP. I came up with a test based
>> loosely on Carl Sassenrath’s Rebol Speed Script (
>> http://www.rebol.com/cgi-bin/blog.r?view=0506 ). I have found it a useful
>> base for writing comparative scripts (either comparing languages on a
>> single machine or comparing machines using a single language). It is far
>> from perfect in a multi-tasking environment but I believe provides decent
>> comparative data.
>>
>> I have attached two scripts, speedtest.lc and speedtest.php. I’m sure
>> that both could be improved significantly and welcome such improvements.
>> The results of running the two scripts on my machine, LiveCode 7.0.0-rc-3
>> and PHP 5.5.14 are:
>>
>> Schulz:LiveCodeServer peter$ ./speedtest.lc
>> LiveCode Speed Test Started
>> The CPU test took: 2851 ms
>> The Memory test took: 3656 ms
>> The File System test took: 1975 ms
>> LiveCode Speed Test Finished
>>
>> Schulz:LiveCodeServer peter$ ./speedtest.php
>> PHP Speed Test Started
>> The CPU test took: 3921 ms
>> The Memory test took: 1200 ms
>> The File System test took: 666 ms
>> PHP Speed Test Finished
>>
>> So it seems the LiveCode has the edge on PHP when it comes to calculations
>> but not on memory access or file access.
>>
>> The memory test relies on using arrays, I'm not sure if that is the best
>> way to test memory access.
>>
>> Regards
>>
>> Peter
>>
>> Speedtest.lc
>>
>> #!livecode
>>
>> if the platform = "MacOS" then
>> set the outputLineEndings to "lf"
>> end if
>>
>> put "LiveCode Speed Test Started" & return
>>
>> ##cpu test
>> put the millisecs into tStart
>> repeat with i = 1 to 10000000
>> put sqrt(exp(i)) into tTemp
>> end repeat
>> put the millisecs into tEnd
>> put "The CPU test took: " && tEnd - tStart && "ms" & return
>>
>> ##Memory Access
>> put the millisecs into tStart
>> repeat with i = 1 to 1000000
>> put random(255) into tMem[i]
>> end repeat
>> put the millisecs into tEnd
>> put "The Memory test took: " && tEnd - tStart && "ms" & return
>>
>> ##Filesystem
>> open file "test.tmp"
>> put the millisecs into tStart
>> repeat with i = 1 to 100000
>> write "This is a test of the write speed" && random(255) to file
>> "test.tmp"
>> read from file "test.tmp" for 1 line
>> end repeat
>> put the millisecs into tEnd
>> put "The File System test took:" && tEnd - tStart && "ms" & return
>> delete file "test.tmp"
>>
>> ##Finish
>> put "LiveCode Speed Test Finished" & return
>>
>> Speedtest.php
>>
>> #!/usr/bin/php
>>
>> <?php
>>
>> print "PHP Speed Test Started\n";
>>
>> //cpu test
>> $start = microtime(true);
>> for( $i = 0; $i < 10000000; $i++ ) {
>> $temp = sqrt(exp($i));
>> }
>> $end = microtime(true);
>> $time = ($end - $start) * 1000 + 0.5;
>> printf("The CPU test took: %5.0f ms\n", $time);
>>
>> //Memory Access
>> $start = microtime(true);
>> for( $i = 0; $i < 1000000; $i++ ) {
>> $mem[i] = rand(0, 255);
>> }
>> $end = microtime(true);
>> $time = ($end - $start) * 1000 + 0.5;
>> printf("The Memory test took: %5.0f ms\n", $time);
>>
>> //Filesystem
>> $file = fopen("test.tmp", "w+");
>> $start = microtime(true);
>> for( $i = 0; $i < 100000; $i++ ) {
>> rewind($file);
>> fwrite($file, "This is a test of the write speed".rand(0,255));
>> fread($file, 34);
>> }
>> $end = microtime(true);
>> $time = ($end - $start) * 1000 + 0.5;
>> printf("The File System test took: %5.0f ms\n", $time);
>> unlink("test.tmp");
>>
>> //Finish
>> print "PHP Speed Test Finished\n";
>>
>> ?>
>>
>>
>>
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>
>
>
>
> --
> http://www.andregarzia.com -- All We Do Is Code.
> http://fon.nu -- minimalist url shortening service.
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list