javascript-sdk
javascript-sdk copied to clipboard
sending SDK to createInstance() in Server-side context causes memory leaks
Is there an existing issue for this?
- [x] I have searched the existing issues
SDK Version
4.9.2
Current Behavior
When passing the SDK key into createInstance we saw memory leaks happening. In the react-sdk it's advised not to pass the SDK key in, and I think that the javascript-sdk documentation should be updated to provide a similar warning for the section in node.js.
Current documentation: https://github.com/optimizely/javascript-sdk?tab=readme-ov-file#use-the-javascript-sdk-node
Expected Behavior
Expected documentation is to be a-la react-sdk: https://github.com/optimizely/react-sdk?tab=readme-ov-file#server-side-rendering
Steps To Reproduce
- In a server environment, pass SDK instead of datafile into createInstance(), deploy
- Use k6 or some other way to pass large traffic to the deployed environment
- Observe containers running out of memory and restarting
SDK Type
Browser
Node Version
16.10.0
Browsers impacted
n/a
Link
No response
Logs
No response
Severity
Minor issue
Workaround/Solution
Pass dataFile instead of SDK into createInstance()
Recent Change
Not certain.
Conflicts
Not likely, although we are on next 12.
@dbridenbeck , yes, for server side rendering, Javascript sdk should have similar restrictions as react sdk. We will look into this a bit further and update this issue accordingly.
We released version v5.3.0. Can you review this version in an SSR test environment?
I can confirm that this still happens on v5.3.4.
Still happening.
I was able to reduce the memory utilization significantly by implementing a wrapper around Optimizely SDK to ensure that only one instance was created on the start of my node server and remains a singleton until the server is shutdown.
We have added explanation in our readme and official docs that each sdk instance needs to be closed using the .close() method, otherwise memory leaks can happen. Also, we have released v6 with a new disposable option to createInstance, which will come in handy in SSR scenarios.
https://github.com/optimizely/javascript-sdk?tab=readme-ov-file#closing-the-sdk-instance
closing this issue.