作者 DBCdouble

项目源码demo:点击这里

一、前言

随着2018年2月15号webpack4.0.0出来已经有一段时间了,webpack依靠着“零配置”,“最高可提升98%的速度”成功吸粉无数,对于饱受项目打包时间过长的我,无疑是看到了曙光,于是决定开始试水。

二、项目框架与环境

升级前:
  • Node: v8.11.4
  • webpack: ^1.12.9
  • babel相关: ^6.x
  • react: ^0.14.8(第一次看到react版本的时候,我有点懵,再看一下是真的哈哈?,不禁赞叹最初架构这个项目的人一定是个react大佬,后续会更新文章升级到react16.x)
  • react-router: ^2.6.1(后续会更新文章升级到react-router4.x)
  • 相关loaders
  • 路由组件(页面): 130个(项目采用SPA应用,目前有130个路由页面,所以,如果在足够大的应用上能成功提升构建速度或减小文件大小,那么webpack4.0的版本更新才显得有意义)

升级后:

  • Node: v8.11.4
  • webpack: ^4.29.5
  • babel相关: ^7.x
  • react: ^0.14.8
  • react-router: ^2.6.1
  • 相关loaders(在后面会详细说明升级的loaders)
  • 路由组件(页面)数量不变

三、背景

随着项目的不断迭代,样式文件和js文件的数量越来越多,造成webpack的打包花费的时间越来越多,在开发环境下,经常需要频繁调试某一段代码ctrl+s会出现长时间等待的现象(等得好烦),日积月累,浪费了太多的时间在等待打包上。生产环境就更不用说了,平均时长100s~120s左右,通常情况情况下,输入npm run deploy打包之后,我会选择出去抽根烟。而如果情况是要解决线上的bug,则是分秒必争,所以优化打包时间势在必行

四、分析

webpack的构建流程

  • 初始化:启动构建,读取与合并配置参数,加载 Plugin,实例化 Compiler。
  • 编译:从 Entry 发出,针对每个 Module 串行调用对应的 Loader 去翻译文件内容,再找到该 Module 依赖的 Module,递归地进行编译处理。
  • 输出:对编译后的 Module 组合成 Chunk,把 Chunk 转换成文件,输出到本地。

打包分析

webpack2.x生产环境花费时间: 104.145s


webpack2.x开发环境花费时间: 68099ms


虽然能直观得看到webpack2打包所花费的时间,但我们并不知道webpack打包经过了哪些步骤,在哪个环节花费了大量时间。这里可以使用speed-measure-webpack-plugin来检测webpack打包过程中各个部分所花费的时间,在终端输入以下命令进行安装。

npm install speed-measure-webpack-plugin -D复制代码

安装完成之后,我们再webpack的配置文件中配置它

webpack.config.js



参考speed-measure-webpack-plugin的使用方式,查看这里

配置好之后,启动项目(这里只对开发环境进行分析了)后,如下图


从上图可以看出,webpack打包过程中绝大部分时间花在了loader上,也就是webpack构建流程的第二个环节,编译阶段。注意上面还能看到ProgressPlugin花费了28.87s,所以在我们不需要分析webpack打包流程花费的时间后,可在webpack.config.js中注释掉

五、安装和配置

1、webpack

先删除之前的webpack、webpack-cli、webpack-dev-server

npm uninstall webpack webpack-dev-server webpack-cli &&  npm uninstall webpacl-cli -g复制代码

安装最新版本的webpack、webpack-cli(webpack4把脚手架webpack-cli从webpack中抽离出来的,所以必须安装webpack-cli)、webpack-dev-server

npm install webpack webpack-dev-server webpack-cli -D复制代码

我这里顺便再把webpack的相关插件更新到最新版本,因为webpack做了很大的改动相对webpakc2,以防之前老版本的插件不兼容webpack4,所以我这边将项目中的webpack相关插件的模块都先删除掉,以便更新的时候分析错误

npm uninstall extract-text-webpack-plugin html-webpack-plugin webpack-dev-middleware webpack-hot-middleware复制代码

2、升级babel7

删除之前的babel相关模块

npm uninstall babel-core babel-loader babel-cli babel-eslint babel-plugin-react-transform babel-plugin-transform-runtime babel-preset-es2015 babel-preset-react babel-preset-stage-0 babel-runtime复制代码

安装babel7

