Что некоторые осуществляют рефакторинг методы для сокращения размера скомпилированного кода?

Вы добавляете событие щелчка в классе .first-block вместо идентификатора. Так что просто измените его на #first-block, и оно должно работать.

См. Фрагмент ниже:

//first Section Animate//
$(window).scroll(function() {
    var scroll = $(window).scrollTop();
      $(".first-section").css({
          transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
         
      });
      $(".first-section-btn").css({
        transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
       
    });
  });
  
  $(document).ready(function () {
      var img = $('.first-section');
      var btn = $('.first-section-btn');
      $(window).scroll(function(){
          if ($(window).scrollTop() > 500) {
              img.fadeOut();
              btn.fadeOut();
          } else {
              img.fadeIn();
              btn.fadeIn();
          }
      });
  });
//first Section Animate//


//Second Section Animate//
$(window).scroll(function() {
    var scroll = $(window).scrollTop();
      $(".second-section").css({
          transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
         
      });
      $(".second-section-btn").css({
        transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
        
    });
  });
  
  $(document).ready(function () {
      var img = $('.second-section');
      var btn = $('.second-section-btn');
      $(window).scroll(function(){
          if ($(window).scrollTop() > 1200) {
              img.fadeOut();
              btn.fadeOut();
          } else {
              img.fadeIn();
              btn.fadeIn();
          }
      });
  });
//Second Section Animate//


//Third Section Animate//
$(window).scroll(function() {
    var scroll = $(window).scrollTop();
      $(".third-section").css({
          transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
          
      });
      $(".third-section-btn").css({
        transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
       
    });
  });
  
  $(document).ready(function () {
      var img = $('.third-section');
      var btn = $('.third-section-btn');
      $(window).scroll(function(){
          if ($(window).scrollTop() > 2000) {
              img.fadeOut();
              btn.fadeOut();
          } else {
              img.fadeIn();
              btn.fadeIn();
          }
      });
  });
//Third Section Animate//


//Fourth Section Animate//
$(window).scroll(function() {
    var scroll = $(window).scrollTop();
      $(".fourth-section").css({
          transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
         
      });
      $(".fourth-section-btn").css({
        transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
       
    });
  });
  
  $(document).ready(function () {
      var img = $('.fourth-section');
      var btn = $('.fourth-section-btn');
      $(window).scroll(function(){
          if ($(window).scrollTop() > 2800) {
              img.fadeOut();
              btn.fadeOut();
          } else {
              img.fadeIn();
              btn.fadeIn();
          }
      });
  });
//Fourth Section Animate//


//Fifth Section Animate//
$(window).scroll(function() {
    var scroll = $(window).scrollTop();
      $(".fifth-section").css({
          transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
          
      });
      $(".fifth-section-btn").css({
        transform: 'translate3d(-50%, -'+(scroll/100)+'%, 0) scale('+(100 + scroll/6)/100+')',
        
    });
  });
  
  $(document).ready(function () {
      var img = $('.fifth-section');
      var btn = $('.fifth-section-btn');
      $(window).scroll(function(){
          if ($(window).scrollTop() > 3600) {
              img.fadeOut();
              btn.fadeOut();
          } else {
              img.fadeIn();
              btn.fadeIn();
          }
      });
  });
//Fifth Section Animate//



$(document).ready(function () {
    $('#first-block').click(function() {
        $('#first-block-active').focus();
            $('html').css('filter', 'blur(4px)');
    });
});
body{
height: 4000px;
}

