优化网站性能,首屏优化
- 减少资源 js、css 文件载入
- 图片懒加载
- 使用 CDN 加速静态资源
- 提升页面渲染速度
- 将 CSS 样式写在头部样式表中,减少由 CSS 文件网络请求造成的渲染阻塞。
- 将 JavaScript 放到文档末尾,或使用 async 方式加载,避免 JS 执行阻塞渲染。
- 避免浏览器重排重绘。
- 服务器本身的速度优化
- 启用服务器 Gzip 压缩功能;
- 开启网站缓存,充分利用本地缓存。
webpack
- webpack是JavaScript应用程序的静态模块打包器,webpack处理应用程序时,把模块化开发时所创建的文件根据其依赖关系打包成一整份文件,提供了各种loader,可以处理各种非js类型的资源文件,一并构建打包为浏览器可运行的。还可以通过插件去处理一些额外的功能。
- entry output module chunk loader(css、stylr、less,babel、url、file、) plugin()
- 构建流程
- 初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数。
- 开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译。
- 确定入口:根据配置中的 entry 找出所有的入口文件。
- 编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理。
- 完成模块编译:在经过第 4 步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系。
- 输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会。
输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。
spa单页面
- 单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、JavaScript 和 CSS。一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转。取而代之的是利用 JavaScript 动态的变换HTML的内容,从而实现UI与用户的交互。由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验。得益于ajax,我们可以实现无跳转刷新,又多亏了浏览器的histroy机制,我们用hash的变化从而可以实现推动界面变化。从而模拟元素客户端的单页面切换效果。
优点:
• 用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;
• 基于上面一点,SPA 相对对服务器压力小;
• 前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;
缺点:
• 初次加载耗时多:为实现单页 Web 应用功能及显示效果,需要在加载页面的时候将 JavaScript、CSS 统一加载,部分页面按需加载;
• 因为没了一页一页的网页给搜索引擎的爬虫来爬,所以,在搜索引擎最佳化(SEO)的工作上,需要花费额外的功夫。
前端路由
hash 实现
- hash 是 URL 中 hash (#) 及后面的那部分,常用作锚点在页面内进行导航,改变 URL 中的 hash 部分不会引起页面刷新
- 通过 hashchange 事件监听 URL 的变化,改变 URL 的方式只有这几种:通过浏览器前进后退改变 URL、通过<a>标签改变 URL、通过window.location改变URL,这几种情况改变 URL 都会触发 hashchange 事件
history 实现 - history 提供了 pushState 和 replaceState 两个方法,这两个方法改变 URL 的 path 部分不会引起页面刷新
- history 提供类似 hashchange 事件的 popstate 事件,但 popstate 事件有些不同:通过浏览器前进后退改变 URL 时会触发 popstate 事件,通过pushState/replaceState或<a>标签改变 URL 不会触发 popstate 事件。好在我们可以拦截 pushState/replaceState的调用和<a>标签的点击事件来检测 URL 变化,所以监听 URL 变化可以实现,只是没有 hashchange 那么方便。