2016-08-08 2 views
0

У меня есть следующая ситуация: У меня есть 86 диаграмм (ChartsJS), разделенных на три категории. Я использую вкладки JQueryUI для отображения каждой категории в то время на отдельной вкладке. Дело в том, что из-за большого количества javascript, встроенного в страницу, время загрузки страницы составляет более 7 секунд, когда синтаксический разбор и исполнение JS занимает более 5,2 того времени (измеряется с помощью google chrome).Как лениться оценить и выполнить javascript?

Мне интересно, есть ли способ ленить оценить те детали JavaScript, которые отображают элементы, которые еще не представлены пользователю (а не на открытой вкладке). Обратите внимание, что я хотел бы не только выполнить данный скрипт при изменении вкладок (это очевидно и легко сделать), но и оценить требуемый скрипт по требованию в определенный момент времени после загрузки страницы.

EDIT: мне нужно уточнить, что мой JS динамически генерируется таким образом asyncload из файла не вариант. Это может быть недостаток дизайна на моей стороне.

Вот хронология из хрома: enter image description here

+0

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

+0

@RoryMcCrossan это верно, и обработка этого события не является проблемой. Проблема заключается в том, как оценить (первый раз) js и выполнить «на лету» без использования загрузки файла. – Antoniossss

+0

Я не вижу, как это будет проблемой? Используйте обратный вызов запроса AJAX для интроляции диаграмм после их добавления в DOM –

ответ

0

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

для того, чтобы запустить карту в chartjs вам нужно написать следующее:

var myChart = new Chart(SELECTOR, {...}) 

значит вызвать только новую таблицу на ваших активных селекторов

//Global Configs 
Chart.defaults.global.hover.mode = 'single'; 

function onTabOne() { 
    var myChart = new Chart(SELECTOR, {...}) 
} 
function onTabTwo() { 
    var pieChart = new Chart(SELECTOR, {...}) 
} 

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

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

+0

Конечно, но код, который вы написали, будет разобран - так как существует много JS, сам анализ занимает 2,6 секунды. Я тоже хочу этого избежать – Antoniossss

+0

hmm, тогда я считаю, что вам следует оптимизировать свой код, а не искать способ «ленивого разбора». что вы имеете в виду динамически генерируемое? Хром анализирует асинхронные и отложенные сценарии в отдельном потоке, как только начинается загрузка. Это означает, что после завершения загрузки синтаксический анализ может завершиться всего в миллисекундах, а страницы будут загружаться на 10% быстрее. – Bamieh

Смежные вопросы