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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The original post has examples of how to do it, eg: <code>time ./exwp.exs &lt; words.txt &gt; /dev/null</code>. So to convert your command: <code>elixir wc.exs &lt; words.txt</code>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121467" 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/erlang-elixir-string-performance-can-this-be-improved/21091/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-121467" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121467"
                     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 #11"></div>
  </section>
</div>
    <div class="postbit" id="121482" data-post-id="121482">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think I’m doing something wrong, I went to powershell and piped to <code>stdio</code> and timed with <code>:timer.tc/1</code> and I get 2.5s:</p>
<p>Here is the code</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">c = fn -&gt;
 :ets.new(:words, [{:write_concurrency, true}, :named_table])

  IO.stream(:stdio, :line)
  |&gt; Stream.flat_map(&amp;String.split(&amp;1, " ")) # using space decrease from approx half than using split/1
  |&gt; Enum.each(fn word -&gt; :ets.update_counter(:words, word, {2, 1}, {word, 0}) end)
  :ets.match_object(:words, {:"$0", :"$1"})
  |&gt; Enum.sort(fn {_, a}, {_, b} -&gt; b &lt; a end)
  # print it beautifully
  |&gt; Enum.map(fn {word, count} -&gt;
    [String.pad_leading(Integer.to_string(count), 8), " ", word, "\n"]
  end)
  |&gt; IO.write()
end

{micro, :ok} = :timer.tc(c)
IO.puts("#{micro/1000}ms")
IO.puts(":timer.tc/1 #{micro}")

</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">2593.0ms
:timer.tc/1 2593000
</code></pre>
<p>If interested these are my versions:</p>
<p><code>Erlang/OTP 21 [erts-10.3] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]</code><br>
<code>Elixir 1.8.1 (compiled with Erlang/OTP 20)</code><br>
<code>Windows 10 Pro 1809</code></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121482" 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/erlang-elixir-string-performance-can-this-be-improved/21091/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-121482" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121482"
                     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 #13"></div>
  </section>
</div>
    <div class="postbit" id="121503" data-post-id="121503">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Are you sure your output is correct? I ran your code and you have lots of <code>\n</code> in your words, because you split only on <code>" "</code>. Each line ends with a <code>\n</code>. Remove your argument to split, so it says <code>&amp;String.split(&amp;1)</code> or use my solution of compiling a pattern. Also running your code took</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">37520.331ms
:timer.tc/1 37520331
</code></pre>
<p>Maybe you run it faster because your <code>words.txt</code> is too short? Here’s the number of lines in mine</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"> wc -l words.txt
   1819045 ../words.txt
</code></pre>
<p>You can also read the number of lines in your output. This is how many lines I get from your code (you get almost twice as many lines in your output because of all the new line characters, I believe you should get 557K if your  original file has 1.8M lines)</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">elixir wc.exs &lt; ../words.txt | wc -l
  935401
</code></pre>
<p>If you look at the original article the fastest C version took 3.7s, so there’s probably something wrong here <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="121503" 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/erlang-elixir-string-performance-can-this-be-improved/21091/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-121503" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121503"
                     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 #14"></div>
  </section>
</div>
    <div class="postbit" id="121551" data-post-id="121551">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Oooh It makes sense, I counted the words and it’s way below yours, I thought I got it right from the file but maybe it was still downloading when I saved.<br>
Also I noticed that without <code>" "</code> on split it takes way longer! Thank you for the findings!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121551" 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/erlang-elixir-string-performance-can-this-be-improved/21091/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-121551" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121551"
                     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 #15"></div>
  </section>
</div>
    <div class="postbit" id="121622" data-post-id="121622">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think running an exs is going to be slower than running a compiled release in any case, so this benchmark won’t accurately reflect a real world case of a deployed app. Please correct me if I’m wrong everyone.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121622" 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/erlang-elixir-string-performance-can-this-be-improved/21091/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-121622" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121622"
                     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 #16"></div>
  </section>
</div>
    <div class="postbit" id="121649" data-post-id="121649">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><code>.exs</code> files are also compiled, it just automatically happens before it runs. Obviously that means you keep paying that cost, but for a tiny script like this, you’re not gonna notice it. Also measurements are of execution time, not startup.</p>
<p>Building a release does not apply any performance optimizations, it just compiles the code like you would otherwise with <code>MIX_ENV=prod mix compile</code>, AFAIK. There are no mentions in the Distillery docs of releases being faster. It’s not what releases are for.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121649" 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/erlang-elixir-string-performance-can-this-be-improved/21091/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-121649" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121649"
                     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 #17"></div>
  </section>
