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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="peerreynders" data-post="26" data-topic="16427">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>LiveView <em>is</em> a legitimate extension to Phoenix but now it even becomes more involved on the client side beyond channels. Anyone in this topic knows it’s optional. But from the outside it could be easily judged as yet another weird way (i.e. non-mainstream) of doing web applications.</p>
<p>“We are a React shop; we’ve heard Phoenix does this LiveView thing for the client so it’s not really relevant to us.”</p>
</blockquote>
</aside>
<p>I genuinely believe that you are worrying needlessly. Not only do I think there will be very few people who feel like that (because if they know what React is and know what Elixir and Phoenix are, they will almost certainly know LiveView is optional) but not only that, what you describe as “as yet another weird way” will, I’m sure, be seen by hordes as fresh and exciting.</p>
<p>That article I wrote about Volt/Fire/Opal was one of the most popular articles not only on my blog with regards to number of views, but in terms of being tweeted and retweeted and the conversations that ensued; it generated a massive amount of hype and the excitement around those technologies was very, very real.</p>
<p>This is one of the reasons why I believe LiveView will be one of Phoenix’s killer features… and I think we’re already seeing a glimpse of this by all the conversation and excitement we’ve witnessed on the forum (and I’m sure IRC/Slack), Twitter, and other places like HN and Reddit etc.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96514" 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/lets-discuss-phoenix-liveview/16427/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-96514" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96514"
                     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 #31"></div>
  </section>
</div>
    <div class="postbit" id="96549" data-post-id="96549">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="gregvaughn" data-post="27" data-topic="16427">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/gregvaughn/48/954_2.png" class="avatar"> gregvaughn:</div>
<blockquote>
<p>The real question to me in this case is how much the public internet changes those green screen approaches (now that it’s feasible to have stateful connections).</p>
</blockquote>
</aside>
<p>What concerns me is that this time around Amazon/Google/Microsoft are pushing (currently) the other way, increasing complexity on the client-side for integrating data from a variety of network sources while LiveView is going in the opposite direction (without being necessarily “disruptive”). The business case to push state to the client is compelling because they don’t have to pay for the client - they have to pay for the server Phoenix runs on. Again “holistically” there are many use cases where “Phoenix-on-the-server” <em>is a more effective solution</em> - but I’m not sure that it is that easy to make an a priori case for it.</p>
<aside class="quote group-Phoenix-Core-Team" data-username="chrismccord" data-post="29" data-topic="16427">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrismccord/48/24233_2.png" class="avatar"> chrismccord:</div>
<blockquote>
<p>With solutions like LiveView I think a lot of folks can avoid the complexity and still get the UX they want with way less effort, which I imagine is why this is an exciting way to writing applications for many of us.</p>
</blockquote>
</aside>
<p>My point is not to criticize your effort … I was just hoping that <em>someone</em> could clue me in on what the excitement is all about. We already have PWAs, SPAs, etc. besides “old school web pages”. We constantly talk about “JS framework fatigue” - what about “101-ways of doing a web application fatigue”? Yes, try new things but we can we truly let go of some of the other approaches if we adopt this one? I somehow doubt it.</p>
<blockquote>
<p>but I think in general a large part of the webdev community has reached prematurely for client frameworks for any kind of rich interaction.</p>
</blockquote>
<p>No doubt - but I think to a large part that was because of the perception that adopting some random JS framework would be the path to some kind of front end nirvana - HTML/CSS <em>is</em> tedious stuff, throwing a JS framework and Bootstrap at it doesn’t change that.</p>
<blockquote>
<p>Whether we’re flinging JSON over or HTML it’s the same interaction on the wire.</p>
</blockquote>
<p>Mmmm…</p>
<p>Not all interactions on the page that change the appearance of the page <em>need</em> to involve the server - however I imagine with server-based rendering <em>everything</em> needs to go through the server which is a lot more chatty and more prone to stuttering (the network connection is likely the weakest link) than an application implementing a protocol that prefers much coarser grained data interactions - an approach which I wouldn’t equate with targeting “offline support”.</p>
<p>Now LiveView wouldn’t be pushing as many packets as something like a live streaming game server - but still.</p>
<blockquote>
<p>We can debate if patching the DOM from fragments on the server is a valid approach or not</p>
</blockquote>
<p>Even if you supply a functional equivalent of an “X Server on the browser” - it will still be yet another way of implementing a web application - only this one is locked entirely to Phoenix ecosystem.</p>
<p>Reducing server cost by lets say 85% by being able to ditch most node.js express servers for Phoenix would be a much more straight forward argument for driving adoption.</p>
<p>Anyway, just my perspective …</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96549" 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/lets-discuss-phoenix-liveview/16427/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-96549" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96549"
                     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="96551" data-post-id="96551">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I agree the approach can be seen as a new way of writing web applications, but I don’t see it that way. One of my goals is to make it a natural extension of the server rendered html approach we have always been taking. It shouldn’t be a massive departure to go from the EEx and controller code we are used to writing and put it in a live view, which I tried to highlight in my talk. So yes, it’s a different approach, but it feels like a natural extension to what we already do with SSR, not a huge departure to a different language or programming model, which I think is an important distinction.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96551" data-batch-url="/posts/batch_likers">
                        6
                      </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/lets-discuss-phoenix-liveview/16427/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-96551" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96551"
                     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="96556" data-post-id="96556">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="peerreynders" data-post="33" data-topic="16427">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/peerreynders/48/5826_2.png" class="avatar"> peerreynders:</div>
