首页 文章 精选 留言 我的

精选列表

搜索[阿里云],共10000篇文章
优秀的个人博客,低调大师

包管理工具:pnpm | 京东云技术团队

作者:京东零售 杨秀竹 pnpm 是什么 pnpm( performant npm )指的是高性能的 npm,与 npm 和 yarn 一样是一款包管理工具,其根据自身独特的包管理方法解决了 npm、yarn 内部潜在的安全及性能问题,在多数情况下拥有更快速的安装速度、占用更小的存储空间,结合官网给出的性能测试及项目中的使用表现,其具有良好的应用前景。 pnpm 优势 更快的依赖安装速度 pnpm 通过特有的依赖管理方式,使其与其他包管理器相比具有更快的依赖安装速度,下图是官网给出的性能测试数据,在不同情况下安装、更新依赖包的速度性能表现,可以看出在多数情况下其耗时相比于其他包管理工具更短。 action cache lockfile node_modules npm pnpm Yarn Yarn PnP install 37.6s 17.3s 22.1s 20.2s install ✔ ✔ ✔ 2.1s 1.4s 695ms n/a install ✔ ✔ 8.8s 4.7s 8.8s 668ms install ✔ 13.1s 8s 22.8s 15.2s install ✔ 13.7s 14.7s 8.9s 670ms install ✔ ✔ 2.6s 4s 16s n/a install ✔ ✔ 2s 1.4s 681ms n/a install ✔ 2.5s 14.1s 16.6s n/a update n/a n/a n/a 8.3s 7.4s 8.7s 16.9s 更小的包管理空间 使用 pnpm 时,依赖会被存储在内容可寻址的同一存储空间,可以节省大量的磁盘空间。 1、如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库(store)。 例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。 2、所有文件都会存储在硬盘上的某一位置。 当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间这允许你跨项目地共享同一版本的依赖。 更高效安全的依赖管理方式 npm3 与 yarn 存在幽灵依赖(Phantom dependencies)以及 NPM分身(NPM doppelgangers )问题 pnpm 默认创建一个非平铺的 node_modules 及网状链接的包管理方式,因此代码无法访问任意包避免了幽灵依赖问题;又因为依赖始终都是存在 store 目录下,通过硬链接(hard links)进行寻址,一份相同的依赖始终只会被安装一次,因此可以避免 npm 分身问题。 幽灵依赖:某个包没有在 package.json 被依赖,但是用户却能够引用到这个包 npm包分身:在 npm3+ 和 yarn 中,由于存在 hoist 机制,可能大量的依赖被重复安装,导致 npm/yarn 的性能损失 独特的依赖管理方式( links + store) links pnpm 通过链接( links)与全局存储空间(store)管理的不同项目的 node_modules 依赖。硬链接(hard links)能指向磁盘上原始文件所在的同一位置(store),但是因为 pnpm 的 node_modules 是树形目录结构,且硬链接只能用于文件不能用于目录,因此需要通过软链接(symbolic link)来实现目录寻址,通过如下一张项目依赖关系图可以更好的理解 pnpm 是如何进行依赖寻址的。 store 例如,如果您的项目中多处都使用 foo 包并且它占用 1MB 的空间,那么看起来它在项目的 node_modules 文件夹中占用了与全局存储(.pnpm store)相同的 1MB 空间。 但是,该 1MB 是磁盘上两个不同位置的相同空间 , 所以 foo 总共占用 1MB,而不是 2MB。 pnpm 会使用名为 .pnpm-store 的存储路径来存储该磁盘项目下的所有 node_modules 依赖,通常是在项目的根目录下,Mac/linux 中默认会设置到 {home dir}>/.pnpm-store/v3;windows 下会设置到当前盘的根目录下,比如D盘(D/.pnpm-store/v3)。由于硬链接寻址的限制,pnpm 不可以跨多个驱动器或文件系统工作,即不同的系统磁盘目录都会存处一份依赖包。 项目应用 从 npm、yarn 进行迁移的过程 pnpm 的安装 有无安装 nodejs,pnpm 都提供了对应的安装方式,具体指令可参考官网,将npm对应的指令置换为 pnpm 即可。在安装 pnpm 时需要注意 nodejs 的兼容版本 npm install -g pnpm Node.js pnpm 5 pnpm 6 pnpm 7 pnpm 8 Node.js 12 ✔️ ✔️ ❌ ❌ Node.js 14 ✔️ ✔️ ✔️ ❌ Node.js 16 未知 ✔️ ✔️ ✔️ Node.js 18 未知 ✔️ ✔️ ✔️ lock文件迁移 通过 pnpm import 可以将npm、yarn的 lock 文件迁移生成 pnpm-lock.yaml 锁定依赖版本 总结 pnpm 通过软、硬链接(hark link、symbolic link) + 全局存储(store)结合的依赖管理方式完全实现了依赖树结构的包管理方式,解决了 npm3 及 yarn 中的幽灵依赖和 npm 分身的问题,提升了依赖包的安装速度,减小了磁盘空间占用。

