modera / backend-on-steroids-bundle
此包使优化基于MJR的后端加载速度变得更容易,最多可提高50%。
Requires
- php: >=5.6
- modera/mjr-integration-bundle: ~2.0|~3.0|~4.0
- sergeil/expander-bundle: ~1.0
Requires (Dev)
- modera/foundation-bundle: ~2.0|~3.0|~4.0
- phake/phake: ^2.0
- phpunit/phpunit: ^5.5
- symfony/symfony: ^2.8|^3.4|^4.0
README
此包使优化后端加载速度变得更容易,最多可提高50%,它通过几种方式实现
- 提供控制台命令,这些命令可以生成shell脚本,用于使用Sencha Cmd编译所有包的extjs类。使用这些脚本,您将无需学习如何使用和配置Sencha Cmd,这一切都会在幕后为您完成。 注意!生成的脚本依赖于Docker!
- 包含一个特殊的资源加载器,可以自动检测并包含MJR.js和一个从包的javascript extjs类编译的javascript文件(默认配置下命名为
bundles.js
)。 - 使用语义配置可以标记某些包及其javascript文件为非阻塞资源。这在有些包的资产被指定为非阻塞但实际上是非阻塞的情况下非常有用,并且您想要覆盖此行为,使它们异步加载。
安装
将此依赖项添加到您的composer.json文件中
"modera/backend-on-steroids-bundle": "~1.0"
更新您的AppKernel类,并在其中添加ModeraBackendOnSteroidsBundle声明
new Modera\BackendOnSteroidsBundle\ModeraBackendOnSteroidsBundle()
文档
安装包后,请使用modera:backend-on-steroids:generate-scripts
命令,一旦执行,它将为您生成四个shell脚本
steroids-setup.sh
- 此脚本将为您准备一个extjs工作空间,用于使用Sencha Cmd编译您的资产steroids-compile-bundles.sh
- 一旦您设置了steroids并已将extjs类复制到工作空间(使用modera:backend-on-steroids:copy-classes-to-workspace
执行此操作),您可以调用此命令,并将所有安装的extjs类一起编译,如果没有配置更改,结果将复制到web/backend-on-steroids/bundles.js
文件。steroids-compile-mjr.sh
- 为您编译MJR并将其放置在web/backend-on-steroids/MJR.js
中(如果没有修改语义配置)steroids-cleanup.sh
- 如果您不再需要extjs-workspace,则可以使用此脚本,它会删除为设置extjs-workspace而创建的所有开发人员文件(您的编译extjs类将不会被修改)
有关可用配置属性的完整列表,请参阅Modera\BackendOnSteroidsBundle\DependencyInjection\Configuration
。
为了使您的extjs类对modera:backend-on-steroids:copy-classes-to-workspace
可见,您需要向modera_backend_on_steroids.extjs_classes_paths
扩展点做出贡献或如果您不打算分发您的包,您可以使用modera_backend_on_steroids/compiler/path_patterns
配置属性。
典型的工作流程
- $
app/console modera:backend-on-steroids:generate-scripts
- 使生成的脚本可执行(当执行
modera:backend-on-steroids:generate-scripts
时,将打印所需的shell命令,您可以使用它) - $
./steroids-setup.sh
- $
app/console modera:backend-on-steroids:copy-classes-to-workspace
- $
./steroids-compile-bundles.sh
- $
./steroids-compile-mjr.sh
完成这些步骤后,假设您没有更改此包的语义配置compiler/path_patterns
属性),当您刷新后端时,应看到MJR.js和bundles.js已通过"script"标签自动包含。您只需要在每次基础安装或使用steroids-cleanup.sh
后执行一次steroids-setup.sh
。
故障排除
Sencha Cmd找不到类
如果在执行 ./steroids-compile-bundles.sh
时,您收到类似以下这样的 BUILD FAILED 信息
[ERR] BUILD FAILED
[ERR] com.sencha.exceptions.ExBuild: Failed to find any files for /var/www/packages/bundles/src/MyCompany/mypackage/CustomerHistory.js::ClassRequire::MyCompany.mypackage.CustomerHistoryActivity
[ERR]
[ERR] Total time: 21 seconds
[ERR] The following error occurred while executing this line:
/var/www/packages/bundles/.sencha/package/build-impl.xml:137: The following error occurred while executing this line:
/var/www/packages/bundles/.sencha/package/js-impl.xml:32: com.sencha.exceptions.ExBuild: Failed to find any files for
/var/www/packages/bundles/src/MyCompany/mypackage/CustomerHistory.js::ClassRequire::MyCompany.mypackage.CustomerHistoryActivity
这意味着您的文件(在这个例子中位于 /var/www/packages/bundles/src/MyCompany/mypackage/CustomerHistory.js
),正在引用一个类 MyCompany.mypackage.CustomerHistoryActivity
,而Sencha Cmd编译器找不到它。这通常意味着以下两种情况之一
modera:backend-on-steroids:copy-classes-to-workspace
命令没有找到MyCompany.mypackage.CustomerHistoryActivity
所在的目录,因此无法正确准备steroids的工作空间。要解决这个问题,您需要找到CustomerHistoryActivity.js文件所在的位置,并更新modera_backend_on_steroids/path_patterns
配置属性。有关更多详细信息,请参阅\Modera\BackendOnSteroidsBundle\DependencyInjection\Configuration
。一旦配置属性更新,请务必再次运行modera:backend-on-steroids:copy-classes-to-workspace
。如果您检查了项目,但仍然在任何地方找不到CustomerHistoryActivity.js
文件,那么您可能遇到的是第二种情况CustomerHistoryActivity
类已被删除,但开发者忘记更新CustomerHistory
类以从其依赖中删除CustomerHistoryActivity
。在这种情况下,您需要执行的操作是打开CustomerHistory.js
文件,找到其requires
或类似依赖声明块,并从那里删除CustomerHistoryActivity
。完成后,您可以运行modera:backend-on-steroids:copy-classes-to-workspace
和然后./steroids-compile-bundles.sh
。
许可
此捆绑包受MIT许可证的约束。请参阅捆绑包中的完整许可证:资源/meta/LICENSE