Оптимизация Времени изготовления GCC/Make

Я могу заставить это работать. Я сделал это:

В моих typings.d.ts

// Import Leaflet into L in case you want to reference Leaflet types
import * as L from 'leaflet';

// Declare the leaflet module so we can modify it
declare module 'leaflet' {

export interface IEasyPrintConstructorOptions {
  title: string;
  position: string;
  exportOnly: boolean;
  hideControlContainer: boolean;
  hidden:boolean;
}

export interface EasyPrint extends L.Control {
}

export function easyPrint(options?: IEasyPrintConstructorOptions): EasyPrint;

}

В app.component.ts:

import * as L from 'leaflet';
import 'leaflet-easyprint';

 //easyPrint initialization
 this.easyPrint = L.easyPrint({
  title: 'Print map',
  position: 'bottomright',
  exportOnly: true,
  hideControlContainer: true,
  hidden:true
}).addTo(map);

 //manually trigger export
 this.easyPrint.printMap('CurrentSize', 'Filename');

Это решение основано на коде, который вы поставить вопрос и https://asymmetrik.com/ngx-leaflet-and-leaflet-plugins/

11
задан inazaruk 2 April 2009 в 08:29
поделиться

7 ответов

Можно заняться проблемой с двух сторон: осуществите рефакторинг код для сокращения сложности, которую видит компилятор, или ускорьте выполнение компилятора.

Не касаясь кода, можно добавить больше питания компиляции в него. Используйте кэш, чтобы не перекомпилировать файлы, которые Вы уже скомпилировали и distcc для распределения времени изготовления среди большего количества машин. Использование делает-j, где N является количеством cores+1, если Вы компилируете локально, или большее количество для распределенных сборок. Тот флаг запустит больше чем один компилятор параллельно.

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

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

16
ответ дан 3 December 2019 в 02:20
поделиться

Из описания проекта я предполагаю, что у вас есть один Makefile на каталог и вы используете рекурсивное make много. В этом случае методики из «Рекурсивное создание считают вредными» должны очень помочь.

4
ответ дан 3 December 2019 в 02:20
поделиться

Лучшее я могу думать с make -j опция. Это говорит make выполнять как можно больше заданий параллельно:

make -j

Если Вы хотите ограничить количество параллельных заданий к n, можно использовать:

make -j n


Удостоверьтесь, что зависимости корректны так make не выполняет задания, к которым это не имеет.


Другой вещью принять во внимание является оптимизация это gcc делает с -O переключатель. Можно указать различные уровни оптимизации. Чем выше оптимизация, тем дольше компиляция и времена ссылки. Проект я работаю с выполнениями, занимает 2 минуты для соединения с -O3, и половина минуты с -O1. Необходимо удостовериться, что Вы не оптимизируете больше, чем Вы должны. Вы могли создать без оптимизации для сборок разработки и с оптимизацией для сборок развертывания.


Компиляция с информацией об отладке (gcc -g) вероятно, увеличит размер Вашего исполняемого файла и может повлиять на Ваше время изготовления. Если Вам не нужен он, попытайтесь удалить его, чтобы видеть, влияет ли это на Вас.


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

7
ответ дан 3 December 2019 в 02:20
поделиться

http://ccache.samba.org/ ускоряет достижение.

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

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

Если у Вас есть несколько компьютеров, доступный gcc хорошо распределяется distcc.

Можно также использовать кэш, кроме того.

Все это работает с очень небольшими изменениями make-файлов.

2
ответ дан 3 December 2019 в 02:20
поделиться

Если у Вас есть LAN с машинами разработчика, возможно, необходимо попытаться реализовать распределенное решение для компилятора, такое как distcc.

Это не могло бы помочь, если все время во время сборки проведено, анализируя зависимости, или делая некоторую единственную последовательную задачу. Для необработанного уплотнения компиляции многих исходных файлов в объектные файлы параллельное здание, очевидно, помогает, как предложено (на единственной машине) Nathan. Параллелизация через несколько машин может использовать его еще больше.

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

Кроме того, вы, вероятно, захотите сохранить файлы исходного кода как можно меньше и самодостаточны, т. е. предпочитать много меньших объектных файлов одному огромному объектному файлу.

Это также поможет избежать ненужных перекомпиляций,

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

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