美文网首页
前端注意和vue注意

前端注意和vue注意

作者: Raral | 来源:发表于2021-09-08 10:56 被阅读0次

    spa单页面应用

    加载过程

    FP :首次渲染绘制
    FCP :首次内容绘制
    FMP :首次有效绘制

    === html
    ***静态资源
    <div id="app"></div> FP
    ===静态资源 css js
    ===解析js 生成对应的html
    <div id="app"> FCP
    <div class="head"></div>
    <div class="body"></div>
    </div>
    ===发送异步请求 ajax 0.5s
    === 数据和视图通信 显示最新状态的视图
    <div id="app"> FMP
    <div class="head">你好</div>
    <div class="body">学习</div>
    </div>

    1. 路由动态加载, 公共组件提取

    把代码分成独立的模块,按需加载组件
    咋样动态加载?

    1. 配置一个库 npm install --save-dev @babel/plugin-syntax-dynamic-import
    2. component :() => import('../components/' + name + '.vue');

    2.ssr 预渲染 同构

    ssr: =>服务端渲染
    同构渲染: => 一套代码多端使用(vue react nuxt)
    vue -> json -> vue-server-renderer -> html
    预渲染 -> 预先渲染 webpack Vue打包出来项目 -> 无头浏览器 -> 获取到预渲染的页面html内容 -> index.html

    ssr
    ->请求 -> node(vue项目)-> html ->客服端

    1. webpack entry 单页面 -> 多页面
      index.html vue.js vue-router.js
    1. 资源请求时间片的处理

    2. CDN

    3. quickLink -> 在浏览器空闲的时候 去解析预加载我可能要跳转的页面

    • prefetch preload preconnect

    • preload:控制浏览器何时加载 js ,不会阻塞onload事件,异步的,
      <link rel ="preload"> =>

    • prefetch:当浏览器空闲的时候才会预加载对应的
      <link rel="prefetch" href="/pic.png">

      DNS:域名解析系统 UTP/TCP 使用的UTP协议 ;当浏览器空闲时候会与预解析 ;移动端优化
      <link rel="dns-prefetch" href="www.baidu.como">
      预加载: 当浏览器空闲时候会预加载
      <link rel=""prerender" href="www.baidu.com">

    • preconnect: 发请求之前可以操作

      DNS TLS协议 TCP握手

    ?? 你做大项目选型, 用哪个? 为什么不用vue,对于vue比较大的项目情况下,容易出现内存泄漏的原因是什么?

    前端需要注意方面

    1. get/post请求传参长度有什么特点

    我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。这是一个错误的说法,实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明确这个概念,我们必须再次强调下面几点:

    HTTP 协议 未规定 GET 和POST的长度限制
    GET的最大长度显示是因为 浏览器和 web服务器限制了 URI的长度
    不同的浏览器和WEB服务器,限制的最大长度不一样
    要支持IE,则最大长度为2083byte,若只支持Chrome,则最大长度 8182byte

    2. 前端需要注意哪些seo

    1. 合理的 title、description、keywords:搜索对着三项的权重逐个减小,title 值强调重点即可,重要关键词出现不要超过 2 次,而且要靠前,不同页面 title 要有所不同;description 把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面 description 有所不同;keywords 列举出重要关键词即可
    2. 语义化的 HTML 代码,符合 W3C 规范:语义化代码让搜索引擎容易理解网页
    3. 重要内容 HTML 代码放在最前:搜索引擎抓取 HTML 顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取
    4. 重要内容不要用 js 输出:爬虫不会执行 js 获取内容
    5. 少用 iframe(搜索引擎不会抓取 iframe 中的内容)
    6. 非装饰性图片必须加 alt
    7. 提高网站速度(网站速度是搜索引擎排序的一个重要指标)

    3. 实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后 退时正确响应。给出你的技术实现方案?

    第一步,通过使用 pushState + ajax 实现浏览器无刷新前进后退,当一次 ajax 调用成功后我们将一 条 state 记录加入到 history 对象中。

    第二步,一条 state 记录包含了 url、title 和 content 属性,在 popstate 事件中可以 获取到这个 state 对象,我们可 以使用 content 来传递数据。第三步,我们通过对 window.onpopstate 事件监听来响应浏览器 的前进后退操作。

    使用 pushState 来实现有两个问题,一个是打开首页时没有记录,我们可以使用 replaceState 来将首页的记录替换,另一个问 题是当一个页面刷新的时候,仍然会向服务器端请求数据,因此如果请求的 url 需要后端的配 合将其重定向到一个页面

    参考:(http://blog.chenxu.me/post/detail?id=ed4f0732-897f-48e4-9d4f-821e82f17fad)

    4. 如何优化SPA应用的首屏加载速度慢的问题?

    • 将公用的JS库通过script标签外部引入,减小app.bundel的大小,让浏览器并行下载资源文件,提高下载速度;
    • 在配置 路由时,页面和组件使用懒加载的方式引入,进一步缩小 app.bundel 的体积,在调用某个组件时再加载对应的js文件;
    • root中插入loading 或者 骨架屏 prerender-spa-plugin,提升用户体验;
    • 如果在webview中的页面,可以进行页面预加载
    • 独立打包异步组件公共 Bundle,以提高复用性&缓存命中率
    • 静态文件本地缓存,有两种方式分别为HTTP缓存,设置Cache-Control,Last-Modified,Etag等响应头和Service Worker离线缓存
    • 配合 PWA 使用
    • SSR
    • root中插入loading 或者 骨架屏 prerender-spa-plugin
    • 使用 Tree Shaking 减少业务代码体积 更多参考:https://github.com/LuckyWinty/* fe-weekly-questions/issues/69

    5. 什么是堆?什么是栈?它们之间有什么区别和联系?

    堆和栈的概念存在于数据结构中和操作系统内存中。在数据结构中,栈中数据的存取方式为 先进后出。而堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。完全 二叉树是堆的一种实现方式。在操作系统中,内存被分为栈区和堆区。栈区内存由编译器自动分 配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。堆区内存一 般由程序员分配释放,若程序员不释放,程序结束时可能由垃圾回收机制回收。

    详细资料可以参考:《什么是堆?什么是栈?他们之间有什么区别和联系?》

    6. 如何封装一个 javascript 的类型判断函数?

    function getType(value) { 
      // 判断数据是 null 的情况 
      if (value === null) { 
          return value + ""; 
      }
      // 判断数据是引用类型的情况 
      if (typeof value === "object") { 
        let valueClass = Object.prototype.toString.call(value), 
        type = valueClass.split(" ")[1].split(""); 
        type.pop(); 
        return type.join("").toLowerCase();
      } else { 
        // 判断数据是基本数据类型的情况和函数的情况 
        return typeof value
      }
    }
    

    相关文章

      网友评论

          本文标题:前端注意和vue注意

          本文链接:https://www.haomeiwen.com/subject/orierltx.html