#first-block img{
    z-index: 24;
    height: 280px;
    width: 400px;
    cursor: pointer;
    position: fixed;
    max-width: calc(100% - 120px);
    
    top: 35%;
    left: 50%;
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
    
}
#first-block a{
    z-index: 25;
    position: fixed;
    top: 48%;
    left: 50%;
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
}
#second-block img{
    z-index: 22;
    height: 220px;
    width: 340px;
    cursor: pointer;
    position: fixed;
    top: 39%;
    left: 55%;
    max-width: calc(100% - 160px);
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
    -webkit-box-shadow: 0 15px 32px 5px rgba(0,0,0,0.5);
    -moz-box-shadow: 0 15px 32px 5px rgba(0,0,0,0.5);
    box-shadow: 0 15px 32px 5px rgba(0,0,0,0.5);
}
#second-block a{
    z-index: 23;
    position: fixed;
    top: 48%;
    left: 55%;
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
}

#third-block img{
    z-index: 20;
    height: 150px;
    width: 260px;
    cursor: pointer;
    position: fixed;
    top: 41%;
    left: 45%;
    max-width: calc(100% - 200px);
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
}
#third-block a{
    z-index: 21;
    position: fixed;
    top: 47%;
    left: 45%;
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
    font-size: 10px;
    padding: 9px 12px;
}
#fourth-block img{
    z-index: 18;
    height: 120px;
    width: 240px;
    cursor: pointer;
    position: fixed;
    top: 44%;
    right: 28%;
    max-width: calc(100% - 240px);
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
}
#fourth-block a{
    z-index: 19;
    position: fixed;
    top: 47%;
    right: 35%;
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
    font-size: 7px;
    padding: 7px 12px;
}
#fifth-block img{
    z-index: 16;
    height: 100px;
    width: 190px;
    cursor: pointer;
    position: fixed;
    top: 43%;
    right: 48%;
    max-width: calc(100% - 280px);
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
    -webkit-box-shadow: 0 15px 32px 5px rgba(0,0,0,0.5);
    -moz-box-shadow: 0 15px 32px 5px rgba(0,0,0,0.5);
    box-shadow: 0 15px 32px 5px rgba(0,0,0,0.5);
}
#fifth-block a{
    z-index: 17;
    position: fixed;
    top: 46%;
    right: 51%;
    transform: translate(-50%);
    -webkit-transform: translate(-50%);
    -moz-transform: translate(-50%);
    -ms-transform: translate(-50%);
    -o-transform: translate(-50%);
    padding: 5px 7px;
    font-size: 6px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container" id="first-block">
      <div class="row">
        <div class="col-md-12">
          <a class="btn btn-dark first-section-btn">Кто Мы?</a>
          <img class="first-section z-depth-5" src="https://image.freepik.com/free-photo/portrait-cheerful-young-woman_23-2148066871.jpg" alt="First Section">
        </div>
      </div>
    </div>
    <div class="container" id="second-block">
      <div class="row">
        <div class="col-md-12">
          <a class="btn btn-outline-mdb-color second-section-btn font-weight-bold">Наши Преимущества</a>
          <img id="second-section z-depth-5" class="second-section" src="https://image.freepik.com/free-photo/amazed-girl-yellow-background_23-2148081691.jpg" alt="Second Section">
        </div>
      </div>
    </div>
    <div class="container" id="third-block">
      <div class="row">
        <div class="col-md-12">
          <a class="btn btn-outline-brown third-section-btn font-weight-bold">Наша Команда</a>
          <img class="third-section z-depth-5" src="https://image.freepik.com/free-photo/couple-walking-beach_23-2148111801.jpg" alt="Third Section">
        </div>
      </div>
    </div>
    <div class="container" id="fourth-block">
      <div class="row">
        <div class="col-md-12">
          <a class="btn btn-outline-mdb-color darken-4 fourth-section-btn font-weight-bold">Наши Цены</a>
          <img class="fourth-section z-depth-5" src="https://image.freepik.com/free-vector/blooming-roses-banner_53876-89188.jpg" alt="Fourth Section">
        </div>
      </div>
    </div>
    <div class="container" id="fifth-block">
      <div class="row" id="contact">
        <div class="col-md-12">
          <a class="btn btn-outline-light-blue fifth-section-btn font-weight-bold">Что? Где? Когда?</a>
          <img id="fifth-section z-depth-5" class="fifth-section" src="https://image.freepik.com/free-photo/beautiful-couple-spend-time-summer-park_1157-19676.jpg" alt="Fifth Section">
        </div>
      </div>
    </div>

