-
Notifications
You must be signed in to change notification settings - Fork 4
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: lazily import our modules and external libraries #624
Conversation
🦙 MegaLinter status: ✅ SUCCESS
See detailed report in MegaLinter reports |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #624 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 62 62
Lines 4634 4748 +114
==========================================
+ Hits 4634 4748 +114 ☔ View full report in Codecov by Sentry. |
# Conflicts: # src/safeds/data/tabular/containers/_tagged_table.py # src/safeds/exceptions/__init__.py # src/safeds/ml/nn/__init__.py # src/safeds/ml/nn/_model.py
924df2c
to
99879f6
Compare
99879f6
to
509bc02
Compare
@Safe-DS/library For future additions, please move all imports of external libraries into the functions that need them, so they get evaluated lazily. It's hideous, but startup is much faster, as explained in the opening post. |
## [0.21.0](v0.20.0...v0.21.0) (2024-04-17) ### Features * add ARIMA model ([#577](#577)) ([8b9c7a9](8b9c7a9)), closes [#570](#570) * Add ImageList class ([#534](#534)) ([3cb74a2](3cb74a2)), closes [#528](#528) [#599](#599) [#600](#600) * more hash, sizeof and eq implementations ([#609](#609)) ([2bc0b0a](2bc0b0a)) ### Performance Improvements * Add special case to `Table.add_rows` to increase performance ([#608](#608)) ([ffb8304](ffb8304)), closes [#606](#606) * improve performance of model & forward layer ([#616](#616)) ([e856cd5](e856cd5)), closes [#610](#610) * lazily import our modules and external libraries ([#624](#624)) ([20fc313](20fc313)) * treat Tables specially when calling add_rows ([#606](#606)) ([e555b85](e555b85)), closes [#575](#575)
🎉 This PR is included in version 0.21.0 🎉 The release is available on:
Your semantic-release bot 📦🚀 |
Summary of Changes
We depend on several large libraries that take a while to load. Previously, importing
Table
would already import almost all of them, leading to horrendous startup times:➡️ 3.5068337 (seconds to import
Table
on main)Now, we lazily import our own modules in the
__init__.py
files, and we lazily import external libraries. The latter part is quite ugly, since each function must now contain their external imports at the start. There is no better solution, however, and the improvements are huge:➡️ 0.1683219 (seconds to import
Table
in this branch)We still have to pay the cost for an import once we first import a module, but at least this no longer has to happen fully upfront.