├── README.md ├── benchmarks └── community-benchmark │ └── run.sh └── meetings ├── 2022-11-14.md ├── 2022-11-28.md ├── 2023-01-09.md ├── 2023-01-23.md ├── 2023-02-06.md ├── 2023-02-20.md ├── 2023-04-03.md ├── 2023-04-17.md ├── 2023-05-01.md ├── 2023-05-15.md ├── 2023-05-29.md ├── 2023-06-12.md ├── 2023-06-26.md ├── 2023-07-10.md └── 2023-10-16.md /README.md: -------------------------------------------------------------------------------- 1 | [![OpenJS Slack Invite](https://img.shields.io/badge/join%20slack%20on-nodejs--core--performance-green.svg)](https://slack-invite.openjsf.org/) 2 | 3 | ## Performance Team 4 | 5 | The Node.js Performance Team is a place to propose and discuss initiatives 6 | around improving the performance of Node.js internals. 7 | 8 | For the current list of team members, see the project 9 | [README.md](./README.md#current-project-team-members). 10 | 11 | ## Current Project Team Members 12 | 13 | 14 | 15 | * [@anonrig](https://github.com/anonrig) - Yagiz Nizipli 16 | * [@apapirovski](https://github.com/apapirovski) - Anatoli Papirovski 17 | * [@benjamingr](https://github.com/benjamingr) - Benjamin Gruenbaum 18 | * [@bmeurer](https://github.com/bmeurer) - Benedikt Meurer 19 | * [@BridgeAR](https://github.com/BridgeAR) - Ruben Bridgewater 20 | * [@CanadaHonk](https://github.com/CanadaHonk) - CanadaHonk 21 | * [@ErickWendel](https://github.com/ErickWendel) - Erick Wendel 22 | * [@Ethan-Arrowood](https://github.com/Ethan-Arrowood) - Ethan Arrowood 23 | * [@F3n67u](https://github.com/F3n67u) - Feng Yu 24 | * [@fhinkel](https://github.com/fhinkel) - F. Hinkelmann 25 | * [@gareth-ellis](https://github.com/gareth-ellis) - Gareth Ellis 26 | * [@gibfahn](https://github.com/gibfahn) - Gibson Fahnestock 27 | * [@H4ad](https://github.com/H4ad) - Vinícius Lourenço 28 | * [@joyeecheung](https://github.com/joyeecheung) - Joyee Cheung 29 | * [@mcollina](https://github.com/mcollina) - Matteo Collina 30 | * [@qard](https://github.com/qard) - Stephen Belanger 31 | * [@RafaelGSS](https://github.com/RafaelGSS) - Rafael Gonzaga 32 | * [@rluvaton](https://github.com/rluvaton) - Raz Luvaton 33 | * [@santigimeno](https://github.com/santigimeno) - Santiago Gimeno 34 | * [@sheplu](https://github.com/sheplu) - Jean Burellier 35 | * [@sxa](https://github.com/sxa) - Stewart X Addison 36 | * [@TimothyGu](https://github.com/TimothyGu) - Timothy Gu 37 | * [@tniessen](https://github.com/tniessen) - Tobias Nießen 38 | * [@trevnorris](https://github.com/trevnorris) - Trevor Norris 39 | * [@UlisesGascon](https://github.com/UlisesGascon) - Ulises Gascón 40 | * [@uzlopak](https://github.com/uzlopak) - Aras Abbasi 41 | 42 | 43 | 44 | ## Collaborators 45 | 46 | The Performance Team GitHub repository is 47 | maintained by the team and additional Collaborators who are added by the 48 | team on an ongoing basis. 49 | 50 | Individuals making significant and valuable contributions are made 51 | Collaborators and given commit-access to the project. These 52 | individuals are identified by the team and their addition as 53 | Collaborators is discussed during the weekly meeting. 54 | 55 | _Note:_ If you make a significant contribution and are not considered 56 | for commit-access log an issue or contact a team member directly and it 57 | will be brought up in the next meeting. 58 | 59 | Modifications of the contents of the Performance Team repository are made on 60 | a collaborative basis. Anybody with a GitHub account may propose a 61 | modification via pull request and it will be considered by the project 62 | Collaborators. All pull requests must be reviewed and accepted by a 63 | Collaborator with sufficient expertise who is able to take full 64 | responsibility for the change. In the case of pull requests proposed 65 | by an existing Collaborator, an additional Collaborator is required 66 | for sign-off. Consensus should be sought if additional Collaborators 67 | participate and there is disagreement around a particular 68 | modification. See _Consensus Seeking Process_ below for further detail 69 | on the consensus model used for governance. 70 | 71 | Collaborators may opt to elevate significant or controversial 72 | modifications, or modifications that have not found consensus to the 73 | team for discussion by assigning the ***performance-agenda*** tag to a pull 74 | request or issue. The team should serve as the final arbiter where 75 | required. 76 | 77 | For the current list of Collaborators, see the project 78 | [README.md](./README.md#current-project-team-members). 79 | 80 | ## Team Membership 81 | 82 | Team seats are not time-limited. There is no fixed size of the team. 83 | However, the expected target is between 6 and 12, to ensure adequate 84 | coverage of important areas of expertise, balanced with the ability to 85 | make decisions efficiently. 86 | 87 | There is no specific set of requirements or qualifications for the 88 | membership beyond these rules. 89 | 90 | The team may add additional members by unanimous consensus. 91 | 92 | A team member may be removed from the Performance Team by voluntary 93 | resignation, or by unanimous consensus of all other team members. 94 | 95 | Changes to team membership should be posted in the agenda, and may be 96 | suggested as any other agenda item (see "Team Meetings" below). 97 | 98 | If an addition or removal is proposed during a meeting, and the full 99 | team is not in attendance to participate, then the addition or removal 100 | is added to the agenda for the subsequent meeting. This is to ensure 101 | that all members are given the opportunity to participate in all 102 | membership decisions. If a team member is unable to attend a meeting 103 | where a planned membership decision is being made, then their consent 104 | is assumed. 105 | 106 | No more than 1/3 of the team members may be affiliated with the same 107 | employer. If removal or resignation of a team member, or a change of 108 | employment by a team member, creates a situation where more than 1/3 of 109 | the team membership shares an employer, then the situation must be 110 | immediately remedied by the resignation or removal of one or more team 111 | members affiliated with the over-represented employer(s). 112 | 113 | ## Team Meetings 114 | 115 | The team meets weekly on a Zoom On Air. A designated moderator 116 | approved by the team runs the meeting. Each meeting should be 117 | published to [YouTube](https://www.youtube.com/c/nodejs-foundation/streams). 118 | 119 | Items are added to the team agenda that are considered contentious or 120 | are modifications of governance, contribution policy, team membership, 121 | or release process. 122 | 123 | The intention of the agenda is not to approve or review all patches; 124 | that should happen continuously on GitHub and be handled by the larger 125 | group of Collaborators. 126 | 127 | Any community member or contributor can ask that something be added to 128 | the next meeting's agenda by logging a GitHub Issue. Any Collaborator, 129 | team member or the moderator can add the item to the agenda by adding 130 | the ***performance-agenda*** tag to the issue. 131 | 132 | Prior to each team meeting the moderator will share the Agenda with 133 | members of the team. Team members can add any items they like to the 134 | agenda at the beginning of each meeting. The moderator and the team 135 | cannot veto or remove items. 136 | 137 | The team may invite persons or representatives from certain projects to 138 | participate in a non-voting capacity. 139 | 140 | The moderator is responsible for summarizing the discussion of each 141 | agenda item and sends it as a pull request after the meeting. 142 | 143 | ## Consensus Seeking Process 144 | 145 | The Performance Team follows a [Consensus Seeking][] decision-making model. 146 | 147 | When an agenda item has appeared to reach a consensus the moderator 148 | will ask "Does anyone object?" as a final call for dissent from the 149 | consensus. 150 | 151 | If an agenda item cannot reach a consensus a team member can call for 152 | either a closing vote or a vote to table the issue to the next 153 | meeting. The call for a vote must be seconded by a majority of the team 154 | or else the discussion will continue. Simple majority wins. 155 | 156 | Note that changes to team membership require unanimous consensus. See 157 | "Team Membership" above. 158 | 159 | 160 | ## Developer's Certificate of Origin 1.1 161 | 162 | Use of a CLA or DCO is mandatory for all all OpenJS Foundation projects. The Node.js project has chosen to use the DCO 1.1 163 | 164 | By making a contribution to this project, I certify that: 165 | 166 | * (a) The contribution was created in whole or in part by me and I 167 | have the right to submit it under the open source license 168 | indicated in the file; or 169 | 170 | * (b) The contribution is based upon previous work that, to the best 171 | of my knowledge, is covered under an appropriate open source 172 | license and I have the right under that license to submit that 173 | work with modifications, whether created in whole or in part 174 | by me, under the same open source license (unless I am 175 | permitted to submit under a different license), as indicated 176 | in the file; or 177 | 178 | * (c) The contribution was provided directly to me by some other 179 | person who certified (a), (b) or (c) and I have not modified 180 | it. 181 | 182 | * (d) I understand and agree that this project and the contribution 183 | are public and that a record of the contribution (including all 184 | personal information I submit with it, including my sign-off) is 185 | maintained indefinitely and may be redistributed consistent with 186 | this project or the open source license(s) involved. 187 | 188 | ## Moderation Policy 189 | 190 | The [Node.js Moderation Policy][] applies to this team. 191 | 192 | ## Code of Conduct 193 | 194 | The [Node.js Code of Conduct][] applies to this team. 195 | 196 | [Node.js Code of Conduct]: https://github.com/nodejs/TSC/blob/master/CODE_OF_CONDUCT.md 197 | [Node.js Moderation Policy]: https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md 198 | [Consensus Seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making 199 | -------------------------------------------------------------------------------- /benchmarks/community-benchmark/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function assertShaLike() { 3 | local shaVarName="${1}" 4 | local sha="${!1}" 5 | if [ -z "${sha}" ] || ! echo "${sha}" | grep -qE '^[0-9a-fA-F]+$'; then 6 | echo "${shaVarName} (${sha}) does not look like a commit SHA" 7 | exit 8 | fi 9 | } 10 | 11 | function assertMatchesPullRequest() { 12 | local shaVarName="${1}" 13 | local sha="${!1}" 14 | local pr_id="${!2}" 15 | if [[ ! "$(git ls-remote origin refs/pull/${pr_id}/head)" =~ ^${sha}.*refs/pull/${pr_id}/head$ ]]; then 16 | echo "${shaVarName} (${sha}) does not match HEAD for pull request ${pr_id}" 17 | exit 18 | fi 19 | } 20 | 21 | function mandatory() { 22 | if [ -z "${!1}" ]; then 23 | echo "${1} not set" 24 | usage 25 | exit 26 | fi 27 | } 28 | 29 | function optional() { 30 | if [ -z "${!1}" ]; then 31 | echo -n "${1} not set (ok)" 32 | if [ -n "${2}" ]; then 33 | echo -n ", default is: ${2}" 34 | export ${1}="${2}" 35 | fi 36 | echo "" 37 | fi 38 | } 39 | function usage(){ 40 | echo "Usage:" 41 | 42 | echo "This script has two use cases:" 43 | echo "Use case 1: We want to test the impact of a PR on a branch." 44 | echo "To run this, declare:" 45 | echo "The script expects the following variables to be set:" 46 | echo "CATEGORY = a category of tests to run - folders in benchmark/" 47 | echo "BASE = the branch the test should be based off. e.g. master" 48 | echo "PULL_ID = the pull request that contains changes to test" 49 | echo "TARGET = the SHA of the commit HEAD that contains changes to test" 50 | echo "-------------------------------------------------------------" 51 | echo "Use case 2: We want to compare two branches, tags or commits." 52 | echo "To run this, declare:" 53 | echo "CATEGORY = a category of tests to run - folders in benchmark/" 54 | echo "BASE = the branch/tag/commit the test should be based off. e.g. master" 55 | echo "TARGET = the branch/tag/commit to compare against base" 56 | echo "-------------------------------------------------------------" 57 | echo "The following are optional across both use cases" 58 | echo "RUNS = defaults to empty" 59 | echo "FILTER = defaults to empty" 60 | echo "MACHINE_THREADS - used for building node. Defaults to all threads on machine" 61 | echo "CPUSET - used for pinning to specific CPU cores. Default to 0-11 (performance cores)" 62 | } 63 | 64 | if [ -z $PULL_ID ]; then 65 | #PULL_ID isn't declared. Therefore we are probably in use case #2 66 | export USE_CASE=2 67 | mandatory BASE 68 | mandatory TARGET 69 | else 70 | export USE_CASE=1 71 | mandatory BASE 72 | mandatory PULL_ID 73 | mandatory TARGET 74 | assertShaLike TARGET 75 | fi 76 | mandatory CATEGORY 77 | optional RUNS 78 | optional FILTER 79 | optional CPUSET "0-11" 80 | getMACHINE_THREADS=`cat /proc/cpuinfo |grep processor|tail -n1|awk {'print $3'}` 81 | let getMACHINE_THREADS=getMACHINE_THREADS+1 #getting threads this way is 0 based. Add one 82 | optional MACHINE_THREADS $getMACHINE_THREADS 83 | rm -rf node 84 | git clone --depth=1 https://github.com/nodejs/node.git 85 | cd node 86 | case $USE_CASE in 87 | 1) 88 | # Validate TARGET and pull request HEAD are consistent 89 | assertMatchesPullRequest TARGET PULL_ID 90 | git checkout $BASE 91 | ;; 92 | 2) 93 | git checkout $BASE 94 | ;; 95 | esac 96 | 97 | # build master 98 | # select the appropriate compiler 99 | curl -sLO https://raw.githubusercontent.com/nodejs/build/master/jenkins/scripts/select-compiler.sh 100 | . ./select-compiler.sh 101 | ./configure > ../node-master-build.log 102 | make -j${MACHINE_THREADS} >> ../node-master-build.log 103 | mv out/Release/node ./node-master 104 | 105 | # build pr 106 | case $USE_CASE in 107 | 1) 108 | curl -L "https://github.com/nodejs/node/compare/$(git rev-parse HEAD)...${TARGET}.patch"|git apply -3 109 | ;; 110 | 2) 111 | git checkout $TARGET 112 | ;; 113 | esac 114 | # select the appropriate compiler 115 | . ./select-compiler.sh 116 | ./configure > ../node-pr-build.log 117 | make -j${MACHINE_THREADS} >> ../node-pr-build.log 118 | mv out/Release/node ./node-pr 119 | if [ -n "$FILTER" ]; then 120 | FILTER="--filter ${FILTER}" 121 | fi 122 | if [ -n "$RUNS" ]; then 123 | RUNS="--runs ${RUNS}" 124 | fi 125 | if [ -n "$CPUSET" ]; then 126 | CPUSET="--set CPUSET=${CPUSET}" 127 | fi 128 | # run benchmark 129 | fileName=output`date +%d%m%y-%H%M%S`.csv 130 | echo "Output will be saved to $fileName" 131 | pwd 132 | 133 | # Run on performance cores 134 | ./node-master benchmark/compare.js $CPUSET --old ./node-master --new ./node-pr $FILTER $RUNS -- $CATEGORY | tee $fileName 135 | 136 | cat $fileName | Rscript benchmark/compare.R 137 | mv $fileName $startDir 138 | -------------------------------------------------------------------------------- /meetings/2022-11-14.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Meeting 2022-11-14 2 | 3 | ## Links 4 | 5 | * **Recording**: https://youtu.be/syQw6KFheDM 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/7 7 | * **Minutes Google Doc**: https://docs.google.com/document/d/1SOth1yjmhOUN6zSWT7b613c4o3ajcnLhxQWloO9Kuf0/edit 8 | 9 | ## Present 10 | 11 | * Performance team: @nodejs/performance 12 | * Yagiz Nizipli (@anonrig) 13 | * Jean Burellier (@sheplu) 14 | * Ulises Gascon (@ulisesGascon) 15 | * Tony Gorez (@tony-go) 16 | * Rafael Gonzaga (@rafaelgss) 17 | * Juan Arboleda (@juanarbol) 18 | * Ethan Arrowood (@Ethan-Arrowood) 19 | * Santiago Gimeno (@santigimeno) 20 | 21 | ## Announcements 22 | 23 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 24 | 25 | ### nodejs/performance 26 | 27 | * Governance & Meeting Schedule [#8](https://github.com/nodejs/performance/issues/8) 28 | * Let’s keep this basic schedule of meeting every two weeks on Monday 6pm UTC time. 29 | 30 | * Confusing LICENSE.md [#6](https://github.com/nodejs/performance/issues/6 ) 31 | * License is currently not valid. Depending on what the group will be producing, the license can change 32 | * Ethan: MIT seems good as this is the license used by Node.js. 33 | * Made the decision to remove existing license file and reference Node.js license. 34 | 35 | * Buffer.writeXIntYYZZ [#2](https://github.com/nodejs/performance/issues/2 ) 36 | * Had a recommendation of triggering benchmarks with commit changes in releases. 37 | * Issue with time needed to run every benchmarks in the CI. Easily can take 24h to run all. 38 | * How can we be sure to run all the benchmarks needed when we commit or release ? 39 | * How can we be sure to not miss some code changes impacting the performances 40 | 41 | * Buffer.indexOf [#4](https://github.com/nodejs/performance/issues/4) 42 | * Tony: will be leading that 43 | 44 | * Atomic condition variable is very slow in v8: https://github.com/nodejs/performance/issues/5 45 | * Should we create a low / high impact label ? 46 | 47 | * Proposal: Replacing ICU: https://github.com/nodejs/node/issues/45389 48 | * Moved it to next agenda. 49 | 50 | * Undici Improvements: https://github.com/nodejs/performance/issues/11 51 | * Ethan and Robert mentioned Streams (WebStreams), Buffers 52 | * Rafael shared https://github.com/nodejs/undici/issues/1203#issuecomment-1100969210 53 | 54 | ## Q&A, Other 55 | 56 | ## Upcoming Meetings 57 | 58 | * **Node.js Project Calendar**: 59 | 60 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 61 | -------------------------------------------------------------------------------- /meetings/2022-11-28.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2022-11-28 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=f0yEem50VOI 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/28 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli (@anonrig) 12 | * Ulises Gascon (@ulisesgascon) 13 | * Jean Burellier (@sheplu) 14 | * Ethan Arrowood (@Ethan-Arrowood) 15 | * Stephen Belanger (@qard) 16 | * Juan Arboleda (@juanarbol) 17 | * Marco Ippolito (@marco-ippolito) 18 | 19 | ## Agenda 20 | 21 | ## Announcements 22 | 23 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 24 | 25 | ### nodejs/performance 26 | 27 | * Add support for V8 fast call [#23](https://github.com/nodejs/performance/issues/23) 28 | * Multiple people are keen to help (Matteo, James, …) 29 | * stephen: V8 fast call API can be (very) limited but we need to investigated the gain / impact 30 | * Juan & Yagiz: find more information and come up with a PR 31 | * Merging Github team with README [#19](https://github.com/nodejs/performance/issues/19) 32 | * Yagiz & Jean: discussion around GitHub team VS people listed in the README.md 33 | * Buffer.toString vs TextDecoder [#18](https://github.com/nodejs/performance/issues/18) 34 | * Yagiz: still some issue for small string and we should investigate that 35 | * Jean: will try to keep a look at it 36 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 37 | * Ethan: streams are slow by default. Need to find a way to have faster stream (for Fetch but also a lot of other parts of node). Micro optimization is maybe not the best use case here (based on how it is used) and would be better to have one good optimization (based on time passed) 38 | * spec => https://fetch.spec.whatwg.org/ 39 | * Yagiz : Check turbofan for optimization 40 | * 64 bit integers [#10](https://github.com/nodejs/performance/issues/10) 41 | * nothing new 42 | * WHATWG Streams [#9](https://github.com/nodejs/performance/issues/9) 43 | * We will have a special discussion with multiple people around this topic. If you are interested you can add yourself on the issue 44 | * Atomic condition variable [#5](https://github.com/nodejs/performance/issues/5) 45 | * removing agenda label due to missing benchmarks 46 | * Buffer.indexOf [#4](https://github.com/nodejs/performance/issues/4) 47 | * Tony did a fantastic job, but unfortunately there isn't any room for improvement at the moment. 48 | * Buffer.(read|write)(U)Int(LE|BE)(8|16|32) [#2](https://github.com/nodejs/performance/issues/2) 49 | * nothing new, moving to the next meetings agenda 50 | 51 | 52 | ## Q&A, Other 53 | * Yagiz: Open sourced @BridgeAR's faster version of array-join - could be nice to check https://github.com/anonrig/fast-array-join 54 | * Ethan: Startup time Node 16 vs Node 18 https://github.com/nodejs/node/issues/45662 55 | 56 | 57 | ## Upcoming Meetings 58 | 59 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 60 | 61 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 62 | 63 | -------------------------------------------------------------------------------- /meetings/2023-01-09.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-01-09 2 | 3 | ## Links 4 | 5 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/35 6 | 7 | ## Present 8 | 9 | * Performance team: @nodejs/performance 10 | * Yagiz Nizipli (@anonrig) 11 | * Rafael Gonzaga (@RafaelGSS) 12 | * Robert Nagy (@ronag) 13 | * Stephen Belanger (@qard) 14 | * Ulises Gascon (@UlisesGascon) 15 | * Marco Ippolito (@marco-ippolito) 16 | * Mike Roth (@roth-mike) 17 | * Juan Arboleda (@juanarbol) 18 | * Miguel Teixeira (@miguelteixeiraa) 19 | * Jean Burellier (@sheplu) 20 | 21 | ## Agenda 22 | 23 | ## Announcements 24 | 25 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 26 | 27 | Anonrig: Proposal to create a C++ URL parser and embed it directly on Node.js 28 | 29 | ### nodejs/node 30 | 31 | * Start time performance regression when upgrading from 16.x to 18.x [#45662](https://github.com/nodejs/node/issues/45662) 32 | * It seems fixed. Waiting for release on v19.x and active release lines backport. 33 | * The backport needs a rewrite of the feature 34 | 35 | ### nodejs/performance 36 | 37 | * Add support for V8 fast call [#23](https://github.com/nodejs/performance/issues/23) 38 | * We need a volunteer to write a doc for this 39 | 40 | * Buffer.toString vs TextDecoder [#18](https://github.com/nodejs/performance/issues/18) 41 | * For small strings it’s still slow due to JS -> C++ bridge costs. 42 | * ronagy: Would be good to include V8 Fast call to Buffer.toString too 43 | 44 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 45 | * WHATWG Streams [#9](https://github.com/nodejs/performance/issues/9) 46 | * Rafael did an investigation and opened a PR that improves the undici.fetch benchmark by ~30% by reusing Errors 47 | * `makeTransferable` is slow due to some prototype manipulations. We can achieve approximately 30% of improvement on that path. 48 | * Another possible choice it to optimize Error.captureStackTrace which is quite expensive 49 | * We might consider implementing the Webstreams on the C++ side. We’re not sure how feasible this is considering the main usage of webstreams is over fetch, and fetch is for compatibility not for performance. 50 | 51 | * Buffer.(read|write)(U)Int(LE|BE)(8|16|32) [#2](https://github.com/nodejs/performance/issues/2) 52 | * ronagy: Happy to provide a PoC. 53 | 54 | * Do not parse numbers on url parsers - ipv4[#36](https://github.com/nodejs/performance/issues/36) 55 | * Current EndsInNumber implementation parses every number, but it is unnecessary for validation only purposes. 56 | There is a potential 25-30% room for improvement, and Yagiz is happy to guide any volunteer. 57 | 58 | ## Q&A, Other 59 | 60 | ## Upcoming Meetings 61 | 62 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 63 | 64 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 65 | 66 | -------------------------------------------------------------------------------- /meetings/2023-01-23.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-01-23 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=334glI1nluU 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/43 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Ulises Gascon: @ulisesGascon 12 | * Marvin Hagemeister @marvinhagemeister 13 | * Yagiz Nizipli: @anonrig 14 | * Stephen Belanger: @qard 15 | * Kerem Kat: @krk 16 | * Joyee Cheung: @joyeecheung 17 | * Juan Arboleda: @juanarbol 18 | * Robert Nagy: @ronag 19 | 20 | ## Agenda 21 | 22 | ## Announcements 23 | 24 | * Node URL got ~30% faster thanks to Miguel (referencing https://github.com/nodejs/node/pull/46227) 25 | 26 | ### nodejs/node 27 | 28 | * Start time performance regression when upgrading from 16.x to 18.x [#45662](https://github.com/nodejs/node/issues/45662) 29 | * The issue is fixed on the main branch and Node 19. 30 | * Working on a backport to Node 18. 31 | 32 | ### nodejs/performance 33 | 34 | * Node errors are very slow to create [#40](https://github.com/nodejs/performance/issues/40) 35 | * A lot of dependencies are starting to *not* use cancellable apis because of the performance issues. 36 | * Custom optimization for abort signal/abort event can be done (@ronag) 37 | * Adding and removing the event handler might be the issue. 38 | * If someone is interested in this, Robert is happy to guide them. 39 | 40 | * Module resolution [#39](https://github.com/nodejs/performance/issues/39) 41 | * Marvin diagnosed an issue with file system operations and the impact. 42 | * **Very** big part of module resolution is lost on creating errors. 43 | * Async methods might be improved. 44 | * Yagiz is happy to add `fs.isFile` kind of API if needed. 45 | * Joyee has some insights/recommendations for the fs.statSync improvement. 46 | * The “throw and catch an error even when it’s useless” behavior has an old deprecation TODO. If we remove it then the performance issue would also go away. 47 | * It’s possible to add options parameter to `fs.existsSync` for checking if it’s a file/directory. 48 | 49 | * Add support for V8 fast call [#23](https://github.com/nodejs/performance/issues/23) 50 | * Can we add v8 support to Node-API? 51 | 52 | * Buffer.toString vs TextDecoder [#18](https://github.com/nodejs/performance/issues/18) 53 | * Let’s improve the docs to use TextDecoder for certain cases of Buffer.toString 54 | 55 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 56 | * Rafael has invested some time on this, and improved it. 57 | 58 | * WHATWG Streams [#9](https://github.com/nodejs/performance/issues/9) 59 | * Skipping because Rafael is not at the meeting. 60 | 61 | * Buffer.(read|write)(U)Int(LE|BE)(8|16|32) [#2](https://github.com/nodejs/performance/issues/2) 62 | * Robert invested some time on this, and theoretically it is possible to use DataView to improve writeInt32LE and readInt32LE implementations. 63 | * James (@jasnell) might help with this. 64 | 65 | 66 | ## Q&A, Other 67 | 68 | 69 | ## Upcoming Meetings 70 | 71 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 72 | 73 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 74 | 75 | -------------------------------------------------------------------------------- /meetings/2023-02-06.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-02-06 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=l8-DCAMGobE 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/48 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli: @anonrig 12 | * Marvin Hagemeister @marvinhagemeister 13 | * Ulises Gascon: @ulisesGascon 14 | * Stephen Belanger: @qard 15 | * Santiago Gimeno: @santigimeno 16 | * Tony Gorez: @tony-go 17 | * Rafael Gonzaga: @RafaelGSS 18 | * Robert Nagy: @ronag 19 | 20 | 21 | ## Agenda 22 | 23 | ## Announcements 24 | 25 | [Ada](https://github.com/ada-url/ada), the new URL parse will be added to Node.js as dependency in order to increase speed by 78 %, fetch will become faster too 🎉 26 | 27 | Marvin released a really good blog post on https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-3/. 28 | 29 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 30 | 31 | ### nodejs/node 32 | 33 | * Start time performance regression when upgrading from 16.x to 18.x [#45662](https://github.com/nodejs/node/issues/45662) 34 | 19.x changes are already merged 35 | There is an ongoing work to port the changes to 16.x and 18.x (lead by @joyeecheung) 36 | This item will be removed from the agenda 37 | ### nodejs/performance 38 | 39 | * AbortSignal is slow [#44](https://github.com/nodejs/performance/issues/44) 40 | Reached out to RxJS folks. There are some discussions and agreements ongoing, but after checking the performance improvements there were no major upgrades 41 | PR from Santigo (@santigimeno) improves the performance by 20% - https://github.com/nodejs/node/pull/46527 42 | Ongoing discussion about further changes that could improve the performance even more include moving `Event.isTrusted` to the prototype and not setting `__proto__: null`. The former might break the spec. 43 | Recommendation escalate to WinterCG group 44 | * Node errors are very slow to create [#40](https://github.com/nodejs/performance/issues/40) 45 | This item will be removed from the agenda 46 | * Module resolution [#39](https://github.com/nodejs/performance/issues/39) 47 | There is an open PR relevant (pending from benchmark) 48 | Suggestion: Implement it fully in C++. Input value is a string, return value is a boolean, so this would lend itself to use v8 fast paths 49 | @tony-go will take a look at it 50 | We could expose it to user land later if we found a use case for it 51 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 52 | We move from very slow to just slow in terms of performance 53 | There are more open opportunities, but let’s see how Ada will impact on the performance and then we can reevaluate the situation. 54 | This item will be removed from the agenda, and the issue will be closed. We can reopen the issue if needed. 55 | * WHATWG Streams [#9](https://github.com/nodejs/performance/issues/9) 56 | [Last update from Rafael](https://github.com/nodejs/performance/issues/9#issuecomment-1370136019) 57 | We will discuss it again in the next meeting 58 | * Buffer.(read|write)(U)Int(LE|BE)(8|16|32) [#2](https://github.com/nodejs/performance/issues/2) 59 | This item will be removed from the agenda 60 | 61 | * Reference to https://github.com/nodejs/performance/issues/51 62 | 63 | ## Q&A, Other 64 | 65 | ## Upcoming Meetings 66 | 67 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 68 | 69 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 70 | 71 | -------------------------------------------------------------------------------- /meetings/2023-02-20.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-02-20 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=KLsxXja1fYs 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/58 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli: @anonrig 12 | * Ulises Gascon: @ulisesGascon 13 | * Santiago Gimeno: @santigimeno 14 | * Juan Arboleda: @soyjuanarbol 15 | * Robert Nagy: @ronag 16 | * Ruben Bridgewater: @BridgeAR 17 | 18 | ## Agenda 19 | 20 | ## Announcements 21 | 22 | - The new URL parser will be released this week! 23 | - It was a productive week for all of us! Other improvements had been made by the group members (Ruben, Joyee and multiple other collaborators) based on separated issues 24 | - Santiago is planning to do a new PR for event creation this week 25 | 26 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 27 | 28 | ### nodejs/performance 29 | 30 | * getLibuvNow is slow [#49](https://github.com/nodejs/performance/issues/49) 31 | - Seems that there is a fix for it, related to timers (https://github.com/nodejs/node/pull/46579) with v8 fastApi. (Thanks to joyee!) 32 | It will be removed from the agenda 33 | * AbortSignal pattern is slow [#44](https://github.com/nodejs/performance/issues/44) 34 | - Ruben created a PR to reduce error creation duration by 86-166% (Amazing work!) 35 | - There are several issues with AbortSignal Pattern 36 | - Emitting events is slow (Santiago will open a PR to improve this) 37 | - Adding and removing event listeners in event Targets. This is actually the main issue. New issue: https://github.com/nodejs/performance/issues/60 38 | - We have specific perf benchmarks for events (adding and removing) in https://github.com/nodejs/node/blob/main/benchmark/events/eventtarget.js, seems like we should potentially update them for EventTarget addition/removal. 39 | * Module resolution [#39](https://github.com/nodejs/performance/issues/39) 40 | - Yagiz did some research and a PR related to it (https://github.com/nodejs/node/pull/46652) - Not yet merged. We should add a caching layer once is merged 41 | - There is a pending PR for changing off threading loaders. Until it gets merged, Yagiz’s pull request will be on hold to avoid git conflicts. 42 | * WHATWG Streams [#9](https://github.com/nodejs/performance/issues/9) 43 | - There is an option to improve this by moving the core logic to C++, similar to the work done by Deno and Bun, but requires extensive work. For the time being, we can close this issue. 44 | - This item will be removed from the agenda 45 | 46 | ## Q&A, Other 47 | - Yagiz opened several PRs related to URL parsing and he discovered a happy path that has a more performing approach. There was a discussion around it with Daniel as this implementation may have a more complex implementation as hidden cost. It is an early stage yet to build a consensus. 48 | 49 | ## Upcoming Meetings 50 | 51 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 52 | 53 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 54 | 55 | -------------------------------------------------------------------------------- /meetings/2023-04-03.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-04-03 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=MVqHVCv-rnQ 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/68 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli: @anonrig 12 | * Stephen Belanger: @qard 13 | * Robert Nagy: @ronag 14 | * Debadree Chatterjee @debadree25 15 | 16 | 17 | ## Agenda 18 | 19 | ## Announcements 20 | 21 | * Ada v2 is released. Announcement post is available at http://yagiz.co/announcing-ada-url-parser-v2-0/ 22 | * V8 11.3 brings `String.prototype.toWellFormed()` support with 70-80% faster `toUSVString` 23 | * Increasing the default watermark size for version 20. It provides a performance boost! 24 | 25 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 26 | 27 | ### nodejs/performance 28 | 29 | * add/remove handlers are slow on EventTarget [#60](https://github.com/nodejs/performance/issues/60) 30 | * It would be great to add a fast path for AbortSignal to have only one `abort` listener. 31 | * There is no one working on it right now. 32 | * Debadree attempted on adding a hashmap based approach but did not help with any performance impacts. 33 | * It would be great to have a benchmark for adding and removing a single event listener (the current benchmarks adds multiple listeners and then dispatches), because the proposed benchmark would never traverse the linkedlist. 34 | * Session proposals for the next Collaborator Summit - what should we submit [#64](https://github.com/nodejs/performance/issues/64) 35 | * Bun & Deno Comparison [#55](https://github.com/nodejs/performance/issues/55) 36 | * Yagiz proposed adding his own performance benchmarks to the performance repository. Will keep this for visibility. 37 | * AbortSignal pattern is slow [#44](https://github.com/nodejs/performance/issues/44) 38 | * Closing it since it is a duplicate of add/remove handlers for EventTarget 39 | * Module resolution [#39](https://github.com/nodejs/performance/issues/39) 40 | * Put this on hold until off-thread loader pull request is landed. 41 | * EventTarget [#32](https://github.com/nodejs/performance/issues/32) 42 | * Closing it due to Santiago’s amazing contributions. 43 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 44 | * Robert: I don’t know where to start optimizing. There’s more work to be done. Maybe we can ask Rafael on making a new analysis on undici fetch? 45 | 46 | 47 | ## Q&A, Other 48 | 49 | ## Upcoming Meetings 50 | 51 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 52 | 53 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 54 | 55 | -------------------------------------------------------------------------------- /meetings/2023-04-17.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-04-17 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=yRj7BT8xeEI 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/71 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Ulises Gascon: @ulisesGascon 12 | * Yagiz Nizipli: @anonrig 13 | * Robert Nagy: @ronag 14 | * Miguel Teixeira: @miguelteixeiraa 15 | 16 | ## Agenda 17 | 18 | ## Announcements 19 | 20 | - Ada is backported to Node 18! 21 | - Node 20 will include off-thread loading of modules pull request, and Ada v2.0 which will improve the URL parsing performance 22 | - @khafradev added V8 Fast API to URL.canParse which improves the performance up to 60-70%. 23 | - Performance became a strategic initiative of Node.js with @anonrig as the champion 24 | 25 | *Extracted from **performance-agenda** labeled issues and pull requests from the **nodejs org** prior to the meeting. 26 | 27 | ### nodejs/performance 28 | 29 | * Session proposals for the next Collaborator Summit - what should we submit [#64](https://github.com/nodejs/performance/issues/64) 30 | * Three main topics suggested: web streams, benchmark CI/CD and HTTP (parser, Ada) 31 | * @anonrig can prepare a session about Ada 32 | * Benchmark main topic can be focused around the ownership/responsibilities (Build team or performance team) for the node-benchmark repository. @Ulises will try to help on this 33 | * Additional ideas: Introducing v8 fast API to collaborators will help to make adoption easier 34 | * The issue will be open, so other members can add more ideas in the following days 35 | * The discussion will continue offline as well 36 | * add/remove handlers are slow on EventTarget [#60](https://github.com/nodejs/performance/issues/60) 37 | * No big changes since the last meeting. 38 | * Removing it from the agenda until someone grabs it. 39 | * Bun & Deno Comparison [#55](https://github.com/nodejs/performance/issues/55) 40 | * @anonrig will open a pull request to move anonrig/node-benchmarks to nodejs/performance repository. 41 | * It will help us to understand where we can improve 42 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 43 | * @anonrig: Benchmarks on Undici are quite flaky. It’s quite hard to understand any performance improvement, and I propose we improve the benchmarks. 44 | 45 | 46 | ## Q&A, Other 47 | 48 | * Path modules can leverage a performance boost. @anonrig will open an issue in the next couple of days of what we can do. 49 | * @anonrig asked @ronag if he could automatically add Yagiz’s username to TSC notes to get notified by the meetings to share the strategic initiative news. 50 | * Legacy CJS performance issue is open at the repository. If anybody wants to work on it, @anonrig is happy to share his knowledge on this. 51 | 52 | ## Upcoming Meetings 53 | 54 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 55 | 56 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 57 | -------------------------------------------------------------------------------- /meetings/2023-05-01.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-05-01 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=dY2q_MR_itA 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/75 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Ulises Gascon: @ulisesGascon 12 | * Yagiz Nizipli: @anonrig 13 | * Debadree Chatterjee: @debadree25 14 | 15 | ## Agenda 16 | 17 | ## Announcements 18 | 19 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 20 | 21 | ### nodejs/performance 22 | 23 | * Session proposals for the next Collaborator Summit - what should we submit [#64](https://github.com/nodejs/performance/issues/64) 24 | * Ref: https://github.com/openjs-foundation/summit/issues/355#issuecomment-1529309477 25 | * Closing the issue due to EOL. 26 | * Bun & Deno Comparision [#55](https://github.com/nodejs/performance/issues/55) 27 | * Removed from the agenda until the repo migration is completed 28 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 29 | * Ongoing process 30 | 31 | 32 | ## Q&A, Other 33 | 34 | ## Upcoming Meetings 35 | 36 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 37 | 38 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 39 | 40 | -------------------------------------------------------------------------------- /meetings/2023-05-15.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-05-15 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=wTQYyxSViVg 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/78 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli: @anonrig 12 | * Ulises Gascon: @ulisesGascon 13 | * Robert Nagy: @ronag 14 | * Debadree Chatterjee: @debadree25 15 | * Vinicius Lourenço: @H4ad 16 | 17 | ## Agenda 18 | 19 | ## Announcements 20 | 21 | 22 | 23 | 24 | 25 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 26 | 27 | ### nodejs/performance 28 | 29 | * Improve legacy CJS resolve [#73](https://github.com/nodejs/performance/issues/73) 30 | * Nodejs is performing several c++ calls to `new URL` when running `fileExists` that can be simplified into a single C++ call. 31 | * This issue is open to contribution from the community. 32 | 33 | * MakeCallback is very slow [#24](https://github.com/nodejs/performance/issues/24) 34 | * C++ is calling JS, this is very slow due Async hooks. 35 | * This scenario happened in the past in other parts of Node.js 36 | * There is a path to explore: flag to control async hooks. That way we can avoid async hook when they are not needed. 37 | * We want to involve more relevant contributors in this issue. We will ping them in the issue 38 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 39 | * There are no news 40 | * Readable streams should be the focus from now on: https://github.com/nodejs/performance/issues/82 41 | * PR from Debadree related to this: https://github.com/anonrig/node-benchmarks/pull/3 42 | 43 | 44 | ## Q&A, Other 45 | 46 | * Expensive `isTraceHTTPEnable` [#81](https://github.com/nodejs/performance/issues/81) 47 | * Vinicius will lead the implementation with the support from Yagiz 48 | 49 | 50 | ## Upcoming Meetings 51 | 52 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 53 | 54 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 55 | 56 | -------------------------------------------------------------------------------- /meetings/2023-05-29.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-05-29 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=bqjXEyPQSfs 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/85 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Ulises Gascon: @ulisesgascon 12 | * Robert Nagy: @ronag 13 | * Vinícius Lourenço: @H4ad 14 | * Yagiz Nizipli: @anonrig 15 | 16 | ## Agenda 17 | 18 | ## Announcements 19 | 20 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 21 | 22 | 23 | * Libuv 1.45.0: https://github.com/nodejs/node/pull/48078 24 | * Thanks to @bnoordhuis and https://github.com/isc-projects which iiuc sponsored some of his work. 25 | * It is providing a performance boost due the new Linux architecture 26 | 27 | * https://github.com/nodejs/performance/issues/85#issuecomment-1563757752 28 | * Thanks to @kvakil: 30% boost at startup (v20.1.0 -> v20.2.0) 29 | 30 | * Yagiz is leaving for paternity leave. Ulises will help to host the next two meetings. 31 | 32 | ### nodejs/performance 33 | 34 | * Performance of WHATWG ReadableStream.read() [#82](https://github.com/nodejs/performance/issues/82) 35 | * We are a little bit slower in comparison with Bun and Deno 36 | * It will be nice to see if Deno/Bun is using native implementation or JS. 37 | * Improve legacy CJS resolve #73 38 | * The current approach is to use `simdjson` to perform the JSON parsing and increase the performance. See: https://github.com/nodejs/node/pull/47991 39 | * @H4ad is working on this issue from now on 40 | * MakeCallback is very slow [#24](https://github.com/nodejs/performance/issues/24) 41 | * We reached out to more people about it, including the TSC meeting. 42 | * We need to do a deeper investigation 43 | * This approach made by the `uWebSockets.js` is interesting. See: https://github.com/nodejs/performance/issues/24#issuecomment-1559993286 44 | * Daniel(@lemire) & Yagiz will work soon in a new library to resolve the Websockets layer (compatible with Node.js) 45 | 46 | * fetch [#11](https://github.com/nodejs/performance/issues/11) 47 | * No news, we will remove it from the agenda 48 | * Benchmarks and more info is needed before we can make any progress. 49 | * Contributions from the community are more than welcome here. 50 | 51 | ## Q&A, Other 52 | 53 | * Expensive `isTraceHTTPEnable` (https://github.com/nodejs/performance/issues/81) is worth mentioning. @H4ad is working on it. 54 | * Vinícius is nominated/invited to the Performance Team. Reference: https://github.com/nodejs/performance/issues/86 55 | 56 | ## Upcoming Meetings 57 | 58 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 59 | 60 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 61 | 62 | -------------------------------------------------------------------------------- /meetings/2023-06-12.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-06-12 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=LXvSMjyiLhM 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/94 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Ulises Gascon: @ulisesgascon 12 | * Vinícius Lourenço: @H4ad 13 | 14 | 15 | 16 | ## Agenda 17 | 18 | ## Announcements 19 | 20 | * No announcements 21 | 22 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 23 | 24 | ### nodejs/performance 25 | 26 | * Performance of WHATWG ReadableStream.read() [#82](https://github.com/nodejs/performance/issues/82) 27 | * No news 28 | * Expensive `isTraceHTTPEnable` [#81](https://github.com/nodejs/performance/issues/81) 29 | * Vinícius has created a PR https://github.com/nodejs/node/pull/48142, there are some issues with the compilation but the solution is working fine 30 | * It will be great to get additional help with the compilation issues 31 | * Improve legacy CJS resolve [#73](https://github.com/nodejs/performance/issues/73) 32 | * Vinícius has created a PR https://github.com/nodejs/node/pull/48325 33 | * This brings the possibility to improve other parts of the system like `fileURLToPath`, but it will need some ESM resolver code refactoring first as described in https://github.com/nodejs/node/pull/48325#issuecomment-1575799579 34 | * MakeCallback is very slow [#24](https://github.com/nodejs/performance/issues/24) 35 | * No news 36 | * Added “help wanted” label to the issue 37 | 38 | 39 | 40 | ## Q&A, Other 41 | 42 | ## Upcoming Meetings 43 | 44 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 45 | 46 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 47 | -------------------------------------------------------------------------------- /meetings/2023-06-26.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-06-26 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=UQzj2Ezu1jU 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/97 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Ulises Gascon: @ulisesGascon 12 | * Vinícius Lourenço: @H4ad 13 | * Carlos Espa: @Ceres6 14 | 15 | 16 | ## Agenda 17 | 18 | ## Announcements 19 | 20 | No announcements 21 | 22 | ### nodejs/performance 23 | 24 | * Performance of WHATWG ReadableStream.read() [#82](https://github.com/nodejs/performance/issues/82) 25 | * No news 26 | * Expensive `isTraceHTTPEnable` [#81](https://github.com/nodejs/performance/issues/81) 27 | * Vinícius made a good progress (compilation issue solved) 28 | * Waiting for review. See: https://github.com/nodejs/node/pull/48142 29 | * @anonrig can help us to speed up the review 30 | * Improve legacy CJS resolve [#73](https://github.com/nodejs/performance/issues/73) 31 | * Vinícius added new tests 32 | * Vinícius detected a bug on his own code but he is in the way to fix it, which was related with the resolution on windows. 33 | * MakeCallback is very slow [#24](https://github.com/nodejs/performance/issues/24) 34 | * No news 35 | * Open for help from the community 36 | 37 | 38 | ## Q&A, Other 39 | 40 | * Fast path for --no-deprecation [#90](https://github.com/nodejs/performance/issues/90) 41 | * This is a good first issue for the community 42 | * Carlos will lead it 43 | 44 | ## Upcoming Meetings 45 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 46 | 47 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 48 | 49 | -------------------------------------------------------------------------------- /meetings/2023-07-10.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-07-10 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=jARbOPW2-I4 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/101 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli: @anonrig 12 | * Ulises Gascon: @ulisesGascon 13 | * Carlos Espa: @Ceres6 14 | * Rafael Gonzaga: @RafaelGSS 15 | * Ruben Bridgewater: @BridgeAR 16 | 17 | ## Agenda 18 | 19 | ## Announcements 20 | 21 | *Extracted from **performance-agenda** labeled issues and pull requests from the **nodejs org** prior to the meeting. 22 | 23 | ### nodejs/node 24 | 25 | * Improve developer experience for v8 performance related flags [#43407](https://github.com/nodejs/node/issues/43407) 26 | * This is an issue that started in 2022 and is related to the flags that we use to build Node.js 27 | * Let’s keep the item in the agenda for now (visibility) 28 | * Currently this topic is open for community contributions 29 | 30 | ### nodejs/performance 31 | 32 | * What's new for the Node.js Performances? - 2023 version [#98](https://github.com/nodejs/performance/issues/98) 33 | * The team can publish news in this issue that are later on collected for a Node.js global activity feed in https://github.com/nodejs/nodejs-news-feeder 34 | * This is a global initiative in the organization 35 | * Removed from the agenda and discussion going offline 36 | * This issue will be pinned in the repository 37 | * Reduce URL initializations in ESM [#92](https://github.com/nodejs/performance/issues/92) 38 | * It was part of a long process from last month (3 PRs to remove unnecessary urls and parsing content) 39 | * Open to contributions to finalize the last part of it 40 | * Improve the performance of package json reader [#91](https://github.com/nodejs/performance/issues/91) 41 | * Node.js is traversing folders (up to two or three levels) looking for package.json, this is slow 42 | * There are two PRs already merged authored by Yagiz related to parsing. 43 | * There is a new benchmark to measure this change (https://github.com/lemire/simdjson_performance_demo) and simdjson library proves that the overhead of reading package json lies in V8 not in Node.js 44 | * There is an independent problem (loading problem) that is related with v8 and not by simdjson 45 | * we can discuss with the v8 team regarding json deserialize/serialize potential improvements. This will require some benchmarking to explain the scenario and the potential improvements 46 | * This is currently open for community contributions 47 | * This improvement is related to startup, require and json manipulation. This will have a great impact in the community 48 | * Fast path for `--no-deprecation` [#90](https://github.com/nodejs/performance/issues/90) 49 | * I think we need a benchmark to show the change of removing deprecations and see the impact of it. The current benchmark shows 1 star confidence, which doesn’t show any improvement. 50 | * Ruben: I don’t think it’s worth the change, because the code is already optimized as well. 51 | * Performance of WHATWG ReadableStream.read() [#82](https://github.com/nodejs/performance/issues/82) 52 | * Expensive `isTraceHTTPEnable` [#81](https://github.com/nodejs/performance/issues/81) 53 | * There was a consensus that the change recommended in this pull request is not worth the performance impact due to adding the extra-overhead and code complexity. 54 | * MakeCallback is very slow [#24](https://github.com/nodejs/performance/issues/24) 55 | 56 | 57 | 58 | ## Q&A, Other 59 | 60 | ## Upcoming Meetings 61 | 62 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 63 | 64 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 65 | 66 | -------------------------------------------------------------------------------- /meetings/2023-10-16.md: -------------------------------------------------------------------------------- 1 | # Node.js Performance Team Meeting 2023-10-16 2 | 3 | ## Links 4 | 5 | * **Recording**: https://www.youtube.com/watch?v=QRaFTe-CLeU 6 | * **GitHub Issue**: https://github.com/nodejs/performance/issues/124 7 | 8 | ## Present 9 | 10 | * Performance team: @nodejs/performance 11 | * Yagiz Nizipli @anonrig 12 | * Debadree Chatterjee @debadree25 13 | * Aras Abbasi @uzlopak 14 | * Rafael Gonzaga @RafaelGSS 15 | * André Alves @andremralves 16 | 17 | ## Agenda 18 | 19 | ## Announcements 20 | 21 | *Extracted from **performance-agenda** labelled issues and pull requests from the **nodejs org** prior to the meeting. 22 | 23 | ### nodejs/performance 24 | 25 | * Bring back clonefile on Mac OS X [#110](https://github.com/nodejs/performance/issues/110) 26 | * Removed the label and tagged libuv team for a follow-up of the issue. 27 | * Performance of `node:fs` [#106](https://github.com/nodejs/performance/issues/106) 28 | * There are still some sync methods not optimized for error handling. Pull requests are welcome. 29 | * There are a lot of optimization opportunities in fs.promises api that involves reducing the C++ to JS bridge communication. 30 | * Fast path for `--no-deprecation` [#90](https://github.com/nodejs/performance/issues/90) 31 | * @aduh95 said “I’m not sure it’s relevant to spend any time optimizing deprecated features”. Yagiz & Rafael agrees. 32 | * Removing from the agenda and closing upon consensus. 33 | * Performance of WHATWG ReadableStream.read() [#82](https://github.com/nodejs/performance/issues/82) 34 | * Debadree worked on the issue, but couldn’t find an optimization without any breaking changes. 35 | * MakeCallback is very slow [#24](https://github.com/nodejs/performance/issues/24) 36 | * No new updates. Removing it from the agenda. 37 | 38 | ## Q&A, Other 39 | 40 | * @uzlopak mentioned his improving hideStackFrames pull request. Asked for some feedback around the solution and/or document the existing solution. Ref: https://github.com/nodejs/node/pull/49990 41 | * Rafael recommended creating a benchmark using async_hooks since microbenchmarks might not show the real truth about it. 42 | * Yagiz needs some help on Windows in order to unblock a PR opened 3 weeks ago. Ref: https://github.com/nodejs/node/pull/49962 43 | * Rafael mentioned distributed benchmarking CI issue on Build repository https://github.com/nodejs/build/issues/3483 44 | * Yagiz: fs benchmarks take 10+ hours - https://github.com/nodejs/node/issues/49689 45 | 46 | ## Upcoming Meetings 47 | 48 | * **Node.js Foundation Calendar**: https://nodejs.org/calendar 49 | 50 | Click `+GoogleCalendar` at the bottom right to add to your own Google calendar. 51 | --------------------------------------------------------------------------------