官术网_书友最值得收藏!

Loading classes on demand

When we develop large applications, performance is really important. We should only load the scripts we need; this means that if we have many modules in our application, we should separate them into packages so we would be able to load them inpidually.

Ext JS, since version 4, allows us to dynamically load classes and files when we need them, also we can configure dependencies in each class and the Ext library will load them for us.

You need to understand that using the loader is great for development, that way we can easily debug the code because the loader includes all the classes one by one. However, it's not recommended to load all the Ext classes in production environments. We should create packages of classes and then load them when needed, but not class by class.

In order to use the loader system, we need to follow some conventions when defining our class.

  • Define only one class per file.
  • The name of the class should match the name of the JavaScript file.
  • The namespace of the class should match the folder structure. For example, if we define a class MyApp.customers.controller.Main, we should have the Main.js file in the MyApp/customers/controller path.

Enabling the loader

The loader system is enabled or disabled depending on the Ext file that we import to our HTML file. If we import the ext-all or ext-all-debug file inside the extjs/build folder, the loader is disabled because all the classes in the Ext library are loaded already. If we import the ext-all and ext-all-debug files inside the extjs folder, the loader is enabled because only the core classes in the Ext library are loaded.

If we need to enable the loader, we should do the following at the beginning of the JS file:

Ext.Loader.setConfig({
  enabled: true
});

The previous code will allow us to load the classes when we need them. Also there's a preprocessor that loads all the dependencies for the given class if they don't exist.

In order to start loading classes, we need to set up the paths where the classes are, and we can do that in two different ways. We can use the setConfig method to define a paths property as follows:

Ext.Loader.setConfig({
  enabled:true,
  paths:{
    MyApp:'appcode'
  }
});

The paths property receives an object containing the root namespace of our application and the folder where all the classes are located in this namespace. So in the previous code when we refer to Myapp, Ext JS will look inside the appcode/ folder. Remember that we can add as many paths or location references as needed.

Once we have enabled and configured the loader correctly, we can start loading our classes using the require method:

Ext.require([
   'MyApp.Constants',
  'MyApp.samples.demoClass'
]);

The require method creates a script tag behind the scenes. After all the required files are loaded, the onReady event is fired. Inside the callback, we can use all the loaded classes.

If we try to load the classes after the require call, we'll get an error because the class won't exist until it's downloaded and created. This is why we need to set the onReady callback and wait until everything is ready to be used.

In this case, open the loader_01.html file and check that the file has the correct paths (that script tags are correct) to the ext.js file instead of ext-all.js, and run the file in the browser. If you look at the Network traffic tab in the development tools, you will notice the files that were only loaded, which in fact are a few classes (only the classes that Ext JS really need to run the code). Also, the speed of execution of these classes was faster than the previous code samples when we were loading the complete ext-all.js file located in the build folder.

主站蜘蛛池模板: 桐乡市| 黄大仙区| 临泉县| 眉山市| 茶陵县| 富顺县| 阳谷县| 五原县| 河西区| 广州市| 天津市| 泰宁县| 安阳县| 延庆县| 苍梧县| 深州市| 钦州市| 洛阳市| 庆城县| 舒兰市| 永修县| 余庆县| 崇义县| 哈尔滨市| 泰宁县| 化州市| 阿荣旗| 商都县| 光泽县| 陇川县| 抚宁县| 永吉县| 西贡区| 铜山县| 德兴市| 河池市| 西充县| 镇康县| 屯门区| 长寿区| 岑巩县|