目次
キャッシュ
网页加载
html
css分离
common
本地开发
打包速度
DllPlugin
rrreee

Webpack エクスペリエンスの共有

Feb 02, 2018 pm 02:28 PM
web webpack 経験

webpack はモジュール バンドラーです。その主な目的は JavaScript ファイルを一緒にパッケージ化することです。パッケージ化されたファイルはブラウザで使用されますが、この記事では主に Webpack について説明します。

キャッシュ

キャッシュ用に max-age + cdn を組み合わせたファイル名 [name].[contenthash:8].js を生成します。 [name].[contenthash:8].js,结合 max-age + cdn 做缓存。

网页加载

html

以前是固定的一个 html, html -》版本号 js 文件(通过webpack打出来的)-》通过版本号确定具体 js。(现在想想不太合理,虽然没和后台耦合这么重)

现在是变动的 html,通过 HtmlWebpackPlugin 打出来(webpack 生成,里面包含版本号的 js)

这样还省了一个串行时间(拉版本号文件)。 同时也便于做灰度,比如发布了需求,让一部分用户先体验,动态打出 html 给到后台即可。(固定 html 则没这么轻松做)

css分离

在观麦,css变动会非常的少,这得益于 react-gm 对类名的完善。 既然变动少,把 css 单独出来也不错,使用 ExtractTextPlugin 分离 css。

分离后减少 js 大小,不阻塞 js,同时 css 和 js 可同时拉取。

common

new CommonsChunkPlugin({name: 'commons'})
ログイン後にコピー

看打包后的 common 代码,会发现其他模块的id和hash都会打在common中,这样每次 commons 文件都会变,就很难做缓存了。

提供两个文件列表即可,会发现 webpack 吧 id 和 hash 打在 manifest 文件中。这样commons就可以缓存了。btw,没看到官网有介绍,看到的说声。

new CommonsChunkPlugin({names: ['commons', 'manifest']})
ログイン後にコピー

本地开发

讲讲代理,本地开始是自己起的服务,没有后台服务,自然需要代理到某个地方。 可通过 devServer.proxy 。也可代理到外网排查 bug,都是源码,查 bug 非常快。

"proxy": {
    "/ticket/*": {
      "target": "http://dev.guanmai.cn:7413",
      "changeOrigin": true
    }
}
ログイン後にコピー

打包速度

DllPlugin

当项目大了后,必然需要打很多包,导致打包时间非常长。 官方推荐做法是把不常变动的文件打DLL。

我们工程就把  react react-dom prop-types classnames mobx mobx-react lodash moment big.js 等打进来。

网上资料都介绍 dll 的 文件名是 [name]_[hash].dll.js, 我们是 [npm version]_dll.js npm version

Web ページの読み込み

html

は、以前は固定 HTML、html -> バージョン番号 js ファイル (webpack を通じて入力) -> バージョン番号によって特定の js を決定していました。 (今考えると意味がありませんが、バックエンドとそれほど密接に連携しているわけではありませんが)

これで、HtmlWebpackPlugin (webpack によって生成され、バージョン番号付きの js が含まれる) を通じて入力された、変更された HTML になります。 )

これにより、シリアル時間 (プル バージョン番号ファイル) も節約されます。 同時に、グレースケールを実行することも便利です。たとえば、要件を公開する場合、最初に一部のユーザーに体験させてから、HTML を動的に入力してバックグラウンドに送信します。 (HTMLの修正はそう簡単ではありません)

CSSの分離

Guanmaiでは、react-gmによるクラス名の改善のおかげで、CSSの変更は非常に少なくなります。 変更点が少ないのでCSSを分離してExtractTextPluginを使ってCSSを分離するのも悪くありません。

分離後、jsのサイズが小さくなり、jsがブロックされなくなります。同時に、cssとjsを同時に引っ張ることができます。

common

rrreee

パッケージ化された共通コードを見ると、他のモジュールのIDとハッシュが共通に型付けされるため、その都度コモンズファイルが変わり、キャッシュするのが難しくなります。

2 つのファイル リストを指定するだけで、webpack がマニフェスト ファイルに ID とハッシュを設定することがわかります。このようにしてコモンをキャッシュできます。ちなみに公式サイトには紹介がなかったので、知っていたら教えてください。

rrreee

ローカル開発

エージェントについて話しましょう。 devServer.proxy 経由で利用可能です。エージェントを使用して外部ネットワークにアクセスしてバグをチェックすることもできます。これはすべてソースコードであるため、バグチェックは非常に高速です。

rrreee

パッケージ化の速度

DllPlugin