优秀的个人博客,低调大师

精准测试之过程与实践 | 京东云技术团队

作者:京东工业 宛煜昕 一、怎样的技术 •百度百科: 精准测试是一套计算机测试辅助分析系统。 精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。 •其他定义 精准测试是中国自己有知识产权的完全的理论体系,它同时关注功能点和代码相关逻辑这样一个方法论,是一种灰盒的测试模式。 最开始在2014年的国际软件测试大会上发布精准测试的时候,它叫穿线测试,英文名字叫Threading Test,表达了精准测试的本质,Threading这个英文单词本身有两个含义,一个是穿线一个是线程,建立用例和代码的关系,相当于把黑盒和白盒关联起来,做黑盒测试也能看到白盒数据,同时把开发和测试能够关联起来,测试一做完,开发的逻辑马上就能自动生成。另一个层面,精准测试最本质就是线程测试,因为精准测试基于覆盖率白盒理论产生,它跟白盒最大的区别是它的覆盖率是线程级的,也就是说要追溯到用例这个级别。 二、技术发展 •历史发展 •成熟度模型的五级划分 三、知识与技能 这里介绍两款,分别为JAVA和C/C++相关, 第一,开发的基础和核心(编程)知识及所需要用到的版本管理工具(GIT)等。 第二,领域特定的知识、技术需要具备如下: JAVA:Javassist(官网- https://www.javassist.org/ ), ASM3.0(官网- https://asm.ow2.io/ ), JaCoCo(官网- https://www.eclemma.org/jacoco/)。 C/C++:汇编、反汇编,PE,逆向工程(IDA)。 要用C/C++实现,通用与效率等方面没得说,但各协议的插桩,代码信息的收集,复杂程度和工作量都不是一般人所能承受,要做好心里建设。 直接使用JaCoCo需要注意覆盖率的误差,一些语句行,分支层级,其误差会被指数级放大。其更适用于偏向辅助个人开发者和小型项目组对项目覆盖率进行非常基础的评估。 •误差产生的具体成因: 1.复杂系统通常由大量子模块组成,JaCoCo无法实现对于内部被调用的子模块进行插装,因此对于子模块覆盖率的评估会产生显著的误差。 2.如果某个子模块没有被调用,那么对于JaCoCo来说,该模块内的方法等同于不存在。JaCoCo需要调用该子模块,才能将该子模块内的代码计入覆盖率计算的“分母”。 3.除了几种既定的逻辑意外事件,JaCoCo无法正确处理例外情况(Exception),如果在控制流程中遇到Exception,JaCoCo会把这种情况直接标记为未覆盖,这种判定方式直接的影响到了对程序逻辑关系的把控,造成对于覆盖率无法准确评估。 •误差引发的后果: 1.伪瓶颈的产生,以及对测试质量的错误高估。第一种情况,测试人员投入大量工作之后,却无法进一步提升覆盖率,造成对资源和实践的浪费;第二种情况,会让用户误将未达标的系统判定为达标,有可能引发严重的生产事故。 2.无法实现缺陷定位,大量的算法和应用依托覆盖率的输入,而缺陷定位更是其中最主要的实践。 3.回归测试的精准度,受到了严重的影响。 •无损插桩技术(推荐) 精准测试推出的SABI和SASI是中国自己的技术 SABI,SouceCode Analyzer ByteCode Intrumentation,就是说源码分析,字节码查看,观测和分析是在源码,插桩是在字节码。 SASI,SouceCode Analyzer SouceCode Intrumentation,这是传统商用白盒最基础的技术,有时候对源码进行分析,直接在源码插装。源码插装以后,代码经过高级语言、高级编译器的编译,直接生成最后发布包。这种是完全无损的标准技术,插装代码经过编译器编译后执行可靠性更高。 四、总结与介绍 大纲 1、测试范围,代码分析 2、差异化 3、调用关系 4、度量与分析 5、质量评估 6、知识库兼优化 7、用例预分析 8、自动化测试与精准测试 五、平台 >设计思路 从产品的需求、功能模块,开发的代码到测试的用例,从正向到逆向的覆盖,追溯和可视。 >大纲 >调用链与代码覆盖 使用的是插桩,有点类似C++中的Hook技术,获取所需数据信息。 协议,HTTP,MySql,Dubbo,Redis等,需要先进行分析,找到关键插桩位置,然后结合使用设计模式进行收集(所需)信息。 设计模式推荐两个,1、反射+适配器,2、动态代理。 需要注意,代码膨胀问题。 >影响范围 假如有个应用系统开发出A版本提测,通过前端功能发起HTTP接口,平台的实时快照收到HTTP接口信息,将该次的接口相关信息(类、方法、执行代码行数)保存为系统快照; 当A版本开发后变为A_01版本,使用平台对两次版本(Jar包或War包)进行比对,通过系统快照中信息会分析出变更项与影响项,如:类、方法、接口。 根据影响用例中的菜单与接口,到接口测试工具中进行执行。 >实现与应用 通过数据进行可视化,显示服务/应用的启动,拓扑图,调用链,代码覆盖,版本比对等信息。 >>项目列表 添加,服务/应用 >>项目动态 启动,服务/应用 1、搜索 可显示多个服务/应用的拓扑关系图 1)详情视图 •表结构,可查看接口与数据库表间的关联 •热点,可查看接口与数据库表的关联个数 2)展开快照 这里显示的节点是保存到系统快照的。 •表结构-数据库表,远程服务-调用的rpc接口,源码-代码关系图层; •远程服务,显示远程调用接口,如dubbo接口; •源代码关系图谱,可查看代码关联关系和覆盖程度; •清除图谱,清除表结构、远程服务、源代码关系节点; •详情页,跳转到快照详情页; •概要,显示快照详情中图片; •删除节点,删除显示的节点; 3)搜索 •搜索数据库表中,表名,字段名,筛选条件; •搜索接口,HTTP接口; 2、监控台 通过HTTP接口实时获取到协议、代码相关信息,不同于通过单元测试得到代码覆盖率,然后将这些信息保存下来(我的快照和系统快照)。 1)实时监控 实时展示接口的调用链及链上各节点信息 2)我的快照 实时监控中可保存为我的快照, 2.1)调用链和链路分析的可视化 调用链即是服务与中间件的调用链拓扑图层;链路分析即是代码链路分析关系图谱。 •"流程图(拓扑图)"中可查看到覆盖后端及各中间件信息; •"堆栈列表"中展示服务与中间件的应用名,类型,服务/方法,用时等信息; •点击"</>"弹窗为代码图谱(代码链路分析关系图谱),点击某个节点,即显示某个方法的方法名称、执行到的代码行数、代码总数、代码覆盖率和圈复杂度信息, 根据某个尾节点,能寻到开始节点; 2.2)查看代码覆盖率报告 代码覆盖率信息列表,显示我的快照列表中所有覆盖率信息,类名、方法名、执行代码行数、方法行数、覆盖率、圈复杂度; 3、应用中心 1)在线应用 2)应用 2.1)系统快照 快照目录,点击链接进入系统快照详情页 系统快照详情页,基本信息页签 系统快照详情页,流程图页签 系统快照详情页,堆栈列表页签,点击</>打开代码关系图层(代码关系链) 2.2)版本比对 比对文件格式为Jar或War包,比对之后会产生记录报告 开始比对后的结果显示,能查看报告,显示差异项,(比对)日志输出(新增、修改、变更、删除的文件与方法,类与方法的影响数) 2.2.1)报告 比对成功后查看报告,显示变更项,影响用例,对比日志;点击影响用例链接,会跳转到(系统)快照详情页 参考 1、百度百科-精准测试, https://baike.baidu.com/item/精准测试/22355867 2、精准测试白皮书v3.0-2019最新版,作者:星云精准测试, https://wenku.baidu.com/view/fe7e99a401d276a20029bd64783e0912a2167c23.html 3、《不测的秘密-精准测试之路》,作者:TMQ精准测试实践团队。 4、网易严选的精准测试实践, https://www.infoq.cn/article/xuu91crqa4hcjz8uomjs

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册