13
задан Judge Maygarden 19 March 2009 в 17:42
поделиться

6 ответов

  • Используйте функции поколения вместо таблиц данных, если это возможно,
  • Отключите подставляемые функции
  • Превратите часто используемые макросы в функции
  • Уменьшите разрешение для переменных, больше, чем собственный размер машины (т.е., микро 8 битов, попытайтесь избавиться от переменных на 16 и 32 бита - удваивает и увеличивает некоторые кодовые последовательности в четыре раза),
  • Если микро имеет меньшую систему команд (Ползунок руки) включают его в компиляторе
  • Если память сегментируется (т.е., разбитая на страницы или нелинейная) затем
    • Код перестроения так, чтобы использовалось меньше глобальных вызовов (большие команды вызова)
    • Код перестроения и переменное использование для устранения вызовов глобальной памяти
    • Переоцените использование глобальной памяти - если оно может быть помещено в стек затем тем лучше
  • Удостоверьтесь, что Вы компилируете с выключенной отладкой - на некоторых процессорах, она имеет большое значение
  • Данные сжатия, которые не могут быть сгенерированы на лету - затем, распаковывают в поршень при запуске для быстрого доступа
  • Копайтесь в параметрах компилятора - может случиться так, что каждый вызов автоматически глобален, но Вы смогли безопасно отключать это на файле основанием файла для сокращения размера (иногда значительно)

Если Вам все еще нужно больше пространства, чем с compile with optimizations включенный, затем посмотрите на сгенерированный блок по сравнению с неоптимизированным кодом. Затем перепишите код, где самые большие изменения произошли так, чтобы компилятор генерировал ту же оптимизацию на основе хитрого C, переписывает с выключенной оптимизацией.

Например, у Вас могут быть несколько, 'если' операторы, которые делают подобные сравнения:

if(A && B && (C || D)){}
if(A && !B && (C || D)){}
if(!A && B && (C || D)){}

Затем создание снова переменной и создание некоторых сравнений заранее сохранят компилятор от дублирования кода:

E = (C || D);

if(A && B && E){}
if(A && !B && E){}
if(!A && B && E){}

Это - одна из оптимизации, которую компилятор делает для Вас автоматически при включении его. Существуют многие, многие другие, и Вы могли бы рассмотреть чтение небольшого количества теории компилятора, если Вы хотите изучить, как сделать это вручную в коде C.

21
ответ дан 1 December 2019 в 20:11
поделиться

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

С небольшим количеством жемчуга и т.п., можно быстро справиться .xMAP файла или результатов "objdump" или "nm", и обратиться он различные пути к подходящей информации.


Характерный для небольших систем команд: Наблюдайте за литеральным использованием пула. При изменении от, например, ARM (32 бита за инструкцию) система команд к ПОЛЗУНКУ (16 битов за инструкцию) система команд может быть полезной на некоторых процессорах ARM, это уменьшает размер "непосредственного" поля.

Внезапно что-то, что было бы прямой загрузкой из глобального или статического, становится очень косвенным; это должно сначала загрузить адрес глобального/статичного в регистр, затем загрузиться от этого, вместо того, чтобы просто кодировать адрес непосредственно в инструкции. Таким образом, Вы получаете несколько дополнительных инструкций и дополнительную запись в литеральном пуле для чего-то, что обычно было бы одной инструкцией.

Стратегия бороться с этим состоит в том, чтобы сгруппировать globals и помехи вместе в структуры; этим путем Вы только храните один литерал (адрес Вашей глобальной структуры) и вычисляете смещения из этого, вместо того, чтобы хранить много различных литералов при доступе к нескольким statics/globals.

