(完全免责声明:我是一名 Dojo 开发人员,这是我的非官方观点)。
所有主要库都可以在高负载情况下使用。有几件事情需要考虑:
初始加载
初始负载会影响您的响应时间:从请求网页到响应并处于工作模式。琐碎的事情是:
- 将多个 JavaScript 文件连接在一起(也适用于 CSS 文件)
- 最小化和/或压缩您的 JavaScript
我们的想法是少发送——对服务器有利,对客户端有利。
不那么琐碎的事情:
- 以这样的方式构建您的程序,以便在不加载所有模块的情况下运行
后者的示例:将您的模块划分为必要的(例如,核心逻辑)和非必要的(例如,帮助器:工具提示、提示、验证器、帮助工具、各种“渐进增强器”等)。这个想法是,经常有些事情对频繁用户来说并不重要,但对普通用户来说却很好⇒他们可以延迟。
我们可以先加载基本模块,然后异步加载其余模块。示例:如果用户想要编辑一个对象,我们需要先显示它,然后我们有几百毫秒的时间来加载其余部分:查找表、提示等。
显然,当您使用的框架支持异步加载模块时,它会有所帮助。 Dojo 内置了这个功能。
分发文件
每个人都知道,由于浏览器对同一站点的并行下载数量的限制,从不同域加载资源(图像、CSS、JavaScript)是有益的:
- 如果用户的线路有足够的带宽,我们可以并行下载更多 - 现在几乎总是这样
- 我们可以设置为服务静态文件而优化的 Web 服务器:巨大的磁盘缓存、小型工作人员、保持活动状态、异步服务等
- 我们可以删除在提供静态文件时不需要的所有不必要的功能:会话、cookie 等
JavaScript 应用程序中一个经常被忽视的优化是使用CDN:
- 您的网站可以从 CDN 的地理分布中受益(文件可以从最近/最快的服务器提供)
- 用户的缓存中可能有所需的文件,如果它们被其他应用程序使用了
- 中间/企业缓存增加了所需文件已被缓存的可能性
- 最后但并非最不重要的一点:这些是您不提供的文件 - 考虑一下
同样,Dojo 长期支持 CDN,并由 AOL CDN 和 Google CDN 公开分发。后者也携带了几乎所有流行的 JavaScript 工具包。显然,如果您觉得需要,您可以创建自己的 CDN 以及您自己的 CDN 和应用程序特定的 Dojo 构建——它很简单而且有据可查。
通信带宽
不同的工具包会有什么不同? XHR 就是 XHR。
您需要尽可能减少服务器上的负载。分析所有流量并考虑通过管道发送了多少静态/不可变内容。例如,通常很多 HTML 在多个页面中是冗余的:页眉、页脚、菜单等。您真的需要每次都发送所有这些吗?
一个明显的解决方案是从静态 HTML + 使用 JavaScript 的“渐进增强”转移到真正的“单页”JavaScript 应用程序。同样,这是一个经常被忽视但最有价值的优化。
虽然这个想法听起来很简单,但实际上它并不像看起来那么简单。一旦我们从单行程序转向应用程序,我们就会遇到大量问题,其中最大的问题是打包:您的组件是什么,工具包提供了哪些组件,以及如何打包和交付它们。
Dojo 提供了模块、通用类的良好 OOP、小部件(可选 HTML 和相关行为的组合)以及许多使用它们的工具。你可以:
- 按需加载模块,而不是在头部加载
- 异步加载模块
- 自动查找模块之间的所有依赖关系并创建一个“构建”——在简单的情况下一个文件,如果您的应用很大并且需要多个层,则可以创建更多文件
- 在进行“构建”时,它可以为您的小部件内联所有 HTML sn-ps、优化 CSS 以及缩小/压缩 JavaScript
- Dojo 可以在 HTML 中自动查找和实例化小部件,从而节省大量样板代码
- 还有更多
所有这些功能都有助于在客户端构建应用程序。 That's why I like Dojo.
显然有更多方法可以优化高负载网站,但根据我的实践,这些方法最适用于 JavaScript 框架。