mirror of
https://github.com/gristlabs/grist-core.git
synced 2025-06-09 20:23:59 +00:00
Summary: Adds `@functools.lru_cache` to `ts_to_dt` and `ts_to_date` which are used in `_make_rich_value` in Date/DateTime columns, i.e. every time such a column is accessed in a formula. I noticed that these operations are surprisingly expensive while working on https://phab.getgrist.com/D4075. This is just an easy way to potentially significantly speed up certain docs and formulas. Test Plan: Put this code in an engine test case: ``` def test_(self): self.apply_user_action(["AddTable", "Table1", [ {"id": "A", "type": "DateTime:America/Chicago"}, ]]) self.add_records("Table1", ["A"], [ [i] for i in range(1000) ]) formula = "for _ in range(1000): $A\nreturn 1" import time start = time.time() self.add_column( "Table1", formula, type="Any", isFormula=True, formula=formula ) elapsed = time.time() - start print(f"Took {elapsed:.2f} for formula {formula}") ``` The time goes from ~10s to ~1s. Similar tests showed no noticeable slowdown when caching had no effect. Reviewers: dsagal Reviewed By: dsagal Differential Revision: https://phab.getgrist.com/D4099 |
||
---|---|---|
.. | ||
functions | ||
imports | ||
acl_formula.py | ||
acl.py | ||
action_obj.py | ||
action_summary.py | ||
actions.py | ||
attribute_recorder.py | ||
autocomplete_context.py | ||
codebuilder.py | ||
column.py | ||
csv_patch.py | ||
depend.py | ||
docactions.py | ||
docmodel.py | ||
engine.py | ||
fake_std_streams.py | ||
formula_prompt.py | ||
friendly_errors.py | ||
gencode.py | ||
grist.py | ||
identifiers.py | ||
import_actions.py | ||
lookup.py | ||
main.py | ||
match_counter.py | ||
migrations.py | ||
moment.py | ||
objtypes.py | ||
parse_data.py | ||
records.py | ||
relabeling.py | ||
relation.py | ||
runtests.py | ||
sandbox.py | ||
schema.py | ||
sort_specs.py | ||
summary.py | ||
table_data_set.py | ||
table.py | ||
test_acl_formula.py | ||
test_acl_renames.py | ||
test_actions.py | ||
test_codebuilder.py | ||
test_column_actions.py | ||
test_completion.py | ||
test_default_formulas.py | ||
test_depend.py | ||
test_derived.py | ||
test_display_cols.py | ||
test_docmodel.py | ||
test_engine.py | ||
test_find_col.py | ||
test_formula_error.py | ||
test_formula_prompt.py | ||
test_formula_undo.py | ||
test_functions.py | ||
test_gencode.py | ||
test_import_actions.py | ||
test_lookups.py | ||
test_match_counter.py | ||
test_migrations.py | ||
test_moment.py | ||
test_record_func.py | ||
test_recordlist.py | ||
test_reflist_rel.py | ||
test_relabeling.py | ||
test_renames2.py | ||
test_renames.py | ||
test_replay.py | ||
test_requests.py | ||
test_rules_grid.py | ||
test_rules.py | ||
test_side_effects.py | ||
test_sort_spec.py | ||
test_summary2.py | ||
test_summary_choicelist.py | ||
test_summary_undo.py | ||
test_summary.py | ||
test_table_actions.py | ||
test_table_data_set.py | ||
test_temp_rowids.py | ||
test_textbuilder.py | ||
test_treeview.py | ||
test_trigger_formulas.py | ||
test_twowaymap.py | ||
test_types.py | ||
test_undo.py | ||
test_urllib_patch.py | ||
test_user.py | ||
test_useractions.py | ||
testsamples.py | ||
testscript.json | ||
testutil.py | ||
textbuilder.py | ||
treeview.py | ||
twowaymap.py | ||
tzdata.data | ||
urllib_patch.py | ||
user.py | ||
useractions.py | ||
usercode.py | ||
usertypes.py | ||
xmlrunner.py |