当前位置: 首页 > article >正文

前端面试拼图-实践经验

摘要:最近,看了下慕课2周刷完n道面试题,记录并添加部分可参考的文档,如下...

1. H5页面如何进行首屏优化?

        路由懒加载

        适用于SPA(不适用MPA)

        本质就是路由拆分,有限保证首页加载

        服务端渲染SSR

        传统的前后端分离(SPA)渲染页面的过程复杂

        SSR渲染页面过程简单,所以性能好

        如果是纯H5页面,SSR是性能优化的终极方案

        APP预取

        如果H5在APP WebView中展示,可使用APP预取

        用户访问列表页时,APP预加载页面首屏内容

        用户进入H5页面,直接从APP中获取内容,瞬间展示首屏

        分页

        针对列表页

        默认值展示第一页内容

        上划加载更多

        图片懒加载lazyLoad

        针对详情页

        默认只展示文本内容,然后触发图片懒加载

        注意:提前设置图片尺寸,尽量只重绘不重排

        Hybrid

        提前将HTML JS CSS下载到APP内部

        在APP webview中使用file://协议加载页面文件

        再用Ajax获取内容并展示(也可结合APP预 取)

        总结:服务端SSR是H5的终极优化方案(但成本也高)

        移动端H5要结合APP能力去优化

        严格来说,hybrid不是H5,但这里回答也没有问题

        扩展:SSR

        SSR(Server-Side Rendering,服务器端渲染)是一种将页面内容在服务器端生成并直接返回给客户端的技术。相比于传统的客户端渲染(CSR,Client-Side Rendering),SSR 在首次加载页面时可以直接呈现出完整的 HTML 内容,而不需要等待 JavaScript 文件下载和执行完成后再进行页面渲染,从而提高了首屏加载速度和搜索引擎优化(SEO)效果

        SSR是一门"古老"的技术,刚刚兴起Web1.0时,就是SSR技术:PHP ASP JSP等,Vue和React框架也分别有Nuxt.js(Vue)和Next.js(React)

2. 后端一次性返回10w条数据,你该如何渲染?

        后端返回10W条数据,本身技术方案设计不合理;

        JS可以处理10w条数据,但是渲染的DO会非常卡顿;

        自定义中间层

        自定义node.js中间层,获取并拆分这10W条数据

        前端对接node.js中间层(后端的问题优先考虑用后端的思维解决,中间件),而不是服务端

        成本比较高

        虚拟列表

        只渲染可视区域DOM

        其他区域不显示,只用<div>撑起高度

        随着浏览器滚动,创建和销毁DOM

        虚拟列表实现起来非常复杂(且效果不一定好,例如低配手机),可借用第三方lib,例如Vue-virtual-scroll-list、 React-virtualiszed

3. 前端常用的设计模式有哪些?并说明使用场景

        设计原则

        最重要的思想:开放封闭原则

        对扩展开放

        对修改封闭

        工厂模式

        用一个工厂那个函数,来创建实例,隐藏new

        如jQuery $函数,React 的createElement函数

class Foo{}
// 工厂模式
function factory(a, b, c) {
  // if else
  return new Foo()
}
const f = factory(1, 2, 3)

        单例模式

        全局唯一的实例(无法生成第二个)

        如Vuex Redux的store ;如全局唯一的dialog modal

未完待续...


http://www.kler.cn/a/273424.html

相关文章:

  • 2024年云手机推荐榜单:高性能云手机推荐
  • 钉钉向广告低头
  • MySQL45讲 第十四讲 count(*)这么慢,我该怎么办?
  • 时间序列预测(十八)——实现配置管理和扩展命令行参数解析器
  • LeetCode46. 全排列(2024秋季每日一题 57)
  • Linux操作系统 ------(3.文本编译器Vim)
  • 基础:TCP三次握手做了什么,为什么要握手?
  • 【DataWhale学习笔记-蝴蝶书共读】大语言模型背后
  • CTF题型 Http请求走私总结Burp靶场例题
  • EI Scopus检索 | 第二届大数据、物联网与云计算国际会议(ICBICC 2024) |
  • 苍穹外卖-day09:用户端历史订单模块(理解业务逻辑),商家端订单管理模块(理解业务逻辑),校验收货地址是否超出配送范围(相关API)
  • springboot280基于WEB的旅游推荐系统设计与实现
  • 环境变量和Bash内置命令
  • android 顺滑滑动嵌套布局
  • Mac玩《幻兽帕鲁》为什么打不开D3DMetal?d3d错误怎么办 d3dxl error
  • 基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类
  • mac清除dns缓存指令 mac清除缓存怎么清理
  • 复制word文档,合并word文档
  • 【vscode】vscode重命名变量后多了很多空白行
  • 计算地球圆盘负荷产生的位移
  • Ubuntu 搭建gitlab服务器,及使用repo管理
  • 利用textarea和white-space实现最简单的文章编辑器 支持缩进和换行
  • vue使用element-ui 实现自定义分页
  • TT-100K数据集,YOLO格式
  • MR混合现实情景实训教学系统在汽车检修课堂中的应用
  • 汽车电子零部件(8):T_Box