[英]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.