웹 프론트엔드 JS 튜토리얼 vue-cli의 webpack3 속도 최적화 관련 문제

vue-cli의 webpack3 속도 최적화 관련 문제

Jun 15, 2018 pm 04:44 PM
cli vue vue-cli webpack 최적화

이 글은 주로 vue-cli의 webpack3 구성과 종합적인 속도 향상 최적화에 대한 자세한 설명을 소개하고 있습니다.

머리말

vue의 세계화와 함께 다양한 vue 컴포넌트 프레임워크가 점점 더 완벽해졌습니다. 초기 element-ui부터 vux, iview 및 기타 점점 더 고품질 프로젝트에 이르기까지 vue는 이미 프런트엔드에 사용되고 있습니다. 건설은 엔지니어링, 모듈식, 민첩한 것입니다

이에서 많은 사람들이 공식 vue-cli 초기화 프로젝트 템플릿을 선택한 다음 타사 구성 요소 프레임워크와 도구를 도입하여 개발하고 구축할 것이라고 믿습니다. 이 접근 방식을 권장합니다. 그러나 vue-cli로 초기화된 프로젝트 템플릿은 결국 모든 개발자를 위한 것이므로 호환성 측면에서 어느 정도 타협이 있을 것입니다. 많은 분들이 다양한 웹팩 빌드 최적화 관련 글을 찾아보셨을 거라 생각하는데, 그 중 상당수가 너무 오래되었거나 엄격하지 않은 내용입니다

이 글은 시간이 많이 걸리는 최적화와 빌드 성능 개선 사이의 균형, 즉 최소한의 시간을 투자하기를 희망합니다. on 공식 템플릿을 최소한으로 수정하여 최대 빌드 성능 향상을 얻습니다

아이디어

vue-cli 및 webpack2의 초기 버전에서는 다음과 같은 최적화된 구성이 인터넷에 유포되었지만 실제로는 새 버전의 vue-cli- cli 및 webpack3은 더 이상 필요하지 않습니다.

  1. ParallelUglifyPlugin을 사용하여 UglifyPlugin을 대체합니다(UglifyPlugin의 새 버전은 이미 기본적으로 다중 스레드 병렬 빌드를 지원하고 활성화하므로 이 단계는 필요하지 않습니다)

  2. webpack3의 범위 끌어올리기 활성화 (vue-cli의 새 버전은 webapck3으로 구성되었으며 이 구성은 기본적으로 켜져 있습니다.)

  3. 별칭을 잘 활용하세요(vue-cli의 새 버전은 이미 이 작업을 수행했습니다)

  4. 공개 코드를 추출하도록 CommonsChunkPlugin을 구성하십시오(vue-cli의 새 버전은 이미 이 작업을 수행했습니다)

vue-cli 및 webpack3의 새 버전의 경우 다음과 같은 간단한 구성으로 빌드 속도를 최소 2배 이상 높일 수 있습니다. 최적화 후

  1. 필요 시 참조

  2. happypack 멀티 코어 빌드 프로젝트 활성화

  3. 소스 맵 구성 수정

  4. DllPlugin 및 DllReferencePlugin 사전 컴파일된 라이브러리 파일 활성화

연습

1. 주문형 참조

1.1 거의 모든 타사 구성 요소 프레임워크는 구성 요소에 대한 주문형 참조를 제공합니다. iview를 예로 들면 플러그인 babel-plugin-import를 사용하여 요청 시 구성 요소를 로드할 수 있습니다. .babelrc 파일만 수정하면 됩니다

npm install babel-plugin-import --save-dev

// .babelrc
{
 "plugins": [["import", {
 "libraryName": "iview",
 "libraryDirectory": "src/components"
 }]]
}
로그인 후 복사

1.2 그런 다음 필요에 따라 구성 요소를 도입하고 크기를 줄입니다

import { Button } from 'iview'
Vue.component('Table', Table)
로그인 후 복사

2 happypack 멀티 코어 빌드 프로젝트를 활성화합니다

happypack을 설치한 후 수정합니다. /build/webpack.base.conf.js 파일

npm install happypack --save-dev

// /build/webpack.base.conf.js
const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
// 增加HappyPack插件
plugins: [
 new HappyPack({
  id: 'happy-babel-js',
  loaders: ['babel-loader?cacheDirectory=true'],
  threadPool: happyThreadPool,
 })
 ]
// 修改引入loader
{
 test: /\.js$/,
 // loader: 'babel-loader',
 loader: 'happypack/loader?id=happy-babel-js', // 增加新的HappyPack构建loader
 include: [resolve('src'), resolve('test')]
}
로그인 후 복사

3. 소스 맵 구성 수정

3.1 먼저 /config/index.js 파일을 수정하세요

