сократить время выполнения JS с помощью NextJS

У меня есть веб-сайт, на котором я пытаюсь оптимизировать рейтинг скорости страницы маяка. Я только что переключился с SSR с кэшированием nginx на next export с использованием exportPathMap и getInitialProps (также с кэшированием nginx).

Конкретная интересующая страница получает большой трафик

После переключения на статику первое изображение контента появляется загружается через 2-2,5 с для медленного 3G. Однако время выполнения JS занимает около 3-6 секунд.

введите здесь описание изображения

Вопросы:

  1. Почему оценка скрипта занимает 3-6 секунд, когда я использую статический экспорт, у меня сложилось впечатление, что это будет довольно быстро?

  2. Есть ли способы оптимизировать время выполнения nextjs JS? Или, может быть, настройка веб-пакета?


person Kevin Danikowski    schedule 27.04.2020    source источник
comment
Когда я открываю эту страницу с отключенным javascript, я получаю весь контент, скрипты загружаются и выполняются до того, как пользователь сможет взаимодействовать со страницей, но весь статический html-контент, кажется, присутствует при начальной загрузке.   -  person HMR    schedule 12.05.2020
comment
Может быть, вы пытаетесь лениво импортировать некоторые модули, которые, как вы знаете, могут быть очень большими, чтобы ваши пользователи могли получить более низкую оценку скрипта. Я бы также предложил некоторые проверки с помощью инструментов разработки профилирования.   -  person lndgalante    schedule 13.05.2020
comment
Я предполагаю, что это включает в себя все дополнительные сценарии показа рекламы, верно?   -  person Samuel Goldenbaum    schedule 13.05.2020
comment
Да, это включает в себя сценарии показа рекламы, они замедляют работу страницы, я мало что могу с этим поделать. @HMR Я добавил ленивую загрузку ко всему, кроме раздела перезаписи, и это не изменило ничего, я думаю, это просто логика раздела перезаписи. Я посмотрю, смогу ли я лениво загружать его части, не уверен, поддерживается ли ленивая загрузка для статического экспорта, на что стоит обратить внимание.   -  person Kevin Danikowski    schedule 15.05.2020
comment
Хотите попробовать отложенную загрузку?   -  person Ozik Jarwo    schedule 15.05.2020


Ответы (1)


Попробуйте обернуть некоторые тяжелые модули следующим образом:

import dynamic from 'next/dynamic';
import PreDynamicState from './PreDynamicState';

const DynamicInnerComp = dynamic(() => import('./MyHeavyModule'), {
  ssr: false,
  loading: () => <PreDynamicState />
});

export const MyQuicklyLoadingPage: FC = () => {
  return (
    <div>
      <h1>Welcome to the page!</h1>
      <p>You'll see this text</p>
      <p>Before we load the heavy stuff below</p>
      <p>Large markdown files containing lots of images, etc.</p>
      <DynamicInnerComp />
    </div>
  );
};

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

Кроме того, оцените, улучшит ли производительность что-то вроде попытки использовать Preact. Я не знаю, насколько легко это сделать с помощью nextJS. Я нашел это https://github.com/developit/nextjs-preact-demo

person Charley Bodkin    schedule 15.05.2020
comment
Эй, Чарли, я согласился, так как у награды осталось всего 30 минут, но на самом деле это не слишком мне помогает. На самом деле я безуспешно использовал эту динамическую настройку в 90% приложения, я попытаюсь использовать ее в 10% более тяжелой части и посмотрю, что произойдет. Что касается preact, я подумал, но у меня есть сложная логика ловушек в некоторых местах, которые, как я полагаю, не поддерживаются preact, особенно на одной странице. Мои страницы полностью статичны, и логика запускается только тогда, когда вы используете область ввода текста, которая не должна быть слишком тяжелой. Любые другие предложения приветствуются :) - person Kevin Danikowski; 15.05.2020
comment
К сожалению, я попытался улучшить его с помощью этого, и ничего :( Я установил для большей части страницы значение ssr false при следующем экспорте без успеха :( Это уменьшило мой размер JS, но время не сильно изменилось. - person Kevin Danikowski; 19.05.2020
comment
@KevinDanikowski, вы нашли решение этой проблемы? - person Mayank-Dolphin; 19.05.2021
comment
@ Mayank-Dolphin нет: / Я безуспешно реализовал статический экспорт. Я еще не пробовал useStaticProps, но планирую попробовать в будущем. - person Kevin Danikowski; 20.05.2021