【问题标题】:How to reduce number of requests dojo makes to the server?如何减少dojo向服务器发出的请求数量?
【发布时间】:2016-04-27 14:32:15
【问题描述】:

我正在使用 Domino 9.0.1 和 Fix Pack 5,它为我提供了 dojo 1.9.7。在我的 xsp 属性中,我将其设置为使用运行时优化的 JavaScript 和 CSS 资源。我期待这个设置在加载 XPage 时大大减少对服务器的请求数量,但它只产生了很小的影响。

罪魁祸首是 dojo.js - 它向服务器发出了超过 100 个针对各种 .js 和资源文件的单独请求。我假设这些来自我正在使用的各种控件,这些控件利用了 dojo。有没有办法将这些 dojo 请求合并为一个请求?

更新:他们几乎都来自/xsp/.ibmxspres/dojoroot-1.9.7/dijit/ 和/xsp/.ibmxspres/dojoroot-1.9.7/dojo/,还有一些来自/xsp/.ibmxspres/.extlib/dijit/

更新: 我的 XSP 设置:

xsp.ajax.renderwholetree=false
xsp.error.page.default=true
xsp.persistence.mode=fileex
xsp.resources.aggregate=true
xsp.user.timezone=true
xsp.html.doctype=html
xsp.theme.mobile.pagePrefix=m_
xsp.application.forcefullrefresh=true
xsp.library.depends=com.ibm.xsp.extlib.library
xsp.min.version=9.0.1
xsp.theme=vi.theme

更新: 我正在使用一个动态内容控件,它会自动加载一个自定义控件,其中包含许多使用 dojo 的控件。这导致 XPages 引擎生成一堆脚本标记,其中包含 dojo.require() 调用。这些调用导致 dojo.js 发出超过 100 个 xhr 请求。

【问题讨论】:

  • 是否有很多文件来自“nls”目录,例如http://myserver/xsp/.ibmxspres/dojoroot-1.9.7/ibm/xsp/widget/layout/nls/xspClientDojo.js?
  • @BrianGleeson-IBM 他们几乎都来自 /xsp/.ibmxspres/dojoroot-1.9.7-u/dijit/ 和 /xsp/.ibmxspres/dojoroot-1.9.7-u/ dojo/ 还有一些来自 /xsp/.ibmxspres/.extlib/dijit/

标签: xpages


【解决方案1】:

我的解决方案是使用资源标签在我的主题中的自定义控件中包含 XPages 引擎自动生成的 dojo.require() 调用:

<resources>
        <dojoModule target="xsp" name="dojo.parser"></dojoModule>
        <dojoModule target="xsp" name="extlib.dijit.DynamicContent"></dojoModule>
        <dojoModule target="xsp" name="dextlib.dojo.helper.IFrameAdjuster"></dojoModule>
        <dojoModule target="xsp" name="dijit.Toolbar"></dojoModule>
        <dojoModule target="xsp" name="dijit.form.Button"></dojoModule>
        <dojoModule target="xsp" name="extlib.dijit.Menu"></dojoModule>
        <dojoModule target="xsp" name="extlib.dijit.Tabs"></dojoModule>
        <dojoModule target="xsp" name="extlib.dijit.TabPane"></dojoModule>
        <dojoModule target="xsp" name="dijit.form.DateTextBox"></dojoModule>
        <dojoModule target="xsp" name="dijit.form.TimeTextBox"></dojoModule>
    </resources>

这会导致 dojo js 文件被聚合。执行此操作后,请求数从 134 变为 28。

【讨论】:

【解决方案2】:

这些路径中的-u 表示它正在加载未压缩的dojo 文件资源。这表明未启用聚合。

如果您查看应用程序 xsp 属性的源窗格,它应该具有启用资源聚合器的属性xsp.resources.aggregate=true。如果它在那里,你应该删除它:xsp.client.resources.uncompressed=true。它们对应于下面突出显示的复选框:

【讨论】:

  • 在获得您要求的路径之前,我已关闭聚合。它现在重新打开(与您的屏幕截图中的设置相同)并且“-u”从路径中消失了,但是从 dojo.js 发起的 xhr 请求的数量是相同的。
  • 我想没有像这样列出的资源? xsp/.ibmxspres/.mini/css-1.9.7-u/@B3r&amp;@B3o&amp;@B3p&amp;@B3s.css, xsp/.ibmxspres/.mini/dojo-1.9.7-u/.en-gb/@E0&amp;@Ee&amp;@Ei
  • 我有/xsp/.ibmxspres/.mini/css/@B3r&amp;@B3o&amp;@B3m&amp;@B3p&amp;@B3s&amp;2Dbclaro.css.css 和/xsp/.ibmxspres/.mini/dojo/.en-us/@Ed&amp;@Eba.js。我没有看到任何带有dojo.rpc.JsonService 的内容。
  • 是的,可以忽略 jsonService 之一,不相关。因此,它正在为您聚合 dojo 文件。您能否列出一些其他文件作为未聚合的示例(现在您已重新打开聚合器)?
  • dojo.js发起的第一个xhr请求来自:/spa.xsp?$$ajaxid=view%3A_id1%3AdynamicContent1&amp;content=Incident&amp;action=editDocument&amp;documentId=58AA&amp;$$viewid=!70tyattrwxy1qrwg64ez6dj2d!。检查此请求的源代码会发现 12 个带有 dojo.require('moduleName') 的脚本标签。似乎这可能是原因,因为在此请求之后,大约有。对 js 文件的 100 个 xhr 请求,例如 Toolbar.js、_Wdiget.js、registry.js、_WdigetBase.js、...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多