Avoid making same fetches multiple times in same page

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Firyo
    Senior Member
    • Jun 2022
    • 134

    Avoid making same fetches multiple times in same page

    Hi there,

    I'm currently trying to find ways to optimize the loading time of the most visited page of my CRM.
    This page is taking some time to load completely.

    After taking a look into the "Network" part of my chromium's web tools I noticed that a request is made MULTIPLE times for no particular reason.
    It appears that some of the custom views (for fields) used in the children (hasMany) of my page are doing a
    Code:
    getModelFactory.create
    with a
    Code:
    model.fetch()
    of the entity the user is in.

    It's not a problem to fetch the data like this but in the end this GET request is done at least 20 times (and it can be worse).

    To add some precisions :
    - The GET request is already did one time at the setup of the page. (It's the detail page of one of my custom entity).

    Is there a solution for this king of problem ?

    Firyo.
  • yuri
    Member
    • Mar 2014
    • 8451

    #2
    Hi Firyo,

    It's likely you need to revise your code so that it does not fetch. It's impossible to answer on your question as information you provided is not detail enough to understand.
    If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

    Comment

    • Firyo
      Senior Member
      • Jun 2022
      • 134

      #3
      Thanks for your answer yuri.

      Here is some detail (I'll hope this will help you and the other understanding what I'm talking about).

      First here is a schema explaining my relation.

      Click image for larger version  Name:	schema_espocrm.png Views:	0 Size:	12.1 KB ID:	94231

      My detail page (which I'm trying to optimize) of "Parent entity" displays all the "child entity" that are linked to it.

      In these "child entity" I have multiple fields that have a custom JS view.
      In these JS views there is a similar code like this.

      Code:
      Espo.define('myExtension:views/childEntity/fields/field', 'views/fields/link', function (Dep) {
      return Dep.extend({
      
      filtersData: [],
      
      setup: function () {
      Dep.prototype.setup.call(this);
      
      var that = this;
      var parentEntityId = this.model.get('parentEntityId');
      
      if(parentEntityId !== undefined && parentEntityId !== '') {
      
      that.wait(true);
      this.getModelFactory().create('ParentEntity', function (model) {
      model.id = parentEntityId;
      model.fetch().then(function () {
      
      that.filtersData['id'] = {
      type: 'in',
      value: model.get('fieldIds'),
      data: {
      type: 'anyOf',
      nameValue: model.get('fieldNames')
      }
      };
      
      that.wait(false);
      }.bind(this));
      });
      }
      
      },
      
      getSelectFilters: function () {
      Dep.prototype.getSelectFilters.call(this);
      return this.filtersData;
      }
      
      });
      });​
      Click image for larger version

Name:	image_2023-06-21_120644646.png
Views:	154
Size:	84.1 KB
ID:	94232

      Comment

      • yuri
        Member
        • Mar 2014
        • 8451

        #4
        You can create a new API endpoint that will fetch all records at once, and then pass specific record data to child views.
        If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

        Comment

        • Firyo
          Senior Member
          • Jun 2022
          • 134

          #5
          Originally posted by yuri
          You can create a new API endpoint that will fetch all records at once, and then pass specific record data to child views.
          Hmm, I'll check that. thanks anyway.

          Comment

          Working...