-
-
Notifications
You must be signed in to change notification settings - Fork 4.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
perf(escapeAllSwigTags): reducing GC overhead #5620
base: master
Are you sure you want to change the base?
Conversation
How to testgit clone -b perf/mem https://github.com/D-Sketon/hexo.git
cd hexo
npm install
npm test |
Pull Request Test Coverage Report for Build 12972482668Details
💛 - Coveralls |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe that the root cause of the issue is that string concatenation doesn't copy strings; instead, it points to the existing strings using pointers. This is good for performance, so we should retain this behavior.
On the other hand, the concatenated string holds the reference of the old string, preventing the old string from being released.
Instead of manually creating a StringBuilder
, you can try replacing return output
with return output.replace('#'.repeat(output.length + 1), '')
to see if it reduces GC pressure.
See also: https://romgrk.com/posts/optimizing-javascript#8-use-strings-carefully
I might have figured out why there's a memory difference. Although Assuming each post has 5,000 characters and there are 4,000 posts, On the other hand, using |
@SukkaW Using |
What does it do?
A large amount of string concatenation can result in numerous consString objects, which cannot be cleared during Scavenge. This leads to old generation expansion.
12x many-posts
![{7542781E-F3A2-469E-8F24-D23D2BD2F2E7}](https://private-user-images.githubusercontent.com/49871906/404674509-e6bd5fcc-2369-42c3-ab76-65d053301b8c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ1MDktZTZiZDVmY2MtMjM2OS00MmMzLWFiNzYtNjVkMDUzMzAxYjhjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUxYTc2YjRiNzJhZmVlMjQyYzU3OTM0NDQzNTlmODVhN2FiOGRkZDczMjc1NGFhODE1MWY0YmMwZWVlNWMzMzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.zr2Zuj16ztutn5u9FiMax7heSYGcvOk7_5_a3Anue-M)
![{405183C1-BE25-4F12-AB74-3F6AFD5EE625}](https://private-user-images.githubusercontent.com/49871906/404674493-47ac4a57-5120-4eb9-a44c-04455a878721.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ0OTMtNDdhYzRhNTctNTEyMC00ZWI5LWE0NGMtMDQ0NTVhODc4NzIxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk4M2Y0NDcxOTYwNTgzMjQ5OTA4NTkxYjg3NzZkZTdlNzEyMzVmY2M1YTBkOWJiYTllM2QyZjE2ODVjYWFkMzAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ECWWsP4ogYJrYNmPvkgHW_nMIl6np_5ce8-HHdPPJIs)
before PR
after PR
12x many-posts concurrency=20
![{078D8B04-6C65-4DC3-824B-8310CFD81762}](https://private-user-images.githubusercontent.com/49871906/404674615-41b9f4fa-586b-40fb-b271-490bf3c91c4e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ2MTUtNDFiOWY0ZmEtNTg2Yi00MGZiLWIyNzEtNDkwYmYzYzkxYzRlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJlYjBlYmEzZmQzNjM2NzhiNDY0ZjMwM2M5ZjBiMDc1YzE2ZTFiMTljY2NkYTA4MDY4OGFjM2I2M2ZhZmI5ZTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.ypnzEZx38z6ydRnVg6WFwTkzvqdfcxxKnZtGrcx1Eis)
![{7CCECB0D-DD2C-4BA3-807D-6C52B52EDB0C}](https://private-user-images.githubusercontent.com/49871906/404674629-114e1603-48cc-42cc-b12d-c7b7ce0f4bac.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ2MjktMTE0ZTE2MDMtNDhjYy00MmNjLWIxMmQtYzdiN2NlMGY0YmFjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ4NTgyZjFiN2M4MWNmZDA2MjEwZTE5YzI0YjM3YzViZmZmNGJjNWYzNjhjMzZjNDgzNWJiM2ZhN2RjMWMzMjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.-TT2-x664KHFtVyPeJf1MNm-WkEg5neTccIzBYxwks4)
before PR
after PR
4x many-posts concurrency=20
![{80FEC4BA-F199-46A7-9B7E-B81BF2ADD67B}](https://private-user-images.githubusercontent.com/49871906/404674733-19cc69b1-c3dc-4d24-97f3-ba48b10d5e29.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ3MzMtMTljYzY5YjEtYzNkYy00ZDI0LTk3ZjMtYmE0OGIxMGQ1ZTI5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFkNDJiZDgyNzY4NjdkYjlkNzc5MmM3NWE5YjhiNTRhOGVmNjcxOTZlNDJjNTg5MDM0NDRhMGYzZjI4NDVkZjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.vomIYvNIrYW_tyGQ8lrtz5H_4OtxONAs4r5s0N1JEgg)
before PR
after PR
![{28230638-86F6-4081-A1ED-5F6DC02A9506}](https://private-user-images.githubusercontent.com/49871906/404674743-c608ed8c-9de6-4349-aca9-2ed746cfc435.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ3NDMtYzYwOGVkOGMtOWRlNi00MzQ5LWFjYTktMmVkNzQ2Y2ZjNDM1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY2ZWMyMDY2ZmRjYzQ5MDVlYzJjYTZkNDZiZmU4M2EwOWZmMGEwMTg2ODk5OTIzNDlkOWFjMDkyODEzNjYwNWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.cCavFelaR5bLJsmn-9x2pDRTMgWJZtVV-_A4hXZDt-g)
1x many-posts concurrency=20
![{CBF42156-63A6-47BC-A8B2-6FA2C0BB5CCC}](https://private-user-images.githubusercontent.com/49871906/404674853-16c3d010-59f9-49ae-983e-f749d02cafb8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ4NTMtMTZjM2QwMTAtNTlmOS00OWFlLTk4M2UtZjc0OWQwMmNhZmI4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTcwMmZmYjI4Yjg2M2RmYTNhODBhMzA0Y2JmYTI5NjU1NzljODdiMjg2ZjFhOTVjODdiODY1MWJiYmMwMGJhNWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.erF-P8HgYOfJvqA-IHUxIupgLGrKnn4qoyRFeZY37q4)
![{13F8198A-B0EF-412A-93CE-F21BDA67EDE0}](https://private-user-images.githubusercontent.com/49871906/404674846-8fa92d2c-379c-48d9-a5ac-c9af8f28ccc2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMDM0MTUsIm5iZiI6MTczOTAwMzExNSwicGF0aCI6Ii80OTg3MTkwNi80MDQ2NzQ4NDYtOGZhOTJkMmMtMzc5Yy00OGQ5LWE1YWMtYzlhZjhmMjhjY2MyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDA4MjUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThjMWFhNjRhZDcxOWEyYWJmMDY0M2FhN2VlYjhlYjcwNWFkY2FmNjE1MmFiOWU5NTZkZWFmOGMzZGVkODE1MjgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IoOgiDQpWAm-NOED3acE8NDRwMvZGTYzRFhBTK5cCBE)
before PR
after PR
Screenshots
Pull request tasks