プロジェクトが大きくなると、必然的に多くのパッケージが必要となり、パッケージ化に非常に長い時間がかかります。 公式に推奨されているアプローチは、頻繁に変更されないファイルを DLL に作成することです。

私たちのプロジェクトは react react-dom prop-types classnames mobx mobx-react lodash moment big.js が届くまで待ちます。

オンライン情報では、dll のファイル名は [名前]_[ハッシュ].dll.js であると紹介されています。[npm バージョン]_dll.js npm バージョン を package.json バージョンから読み取ります。

なぜnpmバージョンではなくハッシュを使用しないのでしょうか?二次パッケージ化を検討しているときに問題が発生しました。DLL を再パッケージ化する必要があるかどうかを判断する方法は?ハッシュの場合はどうすればよいですか (解決策を推奨してください)。 npm バージョンを使用している場合、バージョンが変更されるとすぐに再パッケージ化されます。たとえば、react がアップグレードされた場合は、バージョン + を取得して再パッケージ化します。

happypack

happypack はビルドの速度を大幅に向上させ、複数のスレッドにパッケージ化することができ、キャッシュによりリビルドも高速化されます。

devtool

開発用の評価、本番用のソースマップ(許容範囲内で表示の問題、パッケージング速度の犠牲などのトラブルシューティングに使用されます)

babel-loader

cacheDirectoryを覚えてください


noParseとエイリアス

一部のライブラリ必須ではないため、noParse 構成は解析されず、エイリアスは x.min.js ファイルを指します。

木揺れ

はまだ使用されておらず、まだ適切な時期ではないように感じます。良い記事がありました。 Compression

UglifyJsPlugin 最初は、webpack.optimize.UglifyJsPlugin をベースにしていました。 uglify-js@2.x で。

🎜現在、webpack が別途登場しており、キャッシュのサポートやマルチコア圧縮など、さらに多くの機能を備えています。試してみましたが、非常に高速でした。 webpack.optimize.UglifyJsPlugin は実際には uglifyjs-webpack-plugin です。 🎜🎜私にとって不思議なのは、これが公式には uglify-es に基づいているということです。ただし、依存関係は依然として uglify-js だと思います。奇妙さ。 🎜🎜UglifyJsParallelPlugin🎜🎜正式リリース前はマルチコア対応の webpack-uglify-Parallel を使用していました。速度はuglifyjs-webpack-pluginとあまり変わりません。 🎜🎜記事を書くときにgithubを覗いてみたら7月に廃止されて公式サイトに統合されていました。 🎜🎜その他🎜🎜 babel の babel-minify-webpack-plugin は傍観してください。 🎜🎜スクリプト cdn🎜🎜一部の js (gm-fetch babel-polyfill) にはほとんど変更がありません。webpack でパッキングするのは少し無駄です。cdn 経由で取得して、スクリプト形式で HTML ドキュメントに組み込むことができます。 🎜🎜分析🎜🎜チャートと非常に直感的な分析があります。私はそのほうが好きです。 🎜webpack-monitor🎜🎜古いものは webpack-bundle-analyzer です🎜🎜関連する推奨事項: 🎜🎜🎜webpack を使用してフロントエンド プロジェクトを構築するための Web サンプル コード🎜🎜🎜🎜 webpack 構成方法の概要🎜🎜

node.jsのnpmとwebpackの設定方法を詳しく解説

以上がWebpack エクスペリエンスの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VUE3 入門チュートリアル: Webpack を使用したパッケージ化とビルド VUE3 入門チュートリアル: Webpack を使用したパッケージ化とビルド Jun 15, 2023 pm 06:17 PM

Vue は、インタラクティブで効率的な Web アプリケーションを迅速に構築するのに役立つ優れた JavaScript フレームワークです。 Vue3 は、多くの新機能が導入された Vue の最新バージョンです。 Webpack は現在最も人気のある JavaScript モジュール パッケージャーおよびビルド ツールの 1 つで、プロジェクト内のさまざまなリソースの管理に役立ちます。この記事では、Webpack を使用して Vue3 アプリケーションをパッケージ化してビルドする方法を紹介します。 1.Webpackをインストールする

Java API開発におけるWebサーバー処理にJetty7を使用する Java API開発におけるWebサーバー処理にJetty7を使用する Jun 18, 2023 am 10:42 AM

JavaAPI 開発における Web サーバー処理に Jetty7 を使用する インターネットの発展に伴い、Web サーバーはアプリケーション開発の中核部分となり、多くの企業でも注目を集めています。増大するビジネス ニーズを満たすために、多くの開発者が Web サーバー開発に Jetty の使用を選択しており、その柔軟性と拡張性は広く認識されています。この記事では、JavaAPI 開発における Jetty7 の使用方法を紹介します。