npm install @babel/cli @babel/core babel-loader @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators @babel/plugin-proposal-export-default-from @babel/plugin-transform-runtime @babel/preset-env @babel/preset-react复制代码


.babelrc 文件为babel的配置文件(我这边是直接在webpack.config.js的babel-loader的options下配置的,.babelrc文件中注意需要转换为json格式,需要将属性名加双引号)


3、安装ESlint

在项目的根目录下,安装eslinteslint-loader

npm install eslint eslint-loader -D复制代码


.eslintrc是ESlint的配置文件,我们需要在项目的根目录下增加.eslintrc文件。

{"parser": "babel-eslint","env": {"browser": true,"es6": true,"node": true},"globals" : {"Action"       : false,"__DEV__"      : false,"__PROD__"     : false,"__DEBUG__"    : false,"__DEBUG_NEW_WINDOW__" : false,"__BASENAME__" : false},"parserOptions": {"ecmaVersion": 6,"sourceType": "module"},"extends": "airbnb","rules": {"semi": [0],"react/jsx-filename-extension": [0]}}
复制代码

webpack.config.js中,为需要检测的文件添加eslint-loader加载器。一般我们是在代码编译前进行检测。

webpack.config.js



注意,这里的isEslint是通过npm scripts传的参数eslint来判断当前环境是否需要进行代码格式检查,以便开发者有更多选择,并且eslint-loader必须配置在babel-loader之前,所以这里用unshift来添加eslint-loader

packack.json

在package.json文件中添加如下命令

{"scripts": {"eslint": "eslint --ext .js --ext .jsx src/"}
}复制代码

到这里,就可以通过执行 npm run eslint来检测src文件下的代码格式了

4、安装打包需要插件

npm install webpack-merge yargs-parser clean-webpack-plugin progress-bar-webpack-plugin webpack-build-notifier html-webpack-plugin mini-css-extract-plugin add-asset-html-webpack-plugin uglifyjs-webpack-plugin optimize-css-assets-webpack-plugin friendly-errors-webpack-plugin happypack复制代码

5、webpack相关文件配置

以下文件直接在你的项目copy就能使用

webpack.config.js

