refactor: optimize POS startup performance by disabling default partner loading and clearing the customer list view

This commit is contained in:
Suherdy Yacob 2026-06-17 17:51:50 +07:00
parent 815fba780b
commit 7ca603ecce
2 changed files with 4 additions and 22 deletions

View File

@ -21,18 +21,8 @@ class ResPartner(models.Model):
@api.model @api.model
def _load_pos_data_domain(self, data, config): def _load_pos_data_domain(self, data, config):
domain = super()._load_pos_data_domain(data, config) # Override to load zero partners on startup, preventing caching of customer data on session start
# Limit initial load of extra loyalty members to 30 to ensure fast POS startup (1-2 seconds) return [('id', '=', False)]
loyalty_members = self.search(
[
('is_company', '=', False),
('loyalty_card_ids.active', '=', True),
('loyalty_card_ids.program_id.active', '=', True),
],
limit=30,
order='write_date desc'
)
return ['|'] + domain + [('id', 'in', loyalty_members.ids)]
@api.model @api.model
def _load_pos_data_fields(self, config): def _load_pos_data_fields(self, config):

View File

@ -70,16 +70,8 @@ patch(PartnerList.prototype, {
let computedResult; let computedResult;
if (!searchWord) { if (!searchWord) {
// When query is empty, slice and sort following standard POS behavior // When query is empty, keep list blank by default except for the currently selected customer (if any)
computedResult = filteredPartners computedResult = filteredPartners.filter((p) => this.props.partner?.id === p.id);
.slice(0, 1000)
.toSorted((a, b) =>
this.props.partner?.id === a.id
? -1
: this.props.partner?.id === b.id
? 1
: (a.name || "").localeCompare(b.name || "")
);
} else { } else {
// When query is present, optimize search filtering // When query is present, optimize search filtering
const exactMatches = filteredPartners.filter((partner) => partner.exactMatch(searchWord)); const exactMatches = filteredPartners.filter((partner) => partner.exactMatch(searchWord));