If you're willing to learn a little Javascript, I find doing the same stuff in jQuery to be fast and easy. It sounds like you're still doing AJAX calls, just the link_to_remote
behavior was having unfortunate side effects.
If your Rails view code looks like this:
<%= link_to "Show me", slow_page_url, :class => 'remote', :'data-update' => 'display' %>
I like to add a jQuery block like so:
<% content_for :dom_ready do %>
// register a callback for the click event on links with class 'remote'
$('a.remote').click( function() {
// this is the clicked_link, which you may want to
// persist thru several levels of callbacks
// so assign it to a local variable
var clicked_link = this;
// assuming you already have a start_spinner function,
// and you might pass it the object where the click occured
start_spinner(clicked_link);
// here's the ajax call, which will automatically update
// the div you identified using the data-update attribute
// with the returned html
$('#'+$(this).attr('data-update')).load( $(this).attr('href'), {}, function() {
//this callback only runs when the AJAX request has completed
stop_spinner( clicked_link );
} );
// prevents the click event from propagating to the window object
//and moving the user away from the current page
return false;
} );
<% end %>
Then I have all my javascript load at the bottom of my layout like so
<%= javascript_include_tag 'jquery-1.3.2.js' %>
<script type="text/javascript">
$( function() {
<%= yield :dom_ready %>
);
</script>