Qooxdoo 应用程序的构建大小优化
Qooxdoo application's build size optimisation
我想对 qooxdoo 生成的文件进行一些大小优化。 800Ko相当大...参考,它是基于桌面方法的。
我正在使用此配置:
"OPTIMIZE" : ["basecalls", "comments", "privates", "strings", "variables", "variants", "whitespace"]
没有成功...
有什么想法吗?
客户端优化
这是简单的方法。在您的网络服务器中设置 gzip 压缩。它将使您的构建大小约为 200-300 kB。您甚至可以预压缩构建并直接提供 app.js.gz
。
然后设置您的网络服务器缓存。 On way是配置合理的缓存过期时间,例如一周或一个月。对于更积极的缓存,过期设置为永远(年)并且您的构建 URL 看起来像 /static/app.js?v=123
。您可以使用简单的递增数字、VCS 修订版或文件哈希。
部分构建
更难但更灵活的方法是use parts并将其与上述客户端优化相结合。通过这种方式,您可以按照按需加载其组件的方式构建您的应用程序,而无需预先加载所有内容。然而,这需要更改您的应用程序,使其更加模块化和更少耦合,但这通常是一件好事。
在您的 config.json
中,您需要定义部件,通常对应于不同功能的应用程序组件。我通常扩展 common
工作是这样的:
"common" :
{
"packages" :
{
"sizes" :
{
"min-package" : 64,
"min-package-unshared" : 16
},
"additional-merge-constraints" : true,
"parts" :
{
"boot" :
{
"include" : ["${QXTHEME}", "${APPLICATION}.Application"]
},
"functionality1" :
{
"include" : ["${APPLICATION}.controller.Functionality1"]
},
"functionality2" :
{
"include" : ["${APPLICATION}.controller.Functionality2"]
},
...
}
}
}
此处的启动部分包含启动应用程序所需的最少 Qooxdoo 依赖项。请注意,您的引导部分不太可能小于 500 kB(未压缩)。
然后当您想使用某些功能时,您可以这样做:
qx.io.PartLoader.require(['functionality1'], function()
{
new (qx.Class.getByName('app.controller.Functionality1')).doSomething();
}, this);
请注意,零件加载器会为您解决依赖关系,因为零件 functionality1
可能有其依赖关系。事实上,使用上面定义的 3 个部分进行部分构建可能会导致结果文件少于或多于 3 个。生成器使用复杂的依赖关系管理,因此如果它有利于加载性能,它可以拆分和折叠部分。
您使用的优化配置是默认配置。因此,当您 运行 ./generate.py build
时,您应该已经获得了优化的构建。查看 build/script/{myNamespace}.js
。脚本的第一部分(可以说是管理或加载代码)未优化,但框架代码和您的应用程序代码已优化(最后一行长行,已缩小等)。
手册有更多细节:
我想对 qooxdoo 生成的文件进行一些大小优化。 800Ko相当大...参考,它是基于桌面方法的。
我正在使用此配置:
"OPTIMIZE" : ["basecalls", "comments", "privates", "strings", "variables", "variants", "whitespace"]
没有成功...
有什么想法吗?
客户端优化
这是简单的方法。在您的网络服务器中设置 gzip 压缩。它将使您的构建大小约为 200-300 kB。您甚至可以预压缩构建并直接提供 app.js.gz
。
然后设置您的网络服务器缓存。 On way是配置合理的缓存过期时间,例如一周或一个月。对于更积极的缓存,过期设置为永远(年)并且您的构建 URL 看起来像 /static/app.js?v=123
。您可以使用简单的递增数字、VCS 修订版或文件哈希。
部分构建
更难但更灵活的方法是use parts并将其与上述客户端优化相结合。通过这种方式,您可以按照按需加载其组件的方式构建您的应用程序,而无需预先加载所有内容。然而,这需要更改您的应用程序,使其更加模块化和更少耦合,但这通常是一件好事。
在您的 config.json
中,您需要定义部件,通常对应于不同功能的应用程序组件。我通常扩展 common
工作是这样的:
"common" :
{
"packages" :
{
"sizes" :
{
"min-package" : 64,
"min-package-unshared" : 16
},
"additional-merge-constraints" : true,
"parts" :
{
"boot" :
{
"include" : ["${QXTHEME}", "${APPLICATION}.Application"]
},
"functionality1" :
{
"include" : ["${APPLICATION}.controller.Functionality1"]
},
"functionality2" :
{
"include" : ["${APPLICATION}.controller.Functionality2"]
},
...
}
}
}
此处的启动部分包含启动应用程序所需的最少 Qooxdoo 依赖项。请注意,您的引导部分不太可能小于 500 kB(未压缩)。
然后当您想使用某些功能时,您可以这样做:
qx.io.PartLoader.require(['functionality1'], function()
{
new (qx.Class.getByName('app.controller.Functionality1')).doSomething();
}, this);
请注意,零件加载器会为您解决依赖关系,因为零件 functionality1
可能有其依赖关系。事实上,使用上面定义的 3 个部分进行部分构建可能会导致结果文件少于或多于 3 个。生成器使用复杂的依赖关系管理,因此如果它有利于加载性能,它可以拆分和折叠部分。
您使用的优化配置是默认配置。因此,当您 运行 ./generate.py build
时,您应该已经获得了优化的构建。查看 build/script/{myNamespace}.js
。脚本的第一部分(可以说是管理或加载代码)未优化,但框架代码和您的应用程序代码已优化(最后一行长行,已缩小等)。
手册有更多细节: