This feature is experimental. It may be changed or removed in a future version.
Sets the time when the fragment's underlying data was last changed.
This can be used to avoid rendering unchanged HTML when reloading a fragment. This saves CPU time and reduces the bandwidth cost for a request/response exchange to ~1 KB.
Let's say we display a list of recent messages.
We use the
[up-poll] attribute to reload the
.messages fragment every 30 seconds:
<div class="messages" up-poll> ... </div>
The list is now always up to date. But most of the time there will not be new messages, and we waste resources sending the same unchanged HTML from the server.
We can improve this by setting an
[up-time] attribute and the message list.
The attribute value is the time of the most recent message.
The time is encoded as the number of seconds since Unix epoch. When, for instance, the last message in a list was received from December 24th, 1:51:46 PM UTC, we use the following HTML:
<div class="messages" up-time="1608730818" up-poll> ... </div>
When reloading Unpoly will echo the
[up-time] timestamp in an
The server can compare the time from the request with the time of the last data update.
If no more recent data is available, the server can render nothing and respond with
X-Up-Target: :none header.
Here is an example with unpoly-rails:
class MessagesController < ApplicationController def index if up.reload_from_time == current_user.last_message_at up.render_nothing else @messages = current_user.messages.order(time: :desc).to_a render 'index' end end end
The number of seconds between the Unix epoch. and the time when the element's underlying data was last changed.