Benefits of using async streams is not so much raw speed, as ability to do 
multiple things "at once". If you were doing this task to 10,000 files, your 
methods would process many of those files in parallel; and the non-streaming 
version would do them serially. Similarly if you are operating on one large 
file, you will save memory by streaming it instead of loading it all and 
parsing at once.

-Chad

From: [email protected] [mailto:[email protected]] On Behalf Of Dan 
Schmidt
Sent: Sunday, April 06, 2014 5:35 PM
To: [email protected]
Subject: Re: [nodejs] Why is my streaming word counter so much slower than a 
non streaming version?

Thanks for the insights. I had tried using much larger text files to compare 
the two, but wasn't considering that the synchronous will always beat it, so 
long as there is enough memory to read in the file. A better comparison would 
be to set them both up as web servers and send multiple requests.

I did try out combining the processing steps into a single transform to see the 
difference and it's performance numbers are roughly the same as the synchronous 
version.

On Sun, Apr 6, 2014 at 1:57 AM, Ryan Graham 
<[email protected]<mailto:[email protected]>> wrote:
On Sat, Apr 5, 2014 at 10:01 PM, Dan Schmidt 
<[email protected]<mailto:[email protected]>> wrote:
So, I'm trying to use streams more and better understand how to use them 
properly.

There was this little contest over at Treehouse to write an app that would 
count the words in a text file after being filtered from a certain set of words 
in another file.

Myself and one other person chose to write our apps in node.

I wrote mine using streams and they wrote theirs without. I have used the time 
command to compare the two. Mine is consistently about 5 times slower.

Link to mine: https://gist.github.com/DanSchmidt/10000777
Link to their's: https://gist.github.com/pleary/9967501#file-waldo-js

I could understand if some of my transform and filtering logic was perhaps less 
performant than another's, but 5 times slower seems to suggest I'm probably 
doing something wrong with the streams.

Your version is a lot more friendly to the event loop to the point that the 
same process could probably server a decent number of http requests if you 
threw an http.createServer in there somewhere.

The faster one, on the other hand, will completely block the event loop after 
the second async call to request() finishes.

So I wouldn't say you're doing anything wrong with the streams, it's just an 
extreme use of them. If the dataset is large enough to outweigh the setup 
overhead, you could try wrapping some of the pipeline steps in separate 
processes.

~Ryan

--
http://twitter.com/rmgraham
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to 
[email protected]<mailto:[email protected]>
To unsubscribe from this group, send email to
[email protected]<mailto:nodejs%[email protected]>
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

---
You received this message because you are subscribed to a topic in the Google 
Groups "nodejs" group.
To unsubscribe from this topic, visit 
https://groups.google.com/d/topic/nodejs/0jSkPYaaE6s/unsubscribe.
To unsubscribe from this group and all its topics, send an email to 
[email protected]<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.



--
Dan Schmidt
@codeswish<https://twitter.com/codeswish> - Blog
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to 
[email protected]<mailto:[email protected]>
To unsubscribe from this group, send email to
[email protected]<mailto:[email protected]>
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

---
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to