本文介绍: 由于每次构建项目npm需要远程仓库拉取npm依赖项目构建的其他过程耗时在1~2秒内,但是依赖拉取过程耗时通常在十几秒几十秒不等,所以对于npm依赖拉取优化成为项目构建时间优化的重中之重。本文通过docker镜像npm缓存技术解决以上问题我们先来了解一下npm缓存原理。……

基于Docker项目构建速度优化策略(Npm构建版)

原理介绍

项目目的

由于每次构建项目npm需要远程仓库拉取npm依赖,项目构建的其他过程耗时几十秒左右,但是依赖拉取过程耗时通常在几十秒到几分钟不等,所以对于npm依赖拉取优化成为项目构建时间优化的重中之重。(以上均为中小型微服务项目测试数据

本文通过docker镜像npm缓存技术来解决以上问题我们先来了解一下npm缓存原理

NPM缓存原理

在这里插入图片描述

优化原理

有了npm缓存技术,我们需要构建一个带有缓存docker镜像文件即可极大的减少项目构建时间

操作理论流程如下

  1. 准备所有项目的所有依赖文件放进同一个package.json
  2. 准备Dockerfile文件内容如下
From 原始镜像

WORKDIR /usr/src/app

COPY ./package.json ./

RUN npm install
#删除构建后的文件,只保留缓存即可这里需要原始镜像work
RUN rm -rf *
  1. 构建镜像
docker build -t base_image .
  1. 修改其他项目的Dockerfile中的源镜像为本镜像
#只需替换一行即可
From base_image

构建流程(需要基础docker知识

制作基础系统镜像

1. 准备工作

准备一个目录里面放入如下文件一个缓存package.json文件一个Dockerfile文件

Dockerfile文件内容如下

FROM xxx原始镜像

WORKDIR /usr/src/app

COPY ./package.json ./

RUN npm install

RUN rm -rf *
2. 制作基础系统镜像
docker build -f ./Dockerfile -t base_image .
3. 修改其他项目dockerfile文件进行测试
#只需替换相应Dockerfile文件的这一行即可
FROM base_image
4.上传基础系统镜像到镜像仓库
#标记镜像
docker &lt;tag&gt; &lt;TagName&gt;:<Version> <PersonalServerIP>:<Port(default 5000)>/<ImageName>:<Version>

#上传标记的镜像
docker push <PersonalServerIP>:<Port(default 5000)>/<ImageName>:<Version>

注意仓库地址没有协议部分docker 默认安全策略需要仓库支持 https 的,如果服务器只能使用 http 传输,那么直接上传失败,需要在 docker 客户端配置文件中进行声明

5. 修改其他项目dockerfile文件
#只需替换相应Dockerfile文件的这一行即可
FROM base_image

可能存在问题

构建速度明显变慢缓存是否过期

目前并无资料证明服务器检查缓存过期采用何种技术,ETag是否是hash

通常,ETag 值是内容哈希、上次修改时间戳的哈希或只是一个修订版号。例如,Wiki 引擎可以使用文档文章内容十六进制哈希"675af34563dc-tr34"``ETag

如果日后发现存在缓存过期现象(构建明显变慢)可以在所有项目的npm install命令添加prefer-offline 参数强制优先使用缓存(版本不同的包依然会走网络)。

用户可以指定缓存使用的策略

prefer-offline: 将使npm跳过任何条件请求(304检查)直接使用缓存数据,只有在缓存无法匹配到的时候,才去访问网络。这样我们将依赖包添加到项目的过程就会快很多

例如npm install expressprefer-offline将现在缓存中匹配express,只有在本地缓存没有匹配到的情况下,才去联网下载

prefer-online: 与它将强制npm重新验证缓存的数据(使用304检查),并使用重新验证的新鲜数据刷新缓存。

offline 将强制npm使用缓存或退出。如果尝试安装的任何内容尚未在缓存中,则它将出现代码错误
————————————————
版权声明:本文为CSDN博主「照物华」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明
原文链接https://blog.csdn.net/daihaoxin/article/details/105749014

原文地址:https://blog.csdn.net/qq_21654281/article/details/126404570

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49416.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注