// /config/index.js
dev环境:devtool: 'eval'(最快速度)
prod环境:productionSourceMap: false(关闭source-map)
로그인 후 복사

3.2 그런 다음 /src/main을 수정하세요.

// /src/main.js
const isDebug_mode = process.env.NODE_ENV !== 'production'
Vue.config.debug = isDebug_mode
Vue.config.devtools = isDebug_mode
Vue.config.productionTip = isDebug_mode
로그인 후 복사

4. DllPlugin 및 DllReferencePlugin 사전 컴파일된 라이브러리 파일을 활성화합니다

이것은 효과를 향상시키는 가장 복잡한 단계이자 가장 확실한 단계입니다. 후속 빌드를 위해 타사 라이브러리를 별도로 컴파일하고 패키징할 필요가 없습니다

4.1 build/webpack.dll.config.js 파일을 추가하고 별도로 DLL이 필요한 모듈을 구성합니다.

const path = require("path")
const webpack = require("webpack")

module.exports = {
 // 你想要打包的模块的数组
 entry: {
  vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'iview']
 },
 output: {
  path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置
  filename: '[name].dll.js',
  library: '[name]_library'
 },
 plugins: [
  new webpack.DllPlugin({
   path: path.join(__dirname, '.', '[name]-manifest.json'),
   name: '[name]_library',
   context: __dirname
  }),
  // 压缩打包的文件
  new webpack.optimize.UglifyJsPlugin({
   compress: {
    warnings: false
   }
  })
 ]
}
로그인 후 복사

4.2 build/webpack.dev.conf.js 및 build/webpack.prod.conf.js

new webpack.DllReferencePlugin({
  context: __dirname,
  manifest: require('./vendor-manifest.json')
})
로그인 후 복사

4.3 /package.json

"dll": "webpack --config ./build/webpack.dll.config.js"
로그인 후 복사

에 명령 추가 4.4 DLL 기반 JS 추가에 다음 플러그인을 추가합니다. import to /index.html (먼저 소개해야 함)

<script src="/static/js/vendor.dll.js"></script>
로그인 후 복사

4.5 빌드 실행

npm run dll(这一步会生成build/vendor-manifest.json和static/js/vendor.dll.js)
npm run dev 或 npm run build
로그인 후 복사

Postscript

위의 4가지 주요 단계가 완료된 후 vue-cli 템플릿 프로젝트의 최적화 및 개선이 완료되었습니다. 구성 아직 간단하지 않은 것 같지만 이것은 이미 가장 간단한 최적화이며 아직 수행되지 않은 트릭과 트릭이 더 많습니다. 왜냐하면 너무 많은 최적화 구성은 별 의미가 없지만 너무 많은 중복을 가져올 것이라고 생각하기 때문입니다. 그리고 프로젝트의 복잡성

위 구성의 실제 테스트 빌드 효과는 원래 13초에서 약 6초로 줄어들고, 핫 배포는 밀리초입니다.

가장 중요한 것은 가장 간단한 구성에서 vue-cli를 허용한다는 것입니다. 그리고 webpack은 추후 새로운 버전으로 업그레이드 될 예정이며, 이후에는 쉽게 재구성하여 사용할 수 있습니다. 한 번 구성한 후 구성을 복원하는 데 5분 정도만 투자하면 구성을 수정할 수 있습니다. 각 빌드의 속도를 2배 이상 높이세요. 좀 기대되지 않나요? :)

여기서 몇 마디 더 말씀드리자면, 사실 webpack2에서 webpack3으로의 업그레이드는 개인적으로 꽤 실망스럽습니다. 여전히 지나치게 복잡한 구성의 문제를 근본적으로 해결하지 못하고 있습니다. 전 세계 모든 웹 프로젝트를 지배하는 제품은 사용 편의성/인간성 측면에서 더 많이 고려되어야 합니다.

다양한 .babelrc를 볼 때마다 , .postcssrc.js... webpack 프로젝트에... 다양한 .conf 파일이 있고, 심지어 다양한 메인, 인덱스, 앱 파일까지 있는데 왜 프론트엔드 구성이 엉터리인지 불평을 하고 싶습니다. 좋은 프로젝트에는 수십개 이상의 구성 파일이 있는데, 꼭 필요한 걸까요? 원래는 webpack3이 이 모든 것을 간단하게 만들어줄 거라고 생각했는데, 그렇지 않네요. 하지만 당분간은 바꿀 수 있는 방법이 없기 때문에, 우리가 할 수 있는 일은 최대한 원리를 이해하고 단순화하도록 최선을 다하는 것입니다. 최적화

위 내용은 제가 모두를 위해 정리한 내용입니다. 앞으로 모든 분들께 도움이 되기를 바랍니다.

관련 기사:

