Optimize Webpack to improve overall performance.

Changes include:
1) Remove underscore-string and sprintf-js packages as we were using only %s. Instead, added a function to do the same. Also changed gettext to behave like sprintf directly.
2) backgrid.sizeable.columns was not used anywhere, removed. @babel/polyfill is deprecated, replaced it with core-js.
3) Moved few css to make sure they get minified and bundled.
4) Added Flask-Compress to send static files as compressed gzip. This will reduce network traffic and improve initial load time for pgAdmin.
5) Split few JS files to make code reusable.
6) Lazy load few modules like leaflet, wkx is required only if geometry viewer is opened. snapsvg loaded only when explain plan is executed. This will improve sqleditor initial opening time.

Reviewed By: Khushboo Vashi
Fixes #4701
This commit is contained in:
Aditya Toshniwal
2019-10-10 12:05:28 +05:30
committed by Akshay Joshi
parent e5638b520d
commit f16498a8a7
97 changed files with 1896 additions and 1355 deletions

View File

@@ -8,16 +8,17 @@
//////////////////////////////////////////////////////////////
import gettext from 'sources/gettext';
import {Geometry} from 'wkx';
import {Buffer} from 'buffer';
import L from 'leaflet';
import $ from 'jquery';
var L = null;
var Geometry = null;
let GeometryViewer = {
panel_closed: true,
render_geometries: function (handler, items, columns, columnIndex) {
go_for_render: function(handler, items, columns, columnIndex) {
let self = this;
if (!self.map_component) {
self.map_component = initMapComponent();
}
@@ -53,10 +54,21 @@ let GeometryViewer = {
handler.gridView.geometry_viewer.focus();
self.map_component.clearMap();
let dataObj = parseData(items, columns, columnIndex);
let dataObj = parseData(items, columns, columnIndex, Geometry);
self.map_component.renderMap(dataObj);
},
render_geometries: function (handler, items, columns, columnIndex) {
let self = this;
require.ensure(['leaflet', 'wkx'], function(require) {
L = require('leaflet');
Geometry = require('wkx').Geometry;
self.go_for_render(handler, items, columns, columnIndex);
}, function(error){
throw(error);
}, 'geometry');
},
add_header_button: function (columnDefinition) {
columnDefinition.header = {
buttons: [
@@ -275,7 +287,7 @@ function initMapComponent() {
};
}
function parseData(items, columns, columnIndex) {
function parseData(items, columns, columnIndex, GeometryLib) {
const maxRenderByteLength = 20 * 1024 * 1024; //render geometry data up to 20MB
const maxRenderGeometries = 100000; // render geometries up to 100000
let field = columns[columnIndex].field;
@@ -304,7 +316,7 @@ function parseData(items, columns, columnIndex) {
try {
let value = item[field];
let buffer = Buffer.from(value, 'hex');
let geometry = Geometry.parse(buffer);
let geometry = GeometryLib.parse(buffer);
if (geometry.hasZ) {
geometries3D.push(geometry);
} else {