<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="232150" data-post-id="232150">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I didn’t mean to be rude and sorry if it read that way – my point is that without some level of understanding we cannot help you because you might not understand and not be able to apply the suggestions given to you. So then how can we help you?</p>
<p>What I suggested to you is: integrate <em>all</em> processing of the CSV file together in one place so you can reap the full benefits of streaming and save CPU time and memory. If you need an even more detailed example, I’ll be happy to give it to you – can even make a GitHub repo for you if you provide some sample CSV data we can work with. (E.g. how much columns does your CSV file have?)</p>
<p>One of my first tasks with Elixir – 5.5 years ago now – was exactly to process hundreds of megabytes of CSV and XML files per hour. On a virtual hosting with a 4-core vCPU and using full parallelism (using <code>Task.async_stream</code> or <code>Flow</code>) I wasn’t able to load the CPU to more than 60% while still ingesting several CSV / XML files with sizes 500MB+, per hour. There are ways and we here are trying to show you those ways.</p>
<p>I don’t have a horse in this race – just don’t be too quick to discount Elixir as unsuitable. There’s a lot that can be done. And you won’t regret sticking with Elixir. It saves you from a ton of problems that no other language has solved yet (like transparent parallelism and concurrency).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232150" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-232150" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232150"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="232153" data-post-id="232153">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="quda" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/quda/120/33107_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  quda
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Totally agree, @ <a href="https://forum.elixirforum.com/u/dimitarvp" rel="nofollow">dimitarvp</a>.<br>
Please understand that I am under much pressure about this task. I didn’t have years to study Elixir, just a couple of weeks, but it convinced me. I’m coming from the OOP world (C#, Java, php) so the functional paradigm still feels strange to me.<br>
I’m still trying to give Elixir a chance but the deadline for this task is coming close and I have to deliver something. Using Elixir/Phoenix or something else…<br>
Thanks.<br>
Q.T.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232153" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-232153" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232153"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="232154" data-post-id="232154">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="quda" data-post="33" data-topic="43893">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/quda/48/33107_2.png" class="avatar"> quda:</div>
<blockquote>
<p>Please understand that I am under much pressure about this task.</p>
</blockquote>
</aside>
<p>I understand and sympathize. Been there, done that myself.</p>
<p>Send us a link to a sample CSV file – or just tell us how much columns it has. I am sure we can think of something to help you in short order. Also which Phoenix version do you use?</p>
<p>Try us. <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"></p>
<p>(And btw, <a class="mention" href="/u/lud" rel="nofollow">@lud</a>’s reply seems excellent and IMO you can apply it quickly to your project.)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232154" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-232154" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232154"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="232217" data-post-id="232217">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tozz" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tozz
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Just want to echo this, using ports and running a binary from Go or Rust (or whatever floats your boat) is an excellent way of doing data manipulation in an easy and understandable way.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232217" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-232217" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232217"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="232222" data-post-id="232222">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mmmrrr" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mmmrrr/120/12227_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mmmrrr
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/quda" rel="nofollow">@quda</a> after reading this thread I really think what you have is an architecture problem and I’m basically echoing <a class="mention" href="/u/lud" rel="nofollow">@lud</a> here but just to clarify that what you’re describing <em>would probably be not a good idea regardless of the language/technology</em>.</p>
<p>Short version:</p>
<ol>
<li>Don’t parse CSV-&gt;JSON, simply write JSON files to the server and serve those.</li>
<li>If you can, send the CSV file directly to the client and parse it there.</li>
<li>Depending on if you actually need the whole file at once in the client, you could implement a pagination on large files.</li>
</ol>
<p>Long version:</p>
<ol>
<li>As <a class="mention" href="/u/lud" rel="nofollow">@lud</a> mentioned: Why write CSV files to the server if what you need is JSON? Nothing - not even C or Rust - would be faster at parsing CSV and writing JSON than Nginx serving some static JSON files. So if you <em>must</em> use JSON I would write those files directly as JSON and not convert them on the fly in the request.<br>
If you need authentication you can, of course, also just serve the file contents with phoenix. It would be a tad slower than Nginx but much, much faster than parsing and transforming the file. (This would probably also solve the performance problem of the server because you wouldn’t compute something in every request).</li>
<li>If you can, you should really just serve the CSV files and parse them on the client. Browser JS engines are really, really fast when dealing with data structures and you simply cannot render all data from 20MB files as HTML at once. That would kill the browser.</li>
<li>You probably want some pagination for those files in order to only send a subset of the data. I have only once had the missfortune of having to send such an amount of data to the client and process it there. Most of the times you want to chunk it up and load more data on demand.</li>
</ol> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232222" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-232222" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232222"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="232228" data-post-id="232228">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="quda" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/quda/120/33107_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  quda
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/lud" rel="nofollow">@lud</a> and <a class="mention" href="/u/dimitarvp" rel="nofollow">@dimitarvp</a> you were both right.<br>
I re-wrote the controller using the <a class="mention" href="/u/lud" rel="nofollow">@lud</a>’s example and guess what? It works out-of-the-box, like a charm.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">curl -x "" localhost:4000/api/D3/env.ERA638.csv &amp;&gt; /dev/null

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  160M    0  160M    0     0  8198k      0 --:--:--  0:00:20 --:--:-- 8141k
</code></pre>
<p>My only problem… I feel like a scum to copy/paste code made by others, without even understanding it. <img src="https://forum.elixirforum.com/images/emoji/apple/roll_eyes.png?v=15" title=":roll_eyes:" class="emoji" alt=":roll_eyes:" loading="lazy" width="20" height="20"> I never did that before.<br>
In principle it is clear what <a class="mention" href="/u/lud" rel="nofollow">@lud</a> did but at the level of details it’s elusive to me. And this because of my level of understanding Elixir syntax/concepts.<br>
You are not my teachers, ( <a class="mention" href="/u/dimitarvp" rel="nofollow">@dimitarvp</a> was right before) therefore I cannot ask you what this <code>[?,,</code> does or why  <code>|&gt; Stream.drop(1)</code>. I think you got the point, I have to find out myself.</p>
<p>Thank you all.<br>
Q.T.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232228" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-232228" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232228"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="232231" data-post-id="232231">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mmmrrr" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mmmrrr/120/12227_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mmmrrr
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><code>?,</code> means: "give me the codepoint of the comma (in this case it returns 44, which you can try on iex: <code>iex&gt; ?,</code>). You can read about the usages of IO data here: <a href="https://hexdocs.pm/elixir/1.12/IO.html#module-io-data" class="inline-onebox" rel="noopener nofollow ugc">IO — Elixir v1.12.3</a></p>
<p>So this function does (as I understand it):</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">    stream
    # Take the first line from the CSV (since we used "skip_headers" this is the first line of data)
    |&gt; Stream.take(1)
    # 1. Merge the headers of the csv with the data we just read into tuples of {HEADER, DATA}
    # 2. Make a new map from that list of tuples
    # 3. Encode the map as json and output it as io_data instead of as string
    |&gt; Stream.map(fn x -&gt; Enum.zip(headers, x) |&gt; Map.new() |&gt; Jason.encode_to_iodata!() end)
    # We now have a list of io_data lists, so something like: `[ [12, 31, 55], [13, 14, 99], ... ]`
    # which goes as the first argument into Stream.concat/2
    |&gt; Stream.concat(
      # The second argument to the concat function
      stream
      # But this time we remove the first line...
      |&gt; Stream.drop(1)
      # ... map over _each other line_ in the csv...
      |&gt; Stream.map(fn x -&gt;
        # ... and then prepend it with a comma in codepoint format
        [?,, Enum.zip(headers, x) |&gt; Map.new() |&gt; Jason.encode_to_iodata!()]
      end)
    )
</code></pre>
<p>All this will result in something like this <code>{"hello": "world"}, {"hello": "foo"}, {"hello": "bar"}</code> (notice that we don’t have a comma at the first position?). The <code>send_csv</code> function wraps that into <code>[</code> and <code>]</code> which makes it a valid json array. This whole thing with the code points is probably done for performance reasons in this case and I personally have not had the need to use this form. This is relatively advanced stuff for a relatively advanced problem.</p>
<p>So please don’t beat yourself up about this. We’re all here to learn and to give back where we can! This forum, or rather it’s management and the people in it, might just be the best feature of Elixir in general - and that says a lot. <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232231" data-batch-url="/posts/batch_likers">
                        8
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-232231" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232231"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="232245" data-post-id="232245">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Awesome explanation, kudos.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232245" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-232245" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232245"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="232250" data-post-id="232250">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="lud" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/lud/120/14382_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  lud
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Indeed I used <code>"["</code> and <code>"]"</code> for the brackets, and <code>?,</code> for the comma, it is not very consistent <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>I guess when sending a chunk I thought <em>we send some content to the browser here</em>, while building the JSON chunks I thought <em>here we are building some IO data</em>.</p>
<p>Also there is the <a href="https://hexdocs.pm/elixir/1.12/Stream.html#intersperse/2" rel="noopener nofollow ugc"><code>Stream.intersperse/2</code></a> function that would make the whole code cleaner when inserting commas between records instead of using <code>take(1)</code> and then <code>drop(1)</code>.</p>
<p>The code would look simpler :</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  defp csv_stream(file) do
    headers = headers(file)

    file
    |&gt; File.stream!()
    |&gt; CSV.parse_stream(skip_headers: true)
    |&gt; Stream.map(fn x -&gt; Enum.zip(headers, x) |&gt; Map.new() |&gt; Jason.encode_to_iodata!() end)
    |&gt; Stream.intersperse(",")
  end
</code></pre>
<p>But note that for my 50 MB JSON it takes ~4s instead of ~3s. because you send each comma as its own chunk.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232250" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-232250" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232250"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="232296" data-post-id="232296">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="krasenyp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/krasenyp/120/39733_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  krasenyp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The steam can be chunked in order to send larger pieces.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="232296" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-json-api-extremely-slow-when-serving-csv-files/43893/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-232296" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="232296"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/43893/load_more?page=5">Load more posts (8 remaining)</a>
</div></template></turbo-stream>