以下是我学到并尝试过的一些事情:
1) 您是否有兴趣更改您的 SPA 应用程序?
不:
PageSpeed 服务可以为 SPA 做什么样的优化?您必须阅读文档。
您应该使用哪些 PageSpeed 过滤器?从默认值开始。对整个应用程序进行黑盒测试。然后开始调整设置。衡量性能增益,以便您了解优化的回报迅速递减。
是的:
查看适用于 Chrome的PageSpeed 扩展程序。遵循这些建议会有很大帮助。
您可以使用 grunt 或 gulp 之类的构建工具将应用程序的代码转换为优化的代码。这是一个很大的话题,但这里有一个使用 Gulp 的 AngularJS 示例:
// Make sources. Uglify, Concat, and add hash if necessary
// Determine output file. Only used if config.concat === true
var destJs = 'app' + (config.minify?'.min':'') + '.js';
var appJs = gulp.src(config.app.js)
.pipe(plugins.plumber())
.pipe(plugins.ngAnnotate())
.pipe(plugins.angularFilesort())
.pipe(plugins.if(config.minify, plugins.uglify()))
.pipe(plugins.if(config.concat, plugins.concat(destJs)))
.pipe(plugins.if(config.hash, plugins.hash()))
.pipe(gulp.dest(config.app.dest + '/js'))
这段代码:
- 列出 config.app.js 目录中的所有文件
- 用角度依赖性注释内容
- 按角度依赖对它们进行排序
- 缩小它们(如果已配置)
- 连接它们(如果已配置)
- 将文件大小哈希添加到文件名 (app-4223423.js) 以进行缓存清除(如果已配置)
- 将它们复制到一个文件夹中。
下面我用这段代码将它们注入到我的 index.html 中。查看 appJs 在上面定义和在下面使用的位置:
// Inject all these files into index.html
return gulp.src(config.app.index)
.pipe(plugins.plumber())
.pipe(plugins.inject(vendorJs, _.merge({name: 'vendor'}, config.app.injectOptions)))
.pipe(plugins.inject(vendorCss, _.merge({name: 'vendor'}, config.app.injectOptions)))
.pipe(plugins.inject(appJs, _.merge({name: 'app'}, config.app.injectOptions)))
.pipe(plugins.inject(appCss, _.merge({name: 'app'}, config.app.injectOptions)))
.pipe(plugins.inject(templates, _.merge({name: 'templates'}, config.app.injectOptions)))
.pipe(plugins.replace('REPLACE_NODE_ENV', config.NODE_ENV))
.pipe(gulp.dest(config.app.dest))
这使得可配置的构建脚本可以制作高性能的应用程序。PageSpeed 只抱怨我加载了多少 js,但是,这是使用 AngularJS 的一部分。
[在 PageSpeed 服务的情况下] AJAX 请求(对我的 web 服务)如何使用同源策略?
PageSpeed 服务不接受新用户。您的网络服务器有一个插件。所以它应该工作相同。否则,您可能需要启用CORS。
[在 PageSpeed 服务的情况下] 我的网络服务是否也应该在同一个谷歌的 pagespeed 服务器上运行?
我不知道 :-) 您必须查看服务说明。