<blockquote>
<p>The business case to push state to the client is compelling because they don’t have to pay for the client - they have to pay for the server Phoenix runs on.</p>
</blockquote>
</aside>
<p>This is, in my professional opinion, where web development has derailed over the last decade (in general).</p>
<p>All of that sounds good, in theory.</p>
<p>In reality, you still have to transfer all of the data to the client so that it can work on it. The act of taking data and converting into to JSON so that it can be transferred up, loaded into the client and them moved around is actually less efficient than just transferring up what you need after trimming it down on the server (or better yet, in the database). The amount of work in generating HTML isn’t all that different from the amount of work in generating JSON.</p>
<p>The idea that transferring things up to be processed in the client is only viable when a lot of data has to be constantly reprocessed in the client, such as animations or live streaming data into a dashboard that will be updating and recalculating for display on multiple parts of the page.</p>
<p>For the case where you’re periodically updating one centrally viewed segment of the page, there is almost <em>no benefit</em> to the fat client approach. It’s overhead cruft with marginal benefit and usually involves the need for at least an additional hire. This is where LiveView / Drab fits. It allows to leave all of that on the server where it has to exist, because no matter what it has to exist there or you create a security issue, and provide a slightly more polished experience than raw HTML/CSS in the browser would give to a user. You still get to take full advantage of the power in your database and you send up the bare minimum of what you need. You gain a ton back in recovered network overhead. For all of those sites that are “open, do something, check something, close”…that is tremendously more efficient and a better overall experience for the end user.</p>
<p>For the other cases mentioned, the offline case, the electron case or the react native case…by all means use the frontend framework. There are a lot of other people, myself included, who are absolutely craving exactly what LiveView/Drab delivers…because so much of the other stuff is totally unnecessary for probably over 90% of the places where it’s used.</p>
<p>The other aspect of this setup that makes it so much cleaner is Elixir and Phoenix itself. With Rails or other frameworks you’d have an <code>if</code> statement in the controller checking to see if the request was made with AJAX or not and if it was, you’d handle it and send back JSON but if it wasn’t you’d handle it and either re-render the form with errors or you’d redirect with a flash message.</p>
<p>By doing this with channels, you completely separate the interaction experience so that the interactive aspects are isolated from channels and the non-interactive exist in the controller. It also fits perfectly with the “Phoenix is not your application” approach by encouraging business logic to be accessible from both locations rather than contained in either.</p>
<p>I can’t wait. I have every intention of diving into this code the day that <a class="mention" href="/u/chrismccord" rel="nofollow">@chrismccord</a> releases it, even though it’s not for everybody or every use case.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96556" data-batch-url="/posts/batch_likers">
                        10
                      </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/lets-discuss-phoenix-liveview/16427/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-96556" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96556"
                     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="96620" data-post-id="96620">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/chrismccord" rel="nofollow">@chrismccord</a> having a bit of experience in SSR JS (Nuxt.js, specifically), there were a few things that immediately occured to me when I saw your demos.  I actually think this can be taken even closer to SPA/SSR land.  For instance, in Nuxt (SSR Vue.js), there is a tag (<code>&lt;nuxt-link /&gt;</code>), which renders to an anchor.  When “nuxt links” are clicked, they trigger a route change (not a page change).  The URL is updated via pushstate.  I think this could be replicated in LiveView using a <code>phx_</code> directive on an anchor tag.  So similarly to Nuxt/Next, initial page requests are sent from Phoenix as a traditional request/response.  Subsequent navigation is handled through LiveView.  You can even have the <code>phx_link</code> (for lack of a better name) check for 401/404/etc. before responding.  That would mean faster page transitions, and the ability to animate between pages.  For <a href="https://edgewiserealty.com" rel="noopener nofollow ugc">Edgewise</a>, we do a simple fade-to-white which is far less jarring than a traditional page load (IMO).</p>
