Will-change потребляет слишком много памяти

На днях на одном из сайтов, столкнулся с интересной ошибкой, которая выводится в консоли браузера Firefox:

Will-change потребляет слишком много памяти. Лимитом бюджета является площадь поверхности документа умноженная на 3 (510230 пикселей). Вхождения will-change, превышающие бюджет, будут проигнорированы

Проведя небольшое расследование, понял что проблема кроется в коде галереи WordPress, которая выводит картинки на страницы в слишком хорошем качестве (читай в оригинальном). И когда картинок становится на странице больше чем несколько, соответственно и происходит данная оказия. Исправил, покопавшись в исходном коде. А именно заменил функцию wp_get_attachment_metadata(), которая выдает url оригинального файла, на wp_get_attachment_image_src, которая может выдавать URL уже нужного размера. При использовании стандартной медиабиблиотеки в wordpress, она при загрузке автоматически режет файл на наиболее востребованные размеры.

Will-change потребляет слишком много памяти

Другие статьи по wordpress

Картинка из base64

Довольно типичная задача — нужда чтобы изображение полученное в виде данных при помощи например запроса ajax (картинка из base64), отобразилась на веб странице. Решение простое, и даже не требует никаких перекодировок, так как, движёк браузера уже позволяет отображать такие картинки, достаточно указать ему формат данных источника. Например так:

var image = new Image();
image.src = 'data:image/png;base64,iVBORw0K...';
document.body.appendChild(image);
Картинка из base64

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

<img id='base64image'>
<script>       
        $.ajax({
            type: 'POST',
            url: '/getdata.php',
            success: function(data){
               document.getElementById('base64image').src = data:image/png;base64,${data.image.content};
            },
            dataType: 'json',
        });
</script>       

Кнопка выбора периода

Довольно редко использую, потому забываю постоянно, вот сделал себе очередную шпаргалку, как делается кнопка выбора периода в 1с на управляемых формах. Итак, первым делом создайте реквизит формы, с типом «стандартный период»:

кнопка выбора периода

Далее, перетаскиваем этот реквизит на форму, и добавляю обычные реквизиты с типом Дата+Время:

Осталось всего ничего — добавить обработчик события «при изменении»:


&НаКлиенте
Процедура ВыборПериодаПриИзменении(Элемент)
	НачПериода = ВыборПериода.ДатаНачала;
	КонПериода = ВыборПериода.ДатаОкончания;
	
	Сообщить("Начало: " + НачПериода + ", окончание: " + КонПериода);
КонецПроцедуры

На этом задача «кнопка выбора периода» будем считать завершена. Еще больше всяких шпаргалок по 1С, легко найдется здесь.

Затененный задний фон для модального окна

Довольно часто встречающаяся задача: затененный задний фон модального окна или элемента веб страницы.Решается задача довольно просто, с использованием псевдоэлементов :before и :after. Обращаю внимание, что их можно использовать только в парных тегах вида <div></div>, и соответственно нельзя в тегах вида input (т.е. не парных). Еще одним нюансом является то, что значение свойства display может быть только: block, inline, none, list-item. Все остальные значения будут трактоваться как block.

Например задача получить страницу вида:

задний фон для модального окна

Решается примерно так: сначала определим стили CSS:

.application:before {
   content: '';
  position: fixed;
  z-index: 2;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
   background: url(http://ultraimg.com/images/Ho6hQWs.jpg) center no-repeat;
  background-size: cover;
    filter: blur(2px);
}

.application:after {
  content: '';
  position: fixed;
  z-index: 2;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0,0,0,.5);
}
.select_area_color_lent_tag{
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 250px;
  height: 250px;
  background-color: white;
  border: 1px solid black;
  padding: 20px;
  display: flex;
  flex-wrap: wrap;
  text-align: center;
  justify-content: space-around;
  z-index: 20;    
}

HTML для этих стилей может выглядеть таким:

        <div class="application" style="display: none">            <div class="select_area_color_lent_tag">            </div>        </div> 

В нужный момент достаточно показать блок application, и получим картинку как на скриншоте выше,а именно затененный задний фон модального окна:

$(".application").show()

А здесь можно посмотреть еще много советов по работе с CSS

Бинарные логи mysql

С недавних пор обнаружил, что на моёй виртуальной машине, где размещается сайт, как-то подозрительно быстро заканчивается место на жестком диске. Проведя небольшое расследование, обнаружил, что главный виновник — бинарные логи mysql. Странно конечно, потому что в конфигурационных файлах mysql настройка log-bin отключена:

Бинарные логи

И вестись они в принципе не должны. Вообще, бинарные логи обычно нужны только в том случае если:

  • настроена репликация с другим сервером
  • необходимо иметь возможность восстановить поврежденную базу данных (вдруг бекапы не делаете)

В остальных случаях она не нужна. Хм.. ну уже если отключить не удаётся, по неизвестной причине, то можно ограничить накопление логов ключами:

  • expire_logs_days=3 — ограничить глубину логов 3 днями
  • max_binlog_size =100M — ограничить размер файла логов 100 мегабайтами

Чуть погуглив, обнаружил, что в свежих версиях mysql логи отключаются теперь другим ключем: disable-log-bin

Однако.. что делать с файлами логов, если они не были отключены и накопились? Удалять их руками черевато возникновением ошибок. Поэтому лучше войти в консоль mysql и выполнить следующую команду:

RESET MASTER;

Ну и на всякий случай, удалить логи старше Х дней можно вот так:

PURGE BINARY LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 5 DAY);

Могу порекомендовать еще посмотреть мою старую шпаргалку по MySQL и другие лайфхаки

1 28 29 30 31 32 310