Как устранить пострендеринг “мерцание”?

Если вы хотите, чтобы переменные среды устанавливались во время выполнения, вы можете установить их вручную или использовать другие инструменты, такие как dotenv https://www.npmjs.com/package/dotenv

Но самый простой способ - установить их во время выполнения при запуске двоичных файлов. Вы можете использовать либо пакетный скрипт (если windows), например:

setlocal
set NODE_ENV=production
.\your-binaries.exe
endlocal

Примечание : setlocal предотвращает утечку переменной в дальнейшем.

Однострочная версия может быть set NODE_ENV=production && .\binaries.exe

Под Linux работает так же: установить переменную, затем запустить.

16
задан Daniel Naab 21 January 2009 в 18:01
поделиться

6 ответов

Как насчет того, чтобы комбинировать некоторые из этих решений:

<style type="text/javascript">
    .only-without-script {
        display: none;
    }
</style>
<noscript>
    <style type="text/javascript">
        .only-with-script {
            display: none;
        }
        .only-without-script {
            display: block;
        }
    </style>
</noscript>

или я предпочитаю добавлять, класс к телу (поместите Ваш <script> тег наверху тела и не использует .ready событие):

<head>
    <style type="text/javascript">
        body.has-script .something-not-ajaxy {
            display: none;
        }

        input.ajaxy-submit {
            display: none;
        }
        body.has-script input.ajaxy-submit {
            display: inline;
        }
    </style>
</head>
<body>
    <script type="text/javascript">
        document.body.className += ' has-script';
    </script>
    <!-- the rest of your page -->
</body>
10
ответ дан 30 November 2019 в 22:24
поделиться

Для ситуаций, идентичных Вашему, я обычно помещал кнопку отправки вокруг a <noscript> тег. Никто не предложил это, таким образом, я не уверен, считают ли это плохой практикой вокруг этих частей, но это - то, что я использую, и это работает на меня.

Если Вы только хотите узел, видимый, когда JavaScript включен, Вы могли сделать в голове:

<noscript>
    <style type="text/css">
    .js-enabled { display: none; }
    </style>
</noscript>

И затем дайте любым элементам только для JavaScript класс js-enabled.

5
ответ дан 30 November 2019 в 22:24
поделиться

Я могу думать о двух методах:

1 - Предварительно обнаружьте, если JavaScript включен, и сохраните ту информацию в cookie/сессии. Это могло быть сделано в первой полосе и должно устранить большинство мерцаний.

2 - Используйте livequery плагин, который обнаруживает элементы, поскольку они добавляются к DOM. Можно выполнить его правильный, когда JavaScript заканчивает загружаться, который должен быть очень перед документом (это в голове).

$('.with_js_disabled').livequery(function() {
     $(this).hide();
});
1
ответ дан 30 November 2019 в 22:24
поделиться

Точно так же, как David сказал, можно добавить JavaScript, который добавляет таблицу стилей для сокрытия всех "ненужных" элементов HTML:

<head>
  ...
  <script type="text/javascript" language="javascript">
    document.write('<style type="text/css"> .disabled-if-javascript { display: none; } </style>');
  </script>
</head>
...

Если JavaScript включен, он устанавливает все элементы класса "disabled-if-javascript" к скрытому, прежде чем тело будет даже загружено. Просто добавьте этот класс ко всем элементам, которые должны быть скрыты, если JavaScript включен. Вам, возможно, также понадобился бы класс enabled-if-javascript, который делает противоположное, для показа определенных элементов, которые были бы скрыты для не-JavaScript. Возможно, необходимо добавить"!important"к Вашему определению стилей там, для переопределения существующего (не-JavaScript) правила.

2
ответ дан 30 November 2019 в 22:24
поделиться

Просто мысль: я не уверен, будет ли это работать, но Вы могли бы попытаться поместить некоторый JavaScript в заголовок документа для записи элемента стиля CSS, который скроет кнопку.

1
ответ дан 30 November 2019 в 22:24
поделиться

Простая вещь, которую стоит попробовать: добавить прямо перед закрытием тега body.

Это заставит всех привязывается к событию готовности к срабатыванию. И если вы заставите их активироваться в конце документа, DOM будет загружен и готов к работе, даже если «родное» событие onDomContentLoaded еще не запущено.

Это обычно работает для меня, когда я хочу удалить мерцание, особенно в IE / win, так как IE имеет собственный эмулятор domready в событии 'ready' jQuery.

0
ответ дан 30 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: