范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

NodeV19问世?看看它带来了什么新变化?

  大家好,很高兴又见面了,我是"web 前端分享",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发! 1.理解Node发版规律1.1 什么Semver?
  Sem+ver, Sem是Semantic(语义的)之意,ver是Version(版本)之意。整体表示一种版本命名的方式,要体现一定的版本变更内容的含义。目前的Semver一般指由Semver.org组织制定的版本规范。其基本要求如下:版本号的基本形式为MAJOR.MINOR.PATCH 3部分组成,每个部分的含义如下:MAJOR: 软件的API改变MINOR: 修改或添加功能,但保持向后兼容(API未变)PATCH:补丁,主要是错误修复
  Semver的含义1.2 LTS(Long Term Support)与Current含义?
  关于Node.js的发布流程,有以下几个要点:每6个月发布一个主要版本(即Major版本),作为Current版本。注意:它可能是奇数版本也可能是偶数版本。但是,因为其是最新的,所以包含Node.js平台的最新特性4月发布偶数版本,10月发布奇数版本每12个月将一个版本转入LTS版本,LTS代表了一个被不断修正与改进的版本。LTS版本要经历两个阶段:活跃期(Active)与维护期(Maintenance)活跃期共18个月,即在不改变兼容性的情况下,周期性修改Bug并合并其他版本的重要修改(1)每个时刻Current版本只有一个,LTS版本可能有3个,LTS-Active版本可能有2个。在Node.js官网中给出的LTS版本总是处于LTS的最新版本
  (2)该版本处于活跃期(Ative)时,可以看到其MINOR版本在不断升级维护期共12个月,只负责修改本版本的Bug以及特别紧急问题的修复,如安全性问题
  下面是Node官网的最新信息,即最新Current版本V19.2.0、而LTS版本为V18.12.1版。
  Node 19最新版本发布2.Node v19+带来那些特性?2.1 HTTP(S)/1.1 KeepAlive 默认为 true
  Node.js v19 将 keepAlive 的默认值设置为 true,这意味着所有 HTTP(s) 连接将默认启动 HTTP/1.1的keepAlive,默认时间为 5S。 const http = require("node:http"); // http链接 console.log(http.globalAgent); const https = require("node:https"); // https链接 console.log(https.globalAgent);
  我们可以对比下 v16 和 v19 的节点服务器 Agent 配置差异,首先切换到 V16 版本: nvm  use  16 //now  using  node  v16.0.0  (npm  v7.10.0) node  server
  输入信息如下:  agent {    _events: [ Object:  null  prototype] {      free: [ function  (anonymous)],      newListener: [ Function:  maybeEnableKeylog]   },    _eventsCount:  2,    _maxListeners:  undefined,    defaultPort:  80,    protocol:  "http:",    options: [ Object:  null  prototype] {  path:  null },    requests: [ Object:  null  prototype] {},    sockets: [ Object:  null  prototype] {},    freeSockets: [ Object:  null  prototype] {},    keepAliveMsecs:  1000,    keepAlive:  false,    maxSockets:  Infinity,    maxFreeSockets:  256,    schedule:  "lifo",    maxTotalSockets:  Infinity,    totalSocketCount:  0,   [ Symbol(kCapture)] :  false }  agent {    _events: [ Object:  null  prototype] {      free: [ function  (anonymous)],      newListener: [ Function:  maybeEnableKeylog]   },    _eventsCount:  2,    _maxListeners:  undefined,    defaultPort:  443,    protocol:  "https:",    options: [ Object:  null  prototype] {  path:  null },    requests: [ Object:  null  prototype] {},    sockets: [ Object:  null  prototype] {},    freeSockets: [ Object:  null  prototype] {},    keepAliveMsecs:  1000,    keepAlive:  false,    maxSockets:  Infinity,    maxFreeSockets:  256,    schedule:  "lifo",    maxTotalSockets:  Infinity,    totalSocketCount:  0,    maxCachedSessions:  100,    _sessionCache: {  map: {},  list: [] },   [ Symbol(kCapture)] :  false }
  第 5、37 行,keepAlive 默认值设置为 false。接着请看下面的 V19 输出,首先切换到 19 版本: nvm  use  19 //now  using  node  v19.0.0  (npm  v8.19.2) node  server
  输出信息如下:  agent {    _events: [ Object:  null  prototype] {      free: [ function  (anonymous)],      newListener: [ Function:  maybeEnableKeylog]   },    _eventsCount:  2,    _maxListeners:  undefined,    defaultPort:  80,    protocol:  "http:",    options: [ Object:  null  prototype] {      keepAlive:  true,      schedule:  "lifo",      timeout:  5000,      noDelay:  true,      path:  null   },    requests: [ Object:  null  prototype] {},    sockets: [ Object:  null  prototype] {},    freeSockets: [ Object:  null  prototype] {},    keepAliveMsecs:  1000,    keepAlive:  true,    // 这里是true    maxSockets:  Infinity,    maxFreeSockets:  256,    schedule:  "lifo",    maxTotalSockets:  Infinity,    totalSocketCount:  0,   [ Symbol(kCapture)] :  false }  agent {    _events: [ Object:  null  prototype] {      free: [ function  (anonymous)],      newListener: [ Function:  maybeEnableKeylog]   },    _eventsCount:  2,    _maxListeners:  undefined,    defaultPort:  443,    protocol:  "https:",    options: [ Object:  null  prototype] {      keepAlive:  true,      schedule:  "lifo",      timeout:  5000,      noDelay:  true,      path:  null   },    requests: [ Object:  null  prototype] {},    sockets: [ Object:  null  prototype] {},    freeSockets: [ Object:  null  prototype] {},    keepAliveMsecs:  1000,    keepAlive:  true,    // 这里是true    maxSockets:  Infinity,    maxFreeSockets:  256,    schedule:  "lifo",    maxTotalSockets:  Infinity,    totalSocketCount:  0,    maxCachedSessions:  100,    _sessionCache: {  map: {},  list: [] },   [ Symbol(kCapture)] :  false }
  第 21、50将keepAlive设置为true,启用 keepAlive 可实现连接重用并提高网络吞吐量。此外,服务端会调用 close() 自动断开空闲客户端,内部依赖于 http(s).Server.close API 实现,这些修改将进一步优化 Node 体验和性能。这个改动有以下几个注意点: http.globalAgent 和 https.globalAgent 默认都使用 keep-alive Agent 代理会解析、应用从 server 处获取到的 Keep-Alive 头部(如果其值小于 Agent 的超时时间) http(s).Server.close 现在在内部调用 closeIdleConnections 方法 2.2 稳定的 WebCrypto API
  WebCrypto API 是使用密码学构建的系统接口,在 node.js v19(Ed25519、Ed448、X25519、X448 除外)中趋于稳定。可以通过调用 globalThis.crypto 或者 require("node:crypto").webcrypto 来访问,比如下面的代码; const { subtle } = globalThis.crypto; // 或者require("node:crypto").webcrypto (async function () {   const key = await subtle.generateKey(     {       name: "HMAC",       hash: "SHA-256",       length: 256,     },     true,     ["sign", "verify"]   );   console.log("key=", key);   const enc = new TextEncoder();   const message = enc.encode("I love cupcakes");   console.log("message=", message);   const digest = await subtle.sign(     {       name: "HMAC",     },     key,     message   );   console.log("digest=", digest); })();
  我们对上面的代码做一个简单的说明,一共包括三个步骤: 首先生成 HMAC 密钥,可同时用于验证消息数据的完整性和真实性; 然后,加密字符串"I love cupcakes" 最后创建消息摘要,这是一个加密哈希函数;
  执行如下命令: node server
  此时控制台显示 key、message、digest 等信息: // 执行命令 key = CryptoKey {   type:  "secret",   extractable: true,   algorithm: { name:  "HMAC", length:  256, hash: [Object] },   usages: [  "sign",  "verify" ] } message =  Uint8Array( 15)  [ 73, 32, 108, 111, 118, 101, 32, 99, 117, 112, 99, 97, 107, 101, 115] digest = ArrayBuffer {    [Uint8Contents]: < 30  01  7a  5c d9 e2  82  55  6b  55  90  4f  1d de  36 d7  89 dd fb fb  1a  9e a0 cc  5d d8  49  13  38  2f d1 bc>,   byteLength:  32 } 2.3 自定义 ESM 解析调整
  Node.js 已删除 --experimental-specifier-resolution 能力 ,其功能现在可通过自定义加载器使用(可以在文末参考文献链接中尝试)。 git  clone https://github.com/nodejs/loaders-test.git %  cd loaders-test/commonjs-extension-resolution-loader % yarn install
  例如 loaders-test/commonjs-extension-resolution-loader/test/basic-fixtures/index.js 文档: import { version } from "process"; import { valueInFile } from "./file"; import { valueInFolderIndex } from "./folder"; console.log(valueInFile); console.log(valueInFolderIndex);
  ./file 如果没有自定义加载器,则不会搜索文件的扩展名,比如./file.js 或者./file.mjs。而通过设置自定义加载器后,可以解决以上问题: import { isBuiltin } from "node:module"; import { dirname } from "node:path"; import { cwd } from "node:process"; import { fileURLToPath, pathToFileURL } from "node:url"; import { promisify } from "node:util";  import resolveCallback from "resolve/async.js";  const resolveAsync = promisify(resolveCallback);  const baseURL = pathToFileURL(cwd() + "/").href;  export async function resolve(specifier, context, next) {   const { parentURL = baseURL } = context;   if (isBuiltin(specifier)) {     return next(specifier, context);   }   // `resolveAsync` works with paths, not URLs   if (specifier.startsWith("file://")) {     specifier = fileURLToPath(specifier);   }   const parentPath = fileURLToPath(parentURL);   let url;   try {     const resolution = await resolveAsync(specifier, {       basedir: dirname(parentPath),       // For whatever reason, --experimental-specifier-resolution=node doesn"t search for .mjs extensions       // but it does search for index.mjs files within directories       extensions: [".js", ".json", ".node", ".mjs"],     });     url = pathToFileURL(resolution).href;   } catch (error) {     if (error.code === "MODULE_NOT_FOUND") {       // Match Node"s error code       error.code = "ERR_MODULE_NOT_FOUND";     }     throw error;   }   return next(url, context); }
  测试命令如下: % node  --loader=./loader.js test/basic-fixtures/index (node: 56149) ExperimentalWarning: Custom ESM Loaders  is an experimental feature. This feature could change  at  any  time (Use `node  --trace-warnings ...` to show where the warning was created) hello  from file.js
  此时程序不会再报错,能正常运行。 2.4. 移除对 DTrace/SystemTap/ETW 的支持
  在 Node.js v19 中,移除了对 DTrace/SystemTap/ETW 的支持,主要是因为资源优先级的问题。数据显示,很少有人使用 DTrace、SystemTap 或 ETW,因此维护它们没有多大意义(如果有问题,可以在文末提供的链接中提交 issue)。 2.5 升级 V8 JavaScript引擎到 V10.7
  Node.js v19 将 V8 JavaScript 引擎更新为 V8 10.7(这也是 Chromium 107 默认的 JavaScript 引擎),其中包括一个用于格式化敏感数字的新函数 Intl.NumberFormat。 Intl.NumberFormat(locales, options);
  对于不同的语言,传入不同的语言环境: const number = 123456.789; console.log(   new Intl.NumberFormat("de-DE", { style: "currency", currency: "EUR" }).format(     number   ) ); console.log(   new Intl.NumberFormat("ja-JP", { style: "currency", currency: "JPY" }).format(     number   ) ); console.log(   new Intl.NumberFormat("ar-SA", { style: "currency", currency: "EGP" }).format(     number   ) ); console.log(   new Intl.NumberFormat("zh-CN", { style: "currency", currency: "CNY" }).format(     number   ) ); Intl.NumberFormat v3 API 是一个新的 TC39 ECMA402 stage 3 提案,扩展了预先存在的 Intl.NumberFormat。
  除了对 NumberFormat 的扩展,Node V19 还包括了如下变更: Node.js 19 附带了 llhttp@8.1.0 Node.js 19 更新了 npm@8.19.2 2.6 尝试使用 Node watch
  当导入的文件发生更改时,以"watch"模式运行的程序会重新启动,此功能已经在 v19.0.0 和 v18.11.0+ 中可用。 // server.js const express = require("express"); const path = require("path"); const app = express(); app.use(express.static(path.join(__dirname, "../build"))); app.listen(8080, () =>   console.log("Express server is running on localhost:8080") );
  启动命令如下: node --watch  server
  输出内容如下: (node: 67643) ExperimentalWarning: Watch mode  is an experimental feature. This feature could change at any  time (Use `node --trace-warnings ...`  to show where the warning was created) Express  server  is running  on localhost: 8080
  Node.js 14 将于 2023 年 4 月结束更新维护,Node.js 16(LTS)预计将于 2023 年 9 月结束更新维护。建议大家开始计划按需升级到 Node.js 16 (LTS) 或 Node.js 18 (LTS),更多说明可以阅读文末资料。 参考资料
  https://github.com/nodejs/loaders-test
  https://github.com/nodejs/node/issues/44550
  https://nodejs.org/en/blog/announcements/v19-release-announce/#node-watch-experimental
  https://github.com/nodejs/node/pull/43522
  https://github.com/nodejs/node/pull/44859
  https://baijiahao.baidu.com/s?id=1626332802026818591&wfr=spider&for=pc

星帅尔压缩机零部件龙头稳健,新能源业务放量拓展第二增长曲线(报告出品方作者开源证券,吕明周嘉乐陆帅坤)1星帅尔压缩机零部件龙头基本盘稳健,新能源业务放量拓展第二增长曲线1。1围绕压缩机零部件扩充产品矩阵,光伏组件及储能业务迎来放量杭州星帅华为突然上架Mate30EPro麒麟芯片5G手机Mate系列鸿蒙系统从iPhone14系列推出之后,我身边就有不少朋友问我现在还能不能买到华为的5G手机,我想了想感觉确实很难,即使是可以正常地发布手机,也只能使用4G网络的骁龙芯片,就连余承东自己都闪电音频格式转换器收费吗?支持几十种格式相互转换!短视频的热度在近几年只增不减,市面上的视频音频剪辑工具也越来越多了,特别是关于音频的软件。音频的剪辑处理是现在大家在办公生活中都经常获使用的,特别是媒体工作者们,每天需要将制作好的大疆会是下一个华为吗?日本拆机曝光核心零部件大多为美供应商大家对大疆这个主打无人机摄影的品牌并不陌生吧。大疆曾上榜过美国的时代周刊的十大科技产品,并在2022年入选福布斯中国创新企业50强的行列中,从中可以看出大疆的创新实力是普通企业无法诸葛亮平定南蛮七擒七纵,为何武侯如此托大?主要是实力不允许各位小伙伴如果觉得作者的文章不错的话,可以点一个免费的赞和关注,你们的认可是我创作的动力!我们都知道诸葛亮平定南蛮面对孟获时可谓是反复拿捏,甚至创造了七擒七纵这一传奇的历史故事。俗中年人曾流行的围炉煮茶,被年轻人悄悄捡起来了(ICphoto图)随着秋冬的来临,在充满新中式文化的茶室或小院里,约上几个好友围坐在茶炉旁,一边煮茶一边烤上一些花生柿子栗子等小食,正成为当前年轻人最流行的一种社交和生活方式。围华夏幸福拿出千亿轻资产减债,债权人会买账吗?雷达财经出品文李亦辉编深海陷入债务漩涡的华夏幸福,披露了债务重组进展。12月14日,根据公告,公司将所持下属公司股权注资搭建幸福精选和幸福优选两个平台,以之作为偿债资源与公司债权人结束一年法律纠纷,谷歌俄勒冈州达尔斯市数据中心用水量将被公布12月15日,谷歌通过邮件证实其在俄勒冈州达尔斯市的数据中心用水记录将不再是商业机密。据香港IDC新天域互联了解,达尔斯市政府此前代表谷歌对本地报刊TheOregonianOreg12月16日最新早上好图片带字丨周五温馨的祝福丨朋友圈早安问候早安,新的一天,愿你们平安喜乐!岁月匆匆又一天,清晨祝福到身边,一次相识一生缘,永生记挂在心间,千言万语汇一句,安康快乐每一天。周五早上好!缘在天意,美在笑意,善在心意,情在诚意。19珍贵老照片60后70后的记忆,回不去的童年,你还记得他们吗?1。上世纪80年代的一名女歌手,她坐在钢琴前,可以说倾国倾城。她的坐姿优雅端庄,配上乌黑靓丽的秀发,有一种别样的气质和魅力2。上世纪80年代,香港娱乐圈5大美女的合影,右一是周慧敏法国美帕看见女性力量在时光中优雅前行法国有句谚语女人即使老去,也不会枯萎。女人天生带着一股骄傲感,能够坦然接受自己,无畏岁月。法国美帕大中华区总裁笛卡尔医疗公司董事长北京布朗兄弟科贸公司董事长王宇平认为,美可持续环境
避免Stadia关停变成废品谷歌为配套手柄加入蓝牙支持去年10月,谷歌宣布将关停Stadia云游戏项目,宣告又一科技大厂正式放弃云游戏。对于玩家来说,这除了让人担心自己的游戏和存档怎么办外,自己真金白银买下的Stadia手柄何去何从,Switch模拟器Ryujinx进度报告202212月Switch模拟器Ryujinx进度报告202212月新年快乐!我们希望你们都度过了一个真正令人难以置信的一年。2022年每个月都覆盖了如此多的领域,而12月并不打算打破这一趋势。过去两年最好的叙事游戏变得更好了叙事冒险猩红谷第四章上线,简直是嘟嘟囔囔年轻的主角,躺在汽车后面我很高兴地告诉大家,过去几年我最喜欢的游戏之一猩红谷继续以某种方式变得越来越好。第4集现已发布,是迄今为止规模最大最基辅街头寡妇游行,面带血泪怒目圆睁,泽连斯基躲着不敢露面一波未平一波又起,近日基辅街头突现寡妇游行队伍,质问乌克兰当局,泽连斯基头都大了。(基辅街头寡妇游行)俄军攻势太猛,乌军死伤一片央视新闻报道,俄国防部发布战报,称对乌克兰发起了新一秦始皇为何49岁意外去世?与他爱喝元水有关,元水究竟是什么秦王扫六合,虎视何雄哉!挥剑决浮云,诸侯尽西来。李白嬴政统治秦国时最大的功绩就是一统六国,结束了春秋战国诸侯争霸导致的国家分裂的状态,建立起了我国历史上第一个中央集权的统一的国家。从宋徽宗而来的思考说起宋徽宗,大家应该都不陌生,他发明的瘦金体,在书法界被很多人追捧,他的画作芙蓉锦鸡图,也是有着很高的成就。我们常说他是一个艺术皇上,后世也少有人说他的艺术成就很差,足以见得确实有王昭君之怨说起汉朝,我们都会谈及和亲政策与王昭君出塞。如果放在历史的长河中来考察,实施和亲政策,通过联姻,加强与匈奴等少数民族的联系,稳定边境,确实效果明显。自从王昭君出塞后,汉匈之间和平了49年上海解放,一国军少将偷偷对解放军代表说我1924年就入党了在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!前言我是中共地下党员,1924年就入党了。说出这句话的人,是国民党的少将军官,原西汉历史略谈之一中国历史就阴阳五行而论,汉唐时期主阳,以气为上,呈一派阳刚之气。而说到汉朝的历史,文景之治是一个绕不开的话题。秦朝终结了,汉初继承了秦朝的制度,最明显的特点不过于民生凋敝,于是,汉三国之中,与国始终的三大名将,魏蜀吴各有一人汉末三国几十年历史风云,波澜壮阔,名将辈出。而魏蜀吴各有一位名将,一生戎马,与国休戚,见证三国风云变幻,兴衰存亡。一郭淮(曹魏)郭淮字伯济,山西太原人。举孝廉,累官兵曹议令史,从征在历史上北宋一度被少数民族打到国都,甚至连皇帝都被俘虏受辱宋朝是一个承上启下的朝代,上承五代十国,下启元朝。宋朝一共分为北宋和南宋,在历史上北宋可谓是孱弱不堪,一度被少数民族打到国都,甚至连皇帝都被俘虏受辱。但是在北宋灭亡后,南宋最有作为