[pgAdmin4][Patch]: Load module's JS files only when required

From: Dave Page <dpage(at)pgadmin(dot)org>
To: Surinder Kumar <surinder(dot)kumar(at)enterprisedb(dot)com>
Cc: pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: [pgAdmin4][Patch]: Load module's JS files only when required
Date: 2017-05-22 10:52:34
Message-ID: CA+OCxoz3Y7aR0JJ0mq-YnnZnztML-Hkv3Trt3hf74GvW0-0Urw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi

On Monday, May 22, 2017, Surinder Kumar <surinder(dot)kumar(at)enterprisedb(dot)com
<javascript:_e(%7B%7D,'cvml','surinder(dot)kumar(at)enterprisedb(dot)com');>> wrote:

> Hi
>
> As per pgAdmin4 design, template JS files can either be preloaded or load
> when a specific node expands (by adding for e.g.: when: 'server').
>
> The JS files of several modules found to be loaded when pgAdmin4 loads
> which results in increasing:
>
> - the number of http requests
> - latency(greater request time)
> - pgAdmin4 load time
>
> *Tested on Firefox:*
>
> Before applying patch
>
> - http requests - 143
> - Content size - 3.4 MB
> - Load time: 4.1s (onload: 524ms)
>
> After applying patch
>
> - http requests: 68
> - Content size: 2.1 MB
> - Load time: 2.84s (onload: 481ms)
>
> This is great work!

However (sorry!) - I'm planning on working on an alternative change on my
flight in a couple of hours. Joao has broken the Grunt code out of the
History tab patch for me to work with - the idea is something like:

- We continue to migrate all the JS out of templates and into static files
whereever possible, using the client-side translation.

- We then have a set of Grunt tasks that will collect all the static JS,
minimise it, and pack it into a single file to load at startup.

I'm currently thinking that non-debug/package builds will pre-pack
everything for installation. The aim is to have JS HTTP requests be down in
single figures to maximise loading time.

The are various issues to work through however; at least, how do we handle
debug builds, and how do we re-pack everything if a user installs a new
module (or updates something).

We'd also need to get rid of requirejs.

>
> Also, I found the http request for gravtar takes much time(depending on
> internet speed) to load which increases load time.
> https://secure.gravatar.com/avatar/d30aea269994f01256a99a8e7
> 154a328?s=100&d=retro&r=g
>
> Shouldn't the gravatar image be replaced with custom image ? I don't see
> its any use except displaying for user.
>

Maybe. Doesn't it load asynchronously though?

>
> *Patch changes:*
>
> 1) Load following modules JS when 'servers' node expands:
>
> - Roles
> - FileManager
> - Backup
> - Datagrid
> - Grant wizard
> - Import/Export, Maintenance & restore
> - Sqleditor
>
> 2) Load Debugger JS when database node expands
>
> 3) Load Flotr2 when render function is called in dashboard.js
>
> 4) Load BigNumber library when sorting is performed on Statistics tab in
> backgrid.pgadmin.js
>
> 5) Remove 'backgrid.select.all' from dependency list(user_management.js)
> as it had no use.
>
> After applying this patch, Menu items such "Query tool", "Grant wizard"
> don't appear in Tools menu.
> I have logged an RM2424 <https://redmine.postgresql.org/issues/2424> to
> track this.
>

OK. Lets hold fire on this for now though, until I can PoC the work above.

Of course, any thoughts or comments are welcome.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Surinder Kumar 2017-05-22 12:39:56 Re: [pgAdmin4][Patch]: Load module's JS files only when required
Previous Message Akshay Joshi 2017-05-22 09:28:09 Re: Declarative partitioning in pgAdmin4