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-package-my-application-using-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. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4000' 因此不允许访问。响应具有 HTTP 状态代码 501。
我不是在发出请求,而是 arcgis js 库在发出此调用。我是否忘记了在构建我的 arcgis js 时应该包含 grunt 配置的库 API?
arcgis js 的 grunt 文件配置 API:
...
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 脚本的自定义版本。有关如何操作的详细信息,请访问他们的网站。
我知道它并没有完全回答你的问题。但是,希望它能有所帮助。
我的 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-package-my-application-using-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. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4000' 因此不允许访问。响应具有 HTTP 状态代码 501。
我不是在发出请求,而是 arcgis js 库在发出此调用。我是否忘记了在构建我的 arcgis js 时应该包含 grunt 配置的库 API?
arcgis js 的 grunt 文件配置 API:
...
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 脚本的自定义版本。有关如何操作的详细信息,请访问他们的网站。
我知道它并没有完全回答你的问题。但是,希望它能有所帮助。