<p>Does that make sense?</p>
<p>I have some other ideas of patterns from SPA/SSR land that could port over.  I actually think you could take LiveView pretty far…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96620" 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/lets-discuss-phoenix-liveview/16427/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-96620" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96620"
                     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="96623" data-post-id="96623">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes this makes sense and is a feature we are exploring– transitions to a new view without refresh. Personally, I think the “let a page be a page” approach is the best default case, as renders are fast and new page transitions are least complex if we just let the browser request a new page, but these kinds of features are useful in a lot of cases.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96623" data-batch-url="/posts/batch_likers">
                        5
                      </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/lets-discuss-phoenix-liveview/16427/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-96623" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96623"
                     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 #37"></div>
  </section>
</div>
    <div class="postbit" id="96633" data-post-id="96633">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yeah, I personally think routing is a superior user experience, but I can understand traditional request/response pages as a default.  A couple use-cases for pushstate routing off the top of my head:</p>
<ol>
<li>
<p>Transitions.  Once you get into FLIP (first/last/invert/play), things really start to feel app-like. Example using Vue: <a href="https://css-tricks.com/wp-content/uploads/2018/04/page-transitions-final.mp4" rel="noopener nofollow ugc">https://css-tricks.com/wp-content/uploads/2018/04/page-transitions-final.mp4</a></p>
</li>
<li>
<p>The now-ubiquitous top border loading bar (a la YouTube).  You could stream download/upload progress (eg. image uploads), and page loads (eg. pages that require external API calls).</p>
</li>
<li>
<p>Forced page changes.  For instance, if the server session times out, you could push a route change to <code>/login</code>.</p>
</li>
<li>
<p>Deep linking.  For instance, instead of a page dedicated to editing a user, we often have the edit form as a modal on top of the user list.  What you really want there is the modal to be injected without changing the user’s scroll position.  The url changes to <code>./edit</code>, the user makes the change, closes the modal, which backs out of the route change, removes the modal element, and the user is still at the same scroll position.  Combined with transitions (handling the lightbox fades and dialog bounce via CSS), you get a rich UI experience with little (or no) JS.  In Nuxt, these situations are called <code>&lt;nuxt-child /&gt;</code>.  It’s a “page in a page”, but with a unique URL.  In-short, not everything that is a URL is a “page”.</p>
</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="96633" 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/lets-discuss-phoenix-liveview/16427/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-96633" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96633"
                     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="96635" data-post-id="96635">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote group-Phoenix-Core-Team quote-modified" data-username="chrismccord" data-post="38" data-topic="16427">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrismccord/48/24233_2.png" class="avatar"> chrismccord:</div>
<blockquote>
<p>Personally, I think the “let a page be a page” approach is the best default cause</p>
</blockquote>
</aside>
<p>I agree with Chris on this. I remember when Turbolinks was introduced in Rails and so many people complained about their JS breaking and that it added a level of complexity (to do basic JS/jquery stuff) that wasn’t needed.</p>
<p>I only use page transitions on one of my Rails apps - and even then only on certain pages (where certain pages are grouped). So while it is cool to have, I agree with Chris that it shouldn’t be the default.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96635" 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/lets-discuss-phoenix-liveview/16427/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-96635" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96635"
                     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="96641" data-post-id="96641">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m not suggesting either-or.  Basically, you’d need to opt-in to using routing.  If you want a fresh page, just use an anchor tag (the default).  If you want routing, you’d need to add the directive.  A little JS would look for link clicks that have that directive, and use pushstate instead.</p>
<p>We’ve come a long way from TurboLinks (replacement vs. vdom).  I’m not really sure that’s a fair comparison.  Despite the tooling headaches of JS, there are many valid reasons why so many modern sites are using Vue/React/Angular (and it’s not just offline support, which I’d argue is really only a recent priority with PWA support and service workers).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96641" 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/lets-discuss-phoenix-liveview/16427/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-96641" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96641"
                     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>
    <div class="postbit" id="96653" data-post-id="96653">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have a kind of unusual concern about LiveView: <strong>Bandwidth</strong>. In the demo they were using 60fps or html every second something of that kind would put significant load on network interface. Consider pushing new html code on every single change and doing diff on client side will amount to significant network usage compared to JSON or XML. This might not be a client side problem but might become issue for load balancers and also specially when bandwidth is one of the most expansive part of cloud.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="96653" 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/lets-discuss-phoenix-liveview/16427/42">Post #41</a>
	                </div>
	            </div>
              <div id="likers-container-96653" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="96653"
                     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 #41"></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/16427/load_more?page=5">Load more posts (86 remaining)</a>
</div></template></turbo-stream>