Мы преобразовали наши "одноэлементные" классы из управления их собственными указателями экземпляра на то, чтобы просто быть участниками в большой "структуре GlobalTable", и это имеет заметное значение в размере кода (несколько процентов), а также производительность в некоторых случаях.


Иначе: внимательно наблюдайте за статическими структурами и массивами non-trivially-constructed данных. Каждый из них обычно генерирует огромные объемы кода .sinit ("невидимые функции", если Вы будете), которые выполняются прежде основные () для заполнения этих массивов правильно. Если можно использовать только тривиальные типы данных в помехах, Вы будете далеко более обеспечены.

Это - снова что-то, что может быть легко определено при помощи инструмента по результатам "nm" или "objdump" и т.п. Если у Вас будет тонна материала .sinit, то Вы захотите заняться расследованиями!


О, и - если Ваш компилятор/компоновщик поддерживает его, не бойтесь выборочно включить оптимизацию или меньшие системы команд для просто определенных файлов или функций!

8
ответ дан 1 December 2019 в 20:11
поделиться

Обратите внимание на макросы. Они могут произвести много кода всего от одного макрорасширения. Если Вы находите, что такие макросы - пытаются переписать их так, чтобы их размер был минимизирован, и функциональность перемещена в функции.

Обратите внимание на дублирующий код - и вставляемый копией и логически дублирующийся. Попытайтесь разделить дублирующий код на функции.

Проверьте, могли ли встраивание поддержек компилятора и это быть выключены.

0
ответ дан 1 December 2019 в 20:11
поделиться

Оптимизация компилятора, которая инициировала ошибку? Это странно. Получите карту своей программы и посмотрите, необходимо ли быть нацелены на данные или код. Ищите дублированный код. Ищите код с подобной целью. Одним примером его является код busybox, который стремится к небольшому объему потребляемой памяти.

Это способствует размеру по удобочитаемости, таким образом, это иногда становится довольно ужасным с gotos и так далее.

0
ответ дан 1 December 2019 в 20:11
поделиться

Вышеупомянутое требование ответов, "Включающее компиляторную оптимизацию [уменьшило размер кода]". Учитывая всю документацию и опыт у меня было во встроенных системах программирование DSP TI, я знаю для того, что включение оптимизации УВЕЛИЧИТ Ваш размер кода (для микросхемы DSP TI)!


Позвольте мне объяснить:

TI TMSCx6416 DSP имеет 9 флагов компилятора, которые будут влиять на Ваш размер кода.

  1. 3 различных флага для Оптимизации
  2. 3 различных флага для Отладки
  3. 3 различных флага для Размера кода

Для моего компилятора, когда Вы включаете уровень оптимизации три состояния документации:

  1. Автовстраивание для определенных функций произойдет->, увеличит размер кода
  2. Конвейерная обработка программного обеспечения включена->, увеличит размер кода

Что конвейерно обрабатывает программное обеспечение?

Это - то, где компилятор сделает вещи в блоке, которые делают для циклов, выполняются значительно быстрее (до пару раз быстрее), но за счет большего размера кода. Я предлагаю читать о конвейерной обработке программного обеспечения в Википедии (ищите развертывание цикла, пролог и эпилог).

Так проверьте свою документацию, чтобы удостовериться, что оптимизация не делает Ваш код больше.


Другое предложение состоит в том, чтобы искать флаги компилятора, которые касаются размера кода. Если у Вас есть флаги компилятора размера кода, удостоверьтесь, что провернули их до самой высокой установки. Обычно компиляция для размера кода означает, что Ваш код выполнится медленнее..., но Вам, вероятно, придется сделать это.

0
ответ дан 1 December 2019 в 20:11
поделиться

Рефакторинг дублирующий код должен оказать самое большое влияние на объем потребляемой памяти Вашей программы.

2
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

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