js 사용자 정의 트림 기능을 사용하여 양쪽 끝 공백 삭제

JavaScript 작동 원리

vue에서 모두 선택 및 역선택

jest를 사용하여 반응 네이티브 테스트에 대한 자세한 설명 구성요소

데이터 바인딩 및 획득을 위해 vue에서 모두 선택

mint-ui에서 시간 플러그인을 사용하여 선택 값을 얻습니다

VUE2는 보조 지방 및 도시 연결 선택을 구현합니다

위 내용은 vue-cli의 webpack3 속도 최적화 관련 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Vue에서 부트 스트랩을 사용하는 방법 Vue에서 부트 스트랩을 사용하는 방법 Apr 07, 2025 pm 11:33 PM

vue.js에서 bootstrap 사용은 5 단계로 나뉩니다 : Bootstrap 설치. main.js.의 부트 스트랩 가져 오기 부트 스트랩 구성 요소를 템플릿에서 직접 사용하십시오. 선택 사항 : 사용자 정의 스타일. 선택 사항 : 플러그인을 사용하십시오.

Vue 용 버튼에 기능을 추가하는 방법 Vue 용 버튼에 기능을 추가하는 방법 Apr 08, 2025 am 08:51 AM

HTML 템플릿의 버튼을 메소드에 바인딩하여 VUE 버튼에 함수를 추가 할 수 있습니다. 메소드를 정의하고 VUE 인스턴스에서 기능 로직을 작성하십시오.

Vue에서 시계를 사용하는 방법 Vue에서 시계를 사용하는 방법 Apr 07, 2025 pm 11:36 PM

vue.js의 시계 옵션을 사용하면 개발자가 특정 데이터의 변경 사항을들을 수 있습니다. 데이터가 변경되면 콜백 기능을 트리거하여 업데이트보기 또는 기타 작업을 수행합니다. 구성 옵션에는 즉시 콜백을 실행할지 여부와 DEEP를 지정하는 즉시 포함되며, 이는 객체 또는 어레이에 대한 변경 사항을 재귀 적으로 듣는 지 여부를 지정합니다.

vue.js로 JS 파일을 참조하는 방법 vue.js로 JS 파일을 참조하는 방법 Apr 07, 2025 pm 11:27 PM

vue.js에서 JS 파일을 참조하는 세 가지 방법이 있습니다. & lt; script & gt; 꼬리표;; mounted () 라이프 사이클 후크를 사용한 동적 가져 오기; Vuex State Management Library를 통해 수입.

Vue 다중 페이지 개발은 무엇을 의미합니까? Vue 다중 페이지 개발은 무엇을 의미합니까? Apr 07, 2025 pm 11:57 PM

VUE 멀티 페이지 개발은 vue.js 프레임 워크를 사용하여 응용 프로그램을 구축하는 방법입니다. 여기서 응용 프로그램은 별도의 페이지로 나뉩니다. 코드 유지 보수 : 응용 프로그램을 여러 페이지로 분할하면 코드를보다 쉽게 ​​관리하고 유지 관리 할 수 ​​있습니다. 모듈 식 : 각 페이지는 쉬운 재사용 및 교체를 위해 별도의 모듈로 사용할 수 있습니다. 간단한 라우팅 : 페이지 간의 탐색은 간단한 라우팅 구성을 통해 관리 할 수 ​​있습니다. SEO 최적화 : 각 페이지에는 자체 URL이있어 SEO가 도움이됩니다.

Vue가 이전 페이지로 돌아 오는 방법 Vue가 이전 페이지로 돌아 오는 방법 Apr 07, 2025 pm 11:30 PM

vue.js는 이전 페이지로 돌아갈 수있는 네 가지 방법이 있습니다. $ router.go (-1) $ router.back () 사용 & lt; router-link to = & quot;/quot; Component Window.history.back () 및 메소드 선택은 장면에 따라 다릅니다.

Vue Traversal 사용 방법 Vue Traversal 사용 방법 Apr 07, 2025 pm 11:48 PM

vue.js가 트래버스 어레이 및 객체에 대한 세 가지 일반적인 방법이 있습니다. V- 결합 지시문은 V-FOR와 함께 사용하여 각 요소의 속성 값을 동적으로 설정할 수 있습니다. .MAP 메소드는 배열 요소를 새 배열로 변환 할 수 있습니다.

Vue의 div로 점프하는 방법 Vue의 div로 점프하는 방법 Apr 08, 2025 am 09:18 AM

VUE에서 DIV 요소를 점프하는 두 가지 방법이 있습니다. VUE 라우터를 사용하고 라우터 링크 구성 요소를 추가하십시오. @Click 이벤트 리스너를 추가하고 이것을 호출하십시오. $ router.push () 메소드를 점프하십시오.

See all articles