const path = require('path')
const webpack = require('webpack')
const os = require('os')
const merge = require('webpack-merge')
const argv = require('yargs-parser')(process.argv.slice(2))
const mode = argv.mode || 'development'
const interface = argv.interface || 'development'
const isEslint = !!argv.eslint 
const isDev = mode === 'development'
const mergeConfig = require(`./config/webpack.${mode}.js`)
const CleanWebpackPlugin = require('clean-webpack-plugin')
const ProgressBarPlugin = require('progress-bar-webpack-plugin')
const SpeedMeasurePlugin = require("speed-measure-webpack-plugin")
const WebpackBuildNotifierPlugin = require('webpack-build-notifier')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
const FirendlyErrorePlugin = require('friendly-errors-webpack-plugin')
const HappyPack = require('happypack')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
const smp = new SpeedMeasurePlugin()
const loading = {  html:"加载中..."}
const apiConfig = {development: 'http://xxxxx/a',production: 'http://xxx/b'
}
let commonConfig = {module: {rules: [{test: /\.js$/,loaders: ['happypack/loader?id=babel'],include: path.resolve(__dirname, 'src'),exclude: /node_modules/},{test: /\.css$/,loaders: [MiniCssExtractPlugin.loader,'css-loader']},{test: /\.less$/,loaders: [isDev ? 'style-loader' : MiniCssExtractPlugin.loader,'css-loader',{loader:'less-loader?sourceMap=true',options:{javascriptEnabled: true},}// include: path.resolve(__dirname, 'src')]},{test: /\.(png|svg|jpg|gif)$/,use: ['url-loader']},{test: /\.(woff|woff2|eot|ttf|otf|ico)$/,use: ['file-loader']},{test: /\.(csv|tsv)$/,use: ['csv-loader']},{test: /\.xml$/,use: ['xml-loader']},{test: /\.md$/,use: ["html-loader","markdown-loader"]}]},//解析  resolve: {extensions: ['.js', '.jsx'], // 自动解析确定的扩展},plugins: [new HappyPack({id: 'babel',loaders: [{loader: 'babel-loader',options: {cacheDirectory: true,presets: ['@babel/preset-env', '@babel/preset-react'],plugins: [['@babel/plugin-proposal-decorators', { "legacy": true }],'@babel/plugin-proposal-class-properties','@babel/plugin-proposal-export-default-from','@babel/plugin-transform-runtime',// 'react-hot-loader/babel',// 'dynamic-import-webpack',['import',{libraryName:'antd',libraryDirectory: 'es',style:true}]]}}],//共享进程池threadPool: happyThreadPool,//允许 HappyPack 输出日志verbose: true,}),new CleanWebpackPlugin(['dist']),new ProgressBarPlugin(),new WebpackBuildNotifierPlugin({title: "xxx后台管理系统?",logo: path.resolve(__dirname, "src/static/favicon.ico"),suppressSuccess: true}),new webpack.DefinePlugin({'process.env'  : {'NODE_ENV' : JSON.stringify(mode)},'NODE_ENV'     : JSON.stringify(mode),'baseUrl': JSON.stringify(apiConfig[interface]),'__DEV__'      : mode === 'development','__PROD__'     : mode === 'production','__TEST__'     : mode === 'test','__DEBUG__'    : mode === 'development' && !argv.no_debug,'__DEBUG_NEW_WINDOW__' : !!argv.nw,'__BASENAME__' : JSON.stringify(process.env.BASENAME || '')}),new FirendlyErrorePlugin(),new HtmlWebpackPlugin({template: path.resolve(__dirname, 'public/index.html'),favicon: path.resolve(__dirname, 'public/favicon.ico'),filename: 'index.html',loading}),new MiniCssExtractPlugin({filename: isDev ? 'styles/[name].[hash:4].css' : 'styles/[name].[hash:8].css',chunkFilename:isDev ? 'styles/[name].[hash:4].css' : 'styles/[name].[hash:8].css'}),// 告诉 Webpack 使用了哪些动态链接库new webpack.DllReferencePlugin({// 描述 vendor 动态链接库的文件内容manifest: require('./public/vendor/vendor.manifest.json')}),// 该插件将把给定的 JS 或 CSS 文件添加到 webpack 配置的文件中,并将其放入资源列表 html webpack插件注入到生成的 html 中。new AddAssetHtmlPlugin([{// 要添加到编译中的文件的绝对路径,以及生成的HTML文件。支持 globby 字符串filepath: require.resolve(path.resolve(__dirname, 'public/vendor/vendor.dll.js')),// 文件输出目录outputPath: 'vendor',// 脚本或链接标记的公共路径publicPath: 'vendor'}]),new webpack.HotModuleReplacementPlugin()],devServer: {host: 'localhost',port: 8080,historyApiFallback: true,overlay: {//当出现编译器错误或警告时,就在网页上显示一层黑色的背景层和错误信息errors: true},inline: true,open: true,hot: true},performance: {// false | "error" | "warning" // 不显示性能提示 | 以错误形式提示 | 以警告...hints: false,    // 开发环境设置较大防止警告// 根据入口起点的最大体积,控制webpack何时生成性能提示,整数类型,以字节为单位maxEntrypointSize: 50000000,// 最大单个资源体积,默认250000 (bytes)maxAssetSize: 30000000}
}
if (isEslint) {commonConfig.module.rules.unshift[{//前置(在执行编译之前去执行eslint-loader检查代码规范,有报错就不执行编译)enforce: 'pre',test: /.(js|jsx)$/,loaders: ['eslint-loader'],exclude: /node_modules/}]
}
module.exports = merge(commonConfig, mergeConfig)复制代码

注意:这里在最后导出配置的时候并没有使用speed-measure-webpack-plugin,因为会报错,不知道是不是因为跟happypack不兼容的原因。interface用来判断当前打包js网络请求的地址,isEslint判断是否需要执行代码检测,isDev用来判断当前执行环境是development还是production,具体问题看代码


webpack.config.dll.js

const path = require('path');
const webpack = require('webpack');
const CleanWebpaclPlugin = require('clean-webpack-plugin');
const FirendlyErrorePlugin = require('friendly-errors-webpack-plugin');
module.exports = {mode: 'production',entry: {// 将 lodash 模块作为入口编译成动态链接库vendor: ['react', 'react-dom', 'react-router', 'react-redux', 'react-router-redux']},output: {// 指定生成文件所在目录// 由于每次打包生产环境时会清空 dist 文件夹,因此这里我将它们存放在了 public 文件夹下path: path.resolve(__dirname, 'public/vendor'),// 指定文件名filename: '[name].dll.js',// 存放动态链接库的全局变量名称,例如对应 vendor 来说就是 vendor_dll_lib        // 这个名称需要与 DllPlugin 插件中的 name 属性值对应起来// 之所以在前面 _dll_lib 是为了防止全局变量冲突library: '[name]_dll_lib'},plugins: [new CleanWebpaclPlugin(['vendor'], {root: path.resolve(__dirname, 'public')}),new FirendlyErrorePlugin(),                // 接入 DllPluginnew webpack.DllPlugin({// 描述动态链接库的 manifest.json 文件输出时的文件名称// 由于每次打包生产环境时会清空 dist 文件夹,因此这里我将它们存放在了 public 文件夹下path: path.join(__dirname, 'public', 'vendor', '[name].manifest.json'),// 动态链接库的全局变量名称,需要和 output.library 中保持一致// 该字段的值也就是输出的 manifest.json 文件 中 name 字段的值// 例如 vendor.manifest.json 中就有 "name": "vendor_dll_lib"            name: '[name]_dll_lib'})],performance: {// false | "error" | "warning" // 不显示性能提示 | 以错误形式提示 | 以警告...hints: "warning",        // 开发环境设置较大防止警告// 根据入口起点的最大体积,控制webpack何时生成性能提示,整数类型,以字节为单位maxEntrypointSize: 5000000,         // 最大单个资源体积,默认250000 (bytes)maxAssetSize: 3000000}}复制代码

config/webpack.development.js

module.exports = {mode: 'development',//devtool: 'cheap-module-source-map',devtool: 'eval',output: {filename: 'scripts/[name].bundle.[hash:4].js'}
}复制代码

在开发环境下,我们不做js压缩和css压缩,来提高开发环境下调试保存页面打包的速度


config/webpack.production.js

const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); //开启多核压缩
const OptmizeCssAssetsWebpackPlugin = require('optimize-css-assets-webpack-plugin')
const os = require('os');
module.exports = {mode: 'production',devtool: 'hidden-source-map',output: {filename: 'scripts/[name].bundle.[hash:8].js'},optimization: {splitChunks: {chunks: 'all',   // initial、async和allminSize: 30000,   // 形成一个新代码块最小的体积maxAsyncRequests: 5,   // 按需加载时候最大的并行请求数maxInitialRequests: 3,   // 最大初始化请求数automaticNameDelimiter: '~',   // 打包分割符name: true,cacheGroups: {vendors: { // 项目基本框架等chunks: 'all',test: /antd/,priority: 100,name: 'vendors',}}},minimizer: [new UglifyJsPlugin({parallel: os.cpus().length,cache:true,sourceMap:true,uglifyOptions: {compress: {// 在UglifyJs删除没有用到的代码时不输出警告warnings: false,// 删除所有的 `console` 语句,可以兼容ie浏览器drop_console: true,// 内嵌定义了但是只用到一次的变量collapse_vars: true,// 提取出出现多次但是没有定义成变量去引用的静态值reduce_vars: true,},output: {// 最紧凑的输出beautify: false,// 删除所有的注释comments: false,}}}),new OptmizeCssAssetsWebpackPlugin({assetNameRegExp: /\.css$/g,cssProcessor: require('cssnano'),cssProcessorOptions: {safe: true,discardComments: {removeAll: true}}})],}}复制代码

在生产环境的配置中,做了js的压缩和css压缩,还有从打包的入口文件中使用splitChunks分离出来了antd来减小bundle.js的大小


public/index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title></head><body></body>
</html>复制代码

package.json



六、打包应用

1、执行 npm run dll 生成public/vendor(之后打包不再需要执行此命令,除非vendor中的包版本有变更)


2、执行 npm run start:dev  本地自动开启webpack-dev-server


3、执行 npm run deploy 打包生产环境


4、打包时长比对分析


后期使用异步加载组件的方式进一步优化


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 前端发展史

    前段发展历史 我们都知道现在流行的框架:Vue.Js、AngularJs、ReactJs,已经逐渐应用到各个项目和实际应用中,它们都是MVVM数据驱动框架系列的一种。 在了解MVVM之前,我们先回顾一下前端发展的历史阶段,做到心中有数,才会更好理解。 从静态走向动态 ​ 1994年可以看做…...

    2024/4/15 3:51:23
  2. [书籍精读]《你不知道的JavaScript(下卷)》精读笔记分享

    写在前面书籍介绍:JavaScript这门语言简单易用,很容易上手,但其语言机制复杂微妙,即使是经验丰富的JavaScript开发人员,如果没有认真学习的话也无法真正理解。本套书直面当前JavaScript开发人员不求甚解的大趋势,深入理解语言内部的机制,全面介绍了JavaScript中常被人误…...

    2024/4/27 18:16:57
  3. Odi中不费吹灰之力的线程

    介绍 多线程是同时执行两个或多个线程的过程。 大多数编程语言都提供了API,以方便使用线程和并行性。 开发人员可以专注于应用程序逻辑,而不是通信通道,同步或体系结构设置。 节点10.5添加了对 具有实验性标志的worker_threads模块。 但是从节点11.7开始,此功能是开箱即…...

    2024/4/15 3:51:22
  4. 前端学习资料

    常用工具:css在线手册jquery 1.8在线手册正则表达式语法css sprite图像拼接技编辑器推荐:Editplus,notepad++。截图截图工具:faststone capture服务器工具:xampp逻辑图工具:xmindsvn客户端工具推荐:TortoiseSVN http://tortoisesvn.net/downloads.html上传工具推荐:Wi…...

    2024/4/15 3:51:20
  5. 透视前端工程化之二:Webpack 基本介绍

    1 Webpack 的特点图片来源于网络 Webpack 是一款强大的打包工具。在 Webpack 中一切皆模块。Webpack 官网的 Banner 图完美地诠释了这一理念。Webpack 从一个入口文件开始递归地分析模块的依赖关系,根据依赖关系将这些模块打包成一个或多个文件。 目前几乎所有的前端构建和开发…...

    2024/4/15 3:51:19
  6. webpack4.0从零开始单页(多页)应用配置 (一)

    理解webpack核心概念借用官网的话:“webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。…...

    2024/4/15 3:51:18
  7. 创建React+MVC+开箱即用的工程化前端框架的思考-为什么创建@symph/joy

    项目首页:https://lnlfps.github.io/symph-joy 我们希望有一个结合了next.js和dva优点的基础框架,它们都是目前非常流行的前端框架,next.js为我们解决了服务端渲染和零配置的问题,而dva能够更好的管理应用中的业务流程和数据,但两者现有结合的方案里,我们遇到了些问题,并…...

    2024/4/24 13:36:20
  8. 开发中遇到的问题及基础知识点

    js对节点的操作,添加,删除,获得父节点,子节点,兄弟节点 [javascript] 1.<pre name="code" class="javascript">var chils= s.childNodes; //得到s的全部子节点 2.var par=s.parentNode; //得到s的父节点 3.var ns=s.nextSbiling; //获得…...

    2024/4/24 13:36:26
  9. JavaScript中的数据结构和算法学习

    原文链接:http://caibaojian.com/learn-javascript.html本文主要讲述Javascript中实现栈、队列、链表、集合、字典、散列表、树、图等数据结构,以及各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、顺序搜索、二分搜索,最后还介绍了动态规划和贪…...

    2024/4/24 13:36:18
  10. 12个值得关注的顶级可视化JS库 涉及图表、动画、时间处理,表格操作

    本文是译文,原文是https://da-14.com/blog/top-11...我在原文的基础上加了百度的Echats图表库,这个也是毫不逊色其他图表库的。另外Handsontable电子表格库也是蛮好玩的。 前端开发工具在过去几年中取得了进步和成功。这些日子,JS库和框架可以简化工作流程,提高开发过程,并…...

    2024/4/24 13:36:17
  11. webpack 笔记整理~~

    文章目录webpack核心功能、大型项目开发流程如何在浏览器端实现模块化课程简介浏览器端的模块化根本原因解决办法常见的构建工具webpack的安装和使用webpack简介webpack的安装使用(打包)模块化兼容性同模块化标准不同模块化标准最佳实践编译结果分析配置文件devtool 配置source…...

    2024/4/24 13:36:18
  12. 看云电子书归档 2016.4

    (译) JSON-RPC 2.0 规范(中文版)Gitee 下载 Github 下载 SourceForge 下载00后:移动互联网崛起新势力Gitee 下载 Github 下载 SourceForge 下载12条专业的JavaScript规则Gitee 下载 Github 下载 SourceForge 下载2014互联网女皇报告:去适应用户的习惯是明智之举Gitee 下载 Gi…...

    2024/4/24 13:36:15
  13. 从零搭建webpack+react+router+redux项目踩坑之旅

    使用 webpack 从零搭建 react项目的git地址:https://github.com/YueJingGe/webpack-react/tree/master初始化 npm yarn init 安装 webpack yarn add webpack -D 安装 webpack-cli yarn add webpack-cli -D 如果你使用 webpack v4+ 版本,你还需要安装 CLI。 此工具用于在命令行…...

    2024/4/24 13:36:14
  14. MEAN框架学习笔记

    MEAN框架学习笔记 MEAN开发框架的资料很少,主要的资料还是来自于learn.mean.io网站上的介绍。于是抱着一种零基础学习的心态,在了解的过程中,通过翻译加上理解将MEAN框架一点点消化并且吸收,一步一步来,慢慢地记录我学习MEAN的点点滴滴。1、MEAN是能够管理用户的 通过MEAN…...

    2024/4/24 13:36:13
  15. 从零搭建react 脚手架

    前言 目前前端最主流,应用最广的webpack总结下 目前常用的构建工具facebook官方的create-react-app(官方推荐) create-react-app但是现在大部分公司都需要自己能搞定脚手架,所以大家还是能自己搭建为好 (二)webpack基本概念入口(entry) 输出(output) loader 插件(plugins…...

    2024/4/24 13:36:13
  16. 翻译连载 | JavaScript 轻量级函数式编程-第5章:减少副作用 |《你不知道的JS》姊妹篇...

    原文地址:Functional-Light-JS原文作者:Kyle Simpson-《You-Dont-Know-JS》作者关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTML 最坚实的梁柱;分享,是 CSS 里最闪耀的一瞥;总结,是 JavaScript 中最严谨的逻辑。经过捶打磨练,成就了本书的中文版。本书包含…...

    2024/4/24 13:36:11
  17. echart初级入门教程

    ECharts是由百度团队开发的,可高度个性化定制的数据可视化图表库。一个纯javascript的图表库。兼容(IE8/9/10/11,Chrome,Firefox,Safari等)主流浏览器,可以运行在PC和移动设备上。 一、echart的安装使用。 1、获取echarts 1.1、最直接的方法是在 ECharts 的官方网站中挑…...

    2024/4/24 13:36:10
  18. 《javascript高级程序设计》 复习笔记

    第一章 JavaScript简介 文档对象模型(DOM) ,提供访问和操作网页内容的方法和接口 浏览器对象模型(BOM), 提供与浏览器交互的方法和窗口,windows对象 :弹出浏览器,缩放浏览器,提供分辨率,提供cookies支持 第二章 JavaScript运用在html中 XHTML中tag可以不用封口,但是html…...

    2024/4/24 13:36:09
  19. 第10章 DOM

    (DOM(文档对象模型)是针对HTML和XML文档的一个API(应用程序编程接口)。 DOM描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分。 1998年10月DOM1级规范成为W3C的推荐标准,为基本的文档结构及查询提供了接口。IE中的所有DOM对象都是以COM对象的形式实…...

    2024/4/15 3:51:35
  20. Spring Security和Angular教程

    Spring Security和Angular教程(一)安全的单页应用程序在本教程中,我们展示了Spring Security,Spring Boot和Angular的一些很好的功能,它们协同工作以提供愉快和安全的用户体验。Spring和Angular的初学者应该可以访问它,但是也有很多细节可供专家使用。这实际上是Spring S…...

    2024/4/19 0:06:20

最新文章

  1. CentOS系统如何设置系统默认语言以及命令行输出的语言为英文? locale

    要点 locale是地区相关&#xff1a;The locale command displays information about the current locale, or all locales, on standard output.通过全局变量进行配置&#xff0c;后台应该有程序读取环境变脸后进行输出确认。全局变量包括LANG和LC_ALL系统启动后首先初次读取/…...

    2024/5/2 8:31:08
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二

    ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim&#xff0c;生成一个 turtle &#xff0c;设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...

    2024/5/1 8:48:46
  4. 手机无线投屏到windows11电脑

    1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息...

    2024/5/1 13:21:41
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57