1

我正在使用轻风从 MVC 4 应用程序中的远程 SQL Server 数据库加载一些数据。该数据库有大约 40 个实体。使用微风加载元数据需要很多时间:大约在 14 秒到 35 秒之间,尽管大小不是那么大:~ 600 kb。

加载元数据后,实体的获取速度要快得多。例如,一个 2.5 Mb 的实体在 2.5 秒内被加载。

https://www.dropbox.com/s/n8eqv5ezqr1qqlp/loading.png

我的问题是:

这种加载速度这么慢有什么原因吗?有什么方法可以减少加载时间?

4

2 回答 2

2

一旦我开始,我很少向服务器询问元数据。我从 EntityManager 的元数据存储中快速导出元数据,并将其作为全局变量转储到 JavaScript 文件中。我将它与我的 index.html 中的其他脚本一起包含在内。我在启动时将此 var 加载到经理的 metadateStore 中。

随着时间的推移,我变得越来越复杂,在服务器启动时自动重新生成它,将其序列化并存储在浏览器本地存储中,等等。一旦你意识到元数据只是一个 JS 对象,你就掌握了无尽的关键。聪明。

于 2013-08-30T02:46:23.150 回答
1

您可以通过将元数据嵌入到您的脚本中并按照@Ward 的建议手动提供 Breeze,从而消除从服务器单独的网络调用中加载元数据的需要。

以下是方法(我在下面使用 TypeScript):

import { DataService, EntityManager, MetadataStore, NamingConvention } from "breeze-client";

        // Your metadata object
        const metadata: any = Metadata.value;

        // define the Breeze `DataService` for this app
        const dataService: DataService = new DataService({
            serviceName: "http://localhost:63000",
            hasServerMetadata: false  // don't ask the server for metadata
        });

        // create the metadataStore 
        const metadataStore: MetadataStore = new MetadataStore({
            namingConvention: NamingConvention.camelCase // if you use this convention
        });

        // initialize it from the application's metadata variable
        metadataStore.importMetadata(metadata);

        const entityManagerConfig: EntityManagerOptions = {
            dataService: dataService,
            metadataStore: metadataStore
        };

        this.entityManager = new EntityManager(entityManagerConfig);

现在您有一个EntityManager使用元数据初始化的实例并准备好执行查询。

有关更多信息,请参阅官方文档

于 2018-02-23T21:15:56.267 回答