Оптимизация больших приложений

Игорь Шеко

Что такое большое приложение?

Что обычно тормозит?

Серверные запросы

Загрузка бандла

Рендер компонентов

Что-то закостылили на фронте

Пcихология

Главные советы

Взять и переписать

Прикрутить SSR

Давайте оптимизировать под

самые

слабые

телефоны

Только для новых лидов:

"Давайте заменим команду"

Всем спасибо

Игорь Шеко

Lead Front end developer @ Voximplant

</ВРЕДНЫЕ СОВЕТЫ>

Пcихология

Технологический долг

Рендер компонентов

Загрузка бандла

Серверные запросы

С

З

Р

Д

П

С

З

Р

Д

П

С

З

Р

Д

П

Команда

Клиенты

Оптимизация запросов

Поговорите с вашим бекендом, если:

- Запросы выполняются медленно (>100мс)

- У вас все еще http(s) v1.1

- Ответ не сжат или сжат неверно

- Кеширование запросов не применяется

Почему такое возможно

- паралельная разработка

- разные команды

- оптимизация клиента

Как это решать

- исправить код

- кеширование на стороне браузера

- кеширование на фронте

- что угодно еще

export default class mAaxios{
  post(url,params){
    const cache = this.checkCache(url,params);
    if(cache) return cache;
    //...
    return this.writeCache(url,params,data);
  }
  
  put(){
    //...
  }
  get(){
    //...
  }
  
  private cache:Map<string,any>;
  private blackList:string;
  
  constructor(){
    this.axios = //...
    
    setInterval(()=>this.heartbeat,1000);
  }
  
}

PWA

- Очень просто, решает все проблемы с кешированием (почти)

- Но нужен специалист

- И нужно как-то интегрировать...

Оптимизация архитектуры

- Продукт создавался стихийно

- Вы новый лид на проекте

- Не понятно с чего начать

Вынесите в Vuex все что можно

- Эта запись есть в Vuex?

- Почему ее туда не занесли?

Уберите из Vuex все что не нужно

const store = {
  user:{
    id: 0,
    name: "Ivan",
    //....
    avatar: "data:image/jpeg;base64,/9j/4QA0RXhpZgAASUkqAAgAAAABAJiCAgAPAAAAGgAAAAAAAABHZW9yZ2l5IFBhc2hpbgAAAAD/7AARRHVja3kAAQAEAAAAZAAA/+EEE2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjFBMTkyNjg4QjQwQjExRTFBQzk4RjA2M0Y5RTkwOTFBIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjFBMTkyNjg3QjQwQjExRTFBQzk4RjA2M0Y5RTkwOTFBIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzUgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSI0NjJEM0RGMDFBNjU0QkE2M0ZCN0Y4QTIxRjIzMEQ2QyIgc3RSZWY6ZG9jdW1lbnRJRD0iNDYyRDNERjAxQTY1NEJBNjNGQjdGOEEyMUYyMzBENkMiLz4gPGRjOnJpZ2h0cz4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVs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"
  }
}
/**
 * Reduce the code which written in Vue.js for getting the getters
 * @param {String} [namespace] - Module's namespace
 * @param {Object|Array} getters
 * @return {Object}
 */
export const mapGetters = normalizeNamespace((namespace, getters) => {
  const res = {}
  normalizeMap(getters).forEach(({ key, val }) => {
    // The namespace has been mutated by normalizeNamespace
    val = namespace + val
    res[key] = function mappedGetter () {
      if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
        return
      }
      if (process.env.NODE_ENV !== 'production' && !(val in this.$store.getters)) {
        console.error(`[vuex] unknown getter: ${val}`)
        return
      }
      return this.$store.getters[val]
    }
    // mark vuex getter for devtools
    res[key].vuex = true
  })
  return res
})

То что у вас Vue - не значит что все должно быть в компонентах

const state = Vue.observable({ count: 0 })
const Demo = {
  render(h) {
    return h('button', {
      on: { click: () => { state.count++ }}
    }, `счётчик — ${state.count}`)
  }
}

Сервисы

app.js

POST img.png

GET userData

El1.vue

POST img.png

GET userData

