簡體   English   中英

RequireJS:onload發出多個http請求

[英]RequireJS: onload making multiple http requests

我的requireJS腳本發出了大約500個http請求,這一開始就將我的程序掛起。 我正在使用gulp和gulp-requirejs(優化程序),但是我不確定如何減少大多數來自Esri的http請求的數量(我使用的是ArcGIS JS 4.0 API)。 有人對我如何限制這一點有任何想法嗎?

我已經看過這個問題,但是我不確定如何在requirejs中實際實現此目標: https ://gis.stackexchange.com/questions/33182/does-the-arcgis-javascript-api-let-me-build- 使用dojo打包我的應用程序

配置代碼:

requirejs.config({
    paths: {
        "jquery": 'https://code.jquery.com/jquery-3.1.0.min',
        'moment/moment': 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment',
        "esri": 'http://js.arcgis.com/4.0/esri',
        "dojo": 'http://js.arcgis.com/4.0/dojo',
        "dojox": 'http://js.arcgis.com/4.0/dojox',
        "dijit": 'http://js.arcgis.com/4.0/dijit'
    },
    shim: {
        ...
        "map": {
            deps: [ 'jquery', 'esri', 'dojo']
        },

    }
});

在我的一個模塊中使用ArcGIS JS 4.0 API:

define('map',["jquery","esri/Color",
    "esri/geometry/Point",
    "esri/geometry/Polygon",
    "esri/symbols/SimpleFillSymbol",..],function(...){

});

更新:因此,在構建arcgis js api(使用grunt)之后,我將main.js(找到的dist文件夾)包含到我的項目中。 但是API的本地副本給了我錯誤:

XMLHttpRequest無法加載http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer?f=json 對預檢請求的響應未通過訪問控制檢查:請求的資源上不存在“ Access-Control-Allow-Origin”標頭。 因此,不允許訪問源' http:// localhost:4000 '。 響應的HTTP狀態碼為501。

我不是在發出請求,而是arcgis js庫正在發出此調用。 我在構建arcgis js API時會忘記應該包含grunt config的庫嗎?

arcgis js API的grunt文件配置:

...
include: [
            'requirejs/require',
            'esri/layers/FeatureLayer',
            'esri/layers/TileLayer',
            'esri/layers/support/LabelClass',
            'esri/layers/graphics/controllers/SnapshotController',
            'esri/portal/support/layersCreator',
            'esri/views/3d/layers/TiledLayerView3D',
            'esri/views/layers/GraphicsLayerView',
            'esri/views/3d/webgl-engine/lib/FloatingBoxLocalOriginFactory',
            'esri/views/3d/webgl-engine/lib/Layer',
            'esri/views/3d/webgl-engine/lib/MaterialCollection',
            'esri/views/3d/webgl-engine/lib/Octree',
            'esri/views/3d/webgl-engine/lib/TextTextureAtlas',
            'esri/views/MapView',
            'esri/views/2d/layers/GraphicsLayerView2D'
          ],
          exclude: [
            'dojo/domReady',
            'dojo/has',
            'dgrid',
            'dojo/i18n', // some methods not available with RequireJS
          ],
...

Esri API中的默認文件(init.js)包含require實現,並且具有大多數基本模塊緩存。 這樣做是為了減少初始加載時間。 但是,由於您沒有使用esri require(要加載的init.js文件),因此所有緩存的模塊都不可用。 因此,每個模塊都是通過http請求下載的。

您嘗試使用Bower構建ESRI腳本的自定義版本。 有關如何執行此操作的詳細信息,請訪問他們的網站。

我知道它不能完全回答您的問題。 但是,希望它會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM