惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Jina AI
Jina AI
Stack Overflow Blog
Stack Overflow Blog
量子位
博客园_首页
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Forbes - Security
Forbes - Security
IT之家
IT之家
N
News and Events Feed by Topic
S
Security Affairs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Webroot Blog
Webroot Blog
Recorded Future
Recorded Future
L
LangChain Blog
Y
Y Combinator Blog
AI
AI
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google Online Security Blog
Google Online Security Blog
V2EX - 技术
V2EX - 技术
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
I
Intezer
T
Tenable Blog
G
Google Developers Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Troy Hunt's Blog
L
LINUX DO - 最新话题
云风的 BLOG
云风的 BLOG
C
CXSECURITY Database RSS Feed - CXSecurity.com
有赞技术团队
有赞技术团队
O
OpenAI News
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Last Week in AI
Last Week in AI
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
Blog — PlanetScale
Blog — PlanetScale

静水深流's blog

探索 SSE:服务器推送技术的魅力与应用 | 静水深流 图解DIFF算法介绍 | 静水深流 如何使用javascript实现复制出的文案带链接? | 静水深流 基于vuepress2搭建专属自己的博客,并集成各种常用功能 | 静水深流 听说你至今不晓得缓存淘汰算法?实现LRU、LFU和FIFO? | 静水深流 最长递增子序列及vue3.0中diff算法 | 静水深流 二进制之入门到应用实践 | 静水深流 常见算法学习 | 静水深流 CSS 形状的实现 | 静水深流 ajax取消接口请求 | 静水深流 前端常见的安全问题 | 静水深流 关于http服务端的学习&总结 | 静水深流 前端面试题总结 | 静水深流 javascript原生代码实现及代码总结 | 静水深流 LeetCode算法学习总结-简单 | 静水深流 LeetCode算法学习总结-困难 | 静水深流 LeetCode算法学习总结- 中等 | 静水深流 排序算法总结 | 静水深流 扫码登录的实现原理 | 静水深流 Javascript之常见类型判断汇总 | 静水深流 JavaScript各种继承方式和优缺点 | 静水深流 webpack开发、使用及优化总结 | 静水深流 从JavaScript中的拷贝开始思考 | 静水深流 vue原理、使用及面试方面的总结 | 静水深流 css面试总结 | 静水深流 JavaScript 数组展开(扁平化)和underscore的 flatten | 静水深流 首页 | 静水深流 学习网站收藏 | 静水深流 文章列表 | 静水深流
前端发展及选择 | 静水深流
shaolibao · 2021-01-09 · via 静水深流's blog

前端发展及选择

现代框架(vue)对比JQuery的区别

  • 数据和视图分离(解耦)
  • 数据驱动视图,只关心数据变化

Vue与React两个框架的区别和优势对比

相似点

  • Virtual DOM
  • 都鼓励组件化
  • 都有Props思想
  • 都有完善的构建工具
  • 都有Chrome 开发工具来帮助调试 区别:
  • vue鼓励用vue文件模版,react鼓励用JSX开发
  • vue是通过data属性来管理更新状态的,react则要是用setState来更新状态
  • 学习曲线不同

你为什么使用前端框架

这篇文章open in new window讲的很好
其主要说的是前端框架存在的意义就是解决UI 与状态同步的问题;使用原生JS操作存在以下缺点:

  • 频繁的操作DOM性能低效的
  • 手动做容易产出错误;且大量的DOM操作;容易产生错误且不宜维护
  • 原生 js 难以写出复杂、高效、又容易维护的 UI 代码 那么在VUE中是如何保证 UI 与状态同步的呢?Vue 通过一个响应式系统保证了ViewModal的同步

js框架的发展

每一种框架的出现并且火热必然和当下的一些痛点息息相关,从一开始的Jquery的出现,就是为了方便的解决兼容性问题和操作DOM;但是随着浏览器和js的发展;兼容性已经越来越不需要在开发中考虑进去同时也出现了原生的方便操作DOM的方法;到现在的MVC/MVVM模式的出现,因为随着前端项目越来越复杂,前端如何解决UI与状态间的同步成为当代的痛点,而MVC/MVVM通过监听更改和虚拟DOM来帮助实现UI与数据的对应;下一代前端框架可能就是多端统一

简述模块化发展

模块化指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解后处理,模块化是使复杂系统的代码结构更合理,可维护性更高的可管理的模块的方式,是为了解耦软件系统的复杂性;

  • 前期的发展:
    • 直接定义依赖;缺点: 产生大量的全局变量,一不小心就会导致冲突
    • 命名空间模式;解决了遍地全局变量的问题;缺点:这种方式同样没有安全性,变量可以随意更改
    • 闭包(IIFE)模块化模式;缺点:没有解决如何管理模块的问题,或者在使用时无法清晰描述出模块的以来关系
  • 真正的模块化的出现(2009)
    • CommonJS是服务器端模块的规范,是同步方案(打包工具webpack等可以实现浏览器端的支持)
    • AMD(requireJS)&CMD(SeaJs)是浏览器端的模块化,异步方案,按需加载;AMD&CMD区别
    • UmdAMDCommonJS的集合
    (function (window, factory) {
      if (typeof exports === 'object') {
        module.exports = factory();
      } else if (typeof define === 'function' && define.amd) {
        define(factory);
      } else {
        window.eventUtil = factory();
      }
      })(this, function () {
          //module ...
      }
    );
    
    • ES2015 Modules是现代的模块化方案;在编译时就能确定模块的依赖关系
  • 模块化展望;参考open in new window

未来的模块化肯定是在原生支持模块化的同时,分别增加对css和html的模块化,需要browser端的支持,而不是webpack/rollup 等构建工具的支持

简述微前端

针对复杂且大型的web前端分解成一些更小、跟简单、松耦合的能够独立开发部署的小应用,最常见的解决方案就是在运行是集成( iframe、JS、Web Components ):

  • 代码库小,更内敛,易于维护于开发
  • 松耦合且不受技术栈约束
  • 可独立开发、部署

参考open in new window框架:乾坤open in new window

图片方案选型

#压缩方式动画透明度兼容性适应场景
JPEG/JPG有损不支持不支持所有呈现色彩丰富的图片
PNG无损不支持支持所有呈现小的 Logo、颜色简单且对比强烈的图片或背景等
GIF无损支持支持所有呈现动画
SVG无损支持支持>IE8图片由标准的几何图形组成,或需要使用程序动态控制其显示特效
webP有损支持支持chrome、opera不考虑兼容

前端性能优化

  • 构建优化
    • webpack打包优化
    • 代码按需加载
    • 通过es6的module方法实现tree shaking
    • hash替换为chunkhash实现缓存优化
  • 请求优化
    • 减少资源体积和数量
      • 服务器开启gzip
      • 小图标进行雪碧图base64字体图标等方式加载
      • 代码压缩
      • 域名分片(多域名)
    • 减少重定向,如果无法避免可使用301来做永久重定向
    • 静态文件使用CDN
      • 通过<link rel="dns-prefecth" href="https://www.**.com">进行DNS预解析
      • 域名拆分,主要是为了增加浏览器下载的并行度
    • 开启KeepAlive减少与服务器建立链接的次数或启用http2.0
    • 启用缓存功能
  • 资源优化
    • 可以添加骨架屏
    • 较少资源请求次数
      • 雪碧图或者字体图标
      • css&js合并
    • 资源加载位置优化
      • css放在head中
      • js放在尾部
    • 资源加载时机优化
      • 异步script标签(defer、async
      • 资源预加载参考open in new window参考2
        • preload当前页资源预加载
        • prefetch下页资源预加载
      • 资源懒加载
    • 图片优化
      • 雪碧图
      • 用字体图标的方式替代小图片
      • 图片压缩
      • 通过srcset设置响应式的图片,实现加载更合适的图片
      • 图片懒加载
    • css优化
      • 减少重回和回流
      • 避免使用层级较深的选择器
      • 避免使用 css表达式
      • 给图片设置宽度和高度
      • 尽量不用table布局
      • 能用css实现的效果就不要用js
      • 通过content-visibility:auto优化长列表
    • js优化
      • 缓存DOM选择
      • 批量操作DOM是考虑做优化
        • 使用DocumentFragment对象,让变化先发生在内存中
        • 先用字符串拼接然后统一innerHTML到页面
      • 事件代理
      • 对于频繁的出发操作增加防抖和节流
      • 即使清理不用的变量,避免内存泄漏
      • 选用更高效的API;比如requestAnimationFrame
    • 接口缓存,例:对于一天内不会变更的数据可以缓存在localStorage;有效期一天
    • 白屏时间
      • 骨架屏
      • 服务器渲染

工程化理解

  • 模块化
  • 组件话
  • 自动化
  • 代码和提交的规范化