</div>
    <div class="postbit" id="121653" data-post-id="121653">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="josevalim" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/josevalim/120/1787_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  josevalim
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Elixir</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>To clarify, it depends on the <code>.exs</code> file, but for other reasons besides compilation.</p>
<p>Running <code>elixir path/to/exs</code> won’t have any protocol consolidated. Running inside a Mix project with <code>mix run path/to/exs</code> (and also in a release) may be more performant depending on the idioms used. I don’t think it would in this case though.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121653" 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/erlang-elixir-string-performance-can-this-be-improved/21091/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-121653" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121653"
                     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 #18"></div>
  </section>
</div>
    <div class="postbit" id="121658" data-post-id="121658">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah, I can confirm that running <code>mix run</code> vs <code>elixir</code> doesn’t appear to make a difference, at least enough that it’s measurable in this simplistic benchmark.</p>
<p>Here’s three runs each of <code>elixir</code> and <code>mix run</code></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">➜  app mix run lib/nodep.exs &lt; ../words.txt &gt;/dev/null
22379157
➜  app mix run lib/nodep.exs &lt; ../words.txt &gt;/dev/null
24923662
➜  app mix run lib/nodep.exs &lt; ../words.txt &gt;/dev/null
22455488
➜  app elixir lib/nodep.exs &lt; ../words.txt &gt;/dev/null 
22172380
➜  app elixir lib/nodep.exs &lt; ../words.txt &gt;/dev/null
22035877
➜  app elixir lib/nodep.exs &lt; ../words.txt &gt;/dev/null
22763843
</code></pre>
<p>The single outlier at 24s can pretty safely be ignored.</p>
<p>But again, none of this is a <strong>proper</strong> benchmark. All we’ve shown is that Elixir can be written to perform decently in a text processing script. The original article 2019 ruby 2.6 version took 37s, meaning we’re quite a lot faster than ruby at this point.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="121658" 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/erlang-elixir-string-performance-can-this-be-improved/21091/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-121658" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="121658"
                     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 #19"></div>
  </section>
</div>
    <div class="postbit" id="122204" data-post-id="122204">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="jola" data-post="6" data-topic="21091">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jola/48/18010_2.png" class="avatar"> jola:</div>
<blockquote>
<pre data-code-wrap="elixir"><code class="lang-elixir"># Create the ETS table
:ets.new(:words, [{:write_concurrency, true}, :named_table])
</code></pre>
</blockquote>
</aside>
<p>For the serial code, it knocks about 6 seconds off for me (1m13 vs 1m19 - 2GHz MacBook) if I use a un-named ETS table, i.e.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">table = :ets.new(:words, [])
</code></pre>
<p>and then use the reference directly instead of the name:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">|&gt; Enum.each(fn word -&gt; :ets.update_counter(table, word, {2, 1}, {word, 0}) end)
</code></pre>
<p>etc.</p>
<p>This makes sense since now ETS doesn’t have to be concerned about concurrency at all, and there’s no lookup for the table by name.</p>
<p>Of course, now you can’t take advantage of concurrency <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> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="122204" 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/erlang-elixir-string-performance-can-this-be-improved/21091/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-122204" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="122204"
                     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 #20"></div>
  </section>
</div>
    <div class="postbit" id="123792" data-post-id="123792">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi, a friend of mine sent this over, so I gave it a try: <a href="https://gist.github.com/evadne/43e79dd51c068dc19e42086cdbecc8a7" class="inline-onebox" rel="noopener nofollow ugc">.gitignore · GitHub</a></p>
<p>FWIW</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">$ curl http://teralink.net/\~serpent/words.txt &gt; words.txt

$ md5 words.txt 
MD5 (words.txt) = 640ef9e082ef75ef07f0e9869e9d8ae2

$du -h words.txt
217M	words.txt
Execution
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">$ elixir ./count.ex ./words.txt --sort &gt; out-sorted.txt
Started
Using 4 Workers
Processing: 4.748574s
Load Results: 0.820397s
Order Results: 1.99405s
Print Results: 3.136065s
Total Runtime: 10.710908s
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">$ elixir ./count.ex ./words.txt &gt; out.txt
Started
Using 4 Workers
Processing: 4.944752s
Load Results: 0.836416s
Print Results: 2.556994s
Total Runtime: 8.343633s
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">$ wc -l out*
  557745 out-sorted.txt
  557745 out.txt
 1115490 total
</code></pre>
<pre data-code-wrap="elixir"><code class="lang-elixir">$ head -n 5 out-sorted.txt
1033175 0
103404 00
353 000
752 0000
19 00000
</code></pre>
<p>Please let me know your thoughts. Thanks again!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="123792" 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/erlang-elixir-string-performance-can-this-be-improved/21091/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-123792" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="123792"
                     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 #21"></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/21091/load_more?page=3">Load more posts (20 remaining)</a>
</div></template></turbo-stream>