Golang を使用して Web アプリケーションのフォーム検証を実装する方法 Golang を使用して Web アプリケーションのフォーム検証を実装する方法 Jun 24, 2023 am 09:08 AM

フォーム検証は Web アプリケーション開発において非常に重要なリンクであり、フォーム データを送信する前にデータの有効性をチェックして、アプリケーションのセキュリティ脆弱性やデータ エラーを回避できます。 Web アプリケーションのフォーム検証は、Golang を使用すると簡単に実装できます。この記事では、Golang を使用して Web アプリケーションのフォーム検証を実装する方法を紹介します。 1. フォーム検証の基本要素 フォーム検証の実装方法を紹介する前に、フォーム検証の基本要素が何であるかを知る必要があります。フォーム要素: フォーム要素は

コックピット Web UI から管理アクセスを有効にする方法 コックピット Web UI から管理アクセスを有効にする方法 Mar 20, 2024 pm 06:56 PM

Cockpit は、Linux サーバー用の Web ベースのグラフィカル インターフェイスです。これは主に、初心者/熟練ユーザーにとって Linux サーバーの管理を容易にすることを目的としています。この記事では、Cockpit アクセス モードと、CockpitWebUI から Cockpit への管理アクセスを切り替える方法について説明します。コンテンツ トピック: コックピット エントリ モード 現在のコックピット アクセス モードの確認 CockpitWebUI からコックピットへの管理アクセスを有効にする CockpitWebUI からコックピットへの管理アクセスを無効にする まとめ コックピット エントリ モード コックピットには 2 つのアクセス モードがあります。 制限付きアクセス: これは、コックピット アクセス モードのデフォルトです。このアクセス モードでは、コックピットから Web ユーザーにアクセスできません。

ウェブ標準とは何ですか? ウェブ標準とは何ですか? Oct 18, 2023 pm 05:24 PM

Web 標準は、W3C およびその他の関連組織によって策定された一連の仕様とガイドラインです。HTML、CSS、JavaScript、DOM、Web アクセシビリティおよびパフォーマンスの最適化の標準化が含まれます。これらの標準に従うことで、ページの互換性を向上させることができます。 、メンテナンス性とパフォーマンス。 Web 標準の目標は、Web コンテンツをさまざまなプラットフォーム、ブラウザー、デバイス上で一貫して表示および操作できるようにして、より優れたユーザー エクスペリエンスと開発効率を提供することです。

PHP開発経験の共有: さまざまな機能の実装をマスターするための経験と提案 PHP開発経験の共有: さまざまな機能の実装をマスターするための経験と提案 Nov 22, 2023 pm 12:02 PM

インターネットが急速に発展している現在、PHP はサーバーサイドのスクリプト言語として、ますます多くの開発者に採用されています。 PHP には、学習が容易、柔軟性、オープンソース、無料であるという利点があり、さまざまな Web サイトや Web アプリケーションを迅速に開発できます。ただし、PHP 開発者として、熾烈な競争の中で抜きん出て、効率的で安定したコードを作成するには、さまざまな機能の実装スキルと経験を習得する必要もあります。まず第一に、プロジェクト アーキテクチャの合理的な計画が PHP アプリケーション開発の鍵となります。適切なプロジェクト構造により、コードの保守性が向上します。

ウェブってどういう意味ですか ウェブってどういう意味ですか Jan 09, 2024 pm 04:50 PM

Web は、ワールド ワイド ウェブとしても知られるグローバル ワイド エリア ネットワークであり、インターネットのアプリケーション形式です。 Web はハイパーテキストとハイパーメディアに基づいた情報システムであり、ユーザーはハイパーリンクを通じて異なる Web ページ間を移動することにより、情報を閲覧したり入手したりすることができます。 Web の基礎はインターネットであり、統一および標準化されたプロトコルと言語を使用して、異なるコンピューター間でのデータ交換と情報共有を可能にします。

PHP は Web 開発におけるフロントエンドですか、それともバックエンドですか? PHP は Web 開発におけるフロントエンドですか、それともバックエンドですか? Mar 24, 2024 pm 02:18 PM

PHP は Web 開発のバックエンドに属します。 PHP はサーバー側のスクリプト言語であり、主にサーバー側のロジックを処理し、動的な Web コンテンツを生成するために使用されます。フロントエンド テクノロジーと比較して、PHP はデータベースとの対話、ユーザー リクエストの処理、ページ コンテンツの生成などのバックエンド操作に多く使用されます。次に、特定のコード例を使用して、バックエンド開発における PHP のアプリケーションを説明します。まず、データベースに接続してデータをクエリするための簡単な PHP コード例を見てみましょう。

See all articles