#ruby-on-rails-5 #turbolinks-5
#ruby-on-rails-5 #turbolinks-5
Вопрос:
Мое приложение rails мерцает во время перехода.Turbolinks, похоже, является виновником. Кто-нибудь знает, как остановить мерцание или почему оно вообще мерцает?
Если вы перейдете по ссылке ниже и нажмете на любую из кнопок входа, вы повторите то, что я испытываю.
Странно то, что при доступе к нему из firefox или Safari проблем не возникает. Это происходит только в последней версии Chrome и Internet Explorer? Так что я не уверен, что это проблема с браузером.
Комментарии:
1. Эй, @Paul Brunache ты когда-нибудь добился чего-нибудь в этом?
2. @rm-rf Я только что удалил объявление turbolinks в js-файле моего приложения. Я понял, что делал это для каждого проекта, потому что происходит то, что turbolinks пытается перерисовать, а flash — это ошибка в chrome, которая была открыта некоторое время, и, похоже, они не собираются исправлять. Я открыл при использовании react с помощью react router.
Ответ №1:
Мерцание происходит при загрузке кэша непосредственно перед тем, как turbolinks перезаписывает его новым содержимым. Я смог исправить это, разместив (в <head>
макете) следующий код:
<meta name="turbolinks-cache-control" content="no-cache">
Приведенный выше код отключает функцию кэширования turbolinks. Нет кэширования == нет мерцания пользовательского интерфейса. Однако использование кнопок назад или вперед в браузере теперь будет выполнять сетевой вызов (по-прежнему через Turbolinks)
Смотрите Пример кода по адресу: https://github.com/DockerOnRails/todomvc-turbolinks
Существует также другой вариант очистки кэша перед использованием Turbolink.visit
(который вызывает мерцание пользовательского интерфейса): при вызове Turbolinks.clearCache()
это будет делать то же самое, что и отключение кэша, но дает вам возможность продолжать использовать кеш в других местах.
Комментарии:
1. Вы можете узнать больше о кеше здесь: github.com/turbolinks/turbolinks
2. Действительно ли это так, что мы не можем использовать кэширование на любой странице, содержащей изображения? Это кажется немного экстремальным? Кэш довольно потрясающий, и я чувствую, что стыдно просто выбросить его, потому что страница содержит изображение?
3. Я не уверен, может быть способ проверить, что содержимое действительно изменилось, прежде чем переписывать его. Я не видел способа сделать это с версией turbolinks, которую я тестировал при ответе на этот вопрос. С тех пор я не использовал turbolinks.
Ответ №2:
Виновником для меня (с Rails 7.0.4) было флэш-сообщение от devise. Я смог предотвратить его мерцание, добавив data-turbo-cache="false"
. Например:
<div data-turbo-cache="false">
<% if notice %>
<p class="alert alert-success"><%= notice %></p>
<% end %>
<% if alert %>
<p class="alert alert-danger"><%= alert %></p>
<% end %>
</div>
На самом деле я решил полностью удалить turbo.