El3.vue

El40.vue

El2.vue

El1.vue

El3.vue

El40.vue

El2.vue

Vuex

El1.vue

getUserMedia

mediaRecorder

El1.vue

El3.vue

El40.vue

El2.vue

Сервис

request

response

Единственная ответственность

Отчуждаем

Легко паралелится в WebWorker

Оптимизация бандла

Webpack Bundle Analyzer

Импортозамещение

export default class PubSub{
  private listeners:Map<string,EventListener[]> = new Map();
  
  addEventListener(event:string,listener:EventListener){
    const listeners = this.listenerts.get(event)||[];
    this.listenerts.set([...listeners, listener]);
  }
  
  removeEventListener(event:string,listener?:EventListener){
    if(!listener)
      this.listenerts.remove(event);
    this.listenerts.set(this.listeners.filter(item=>item!==listener]);
  }
  
  dispatch(event:string, data?:any){
    const listeners = this.listenerts.get(event)||[];
    listeners.forEach(item=>item.handleEvent(data));
  }
}
public static debounce(callback: (...args: any[]) => void, 
  wait: number, 
  immediate: boolean = false) {
    let timeout = null;
    return (...args: any[]) => {
      const next = () => callback(...args);
      clearTimeout(timeout);
      timeout = setTimeout(next, wait);
      if (immediate) {
        next();
      }
    };
  };

Оптимизация рендера

Реактивность - ваш враг *

* на момент оптимизации

Как работает реактивность.

Сейчас.
В коде.

 let childOb = !shallow && observe(val)
  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get: function reactiveGetter () {
      const value = getter ? getter.call(obj) : val
      if (Dep.target) {
        dep.depend()
        if (childOb) {
          childOb.dep.depend()
          if (Array.isArray(value)) {
            dependArray(value)
          }
        }
      }
      return value
    },
    set: function reactiveSetter (newVal) {
      const value = getter ? getter.call(obj) : val
      if (newVal === value || (newVal !== newVal && value !== value)) {
        return
      }
      if (process.env.NODE_ENV !== 'production' && customSetter) {
        customSetter()
      }
      if (getter && !setter) return
      if (setter) {
        setter.call(obj, newVal)
      } else {
        val = newVal
      }
      childOb = !shallow && observe(newVal)
      dep.notify()
    }
  })

Тоже самое, но с Proxy.

data = new Proxy(data_without_proxy, {  // Override data to have a proxy in the middle
  get(obj, key) {
    deps.get(key).depend(); // <-- Remember the target we're running
    return obj[key]; // call original data
  },

  set(obj, key, newVal) {
    obj[key] = newVal; // Set original data to new value
    deps.get(key).notify(); // <-- Re-run stored functions
    return true;
  }
});

Evan You on Proxies

2.5

3.x

Рендеринг 3000 state-full компонентов

Асинхронные компоненты

Vue.component('MyComponent', function (resolve, reject) {
  setTimeout(function () {
    // Pass the component definition to the resolve callback
    resolve({
      template: '<div>I am async!</div>'
    })
  }, 1000)
})


const AsyncComponent = () => ({
  // The component to load (should be a Promise)
  component: import('./MyComponent.vue'),
  // A component to use while the async component is loading
  loading: LoadingComponent,
  // A component to use if the load fails
  error: ErrorComponent,
  // Delay before showing the loading component. Default: 200ms.
  delay: 200,
  // The error component will be displayed if a timeout is
  // provided and exceeded. Default: Infinity.
  timeout: 3000
})

const Foo = () => import('./AsyncComponent.vue')


const router = new VueRouter({
  routes: [
    { path: '/foo', component: Foo }
  ]
})

const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue')
const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue')

Заключение.

Оптимизация - комплексный процесс

Никогда не поздно оптимизировать

Неверная оптимизация - лучший способ потерять команду

Но иногда рано

И когда вы наконец отимизировались, напишите, наконец, документацию.

+ Таск трекер

+ Историю оптимизаций

Всем спасибо

Игорь Шеко

Front-end team lead @ Voximplant

Оптимизация больших приложений

By Igor Sheko

Оптимизация больших приложений

  • 665