首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于“先扛住,再优化”

不断跟我说,“先用以前方式实现,以前没问题,先把这个版本发了,再安排个时间优化”。其实以前估计也是用这个方式实现,只不过刚好没有触发这个bug。...最后,我直接跟他要了实现脚本,自己定位,最终确定了是由于脚本里用了填充模板再innerHTML进页面的方式去实现,而innerHTML 进去内容带背景引起图片重复拉取。...所以解决方法就是不使用innerHTML,很快就解决了。前后也不就是花了我半小时不到,为什么开发同学就不能定下心找原因呢?...我所理解“先扛住”,并不是简单先把东西搞出来就算了,而是在当前情况下已经做了80%左右优化,一些很花时间优化先保留接口,后期到一定阶段“再优化”。...任何一种技术、思想,都是有它适用环境、条件,如果不做分析,一味接受、使用,有时并不会带来正面的效果。

25640

Web APIs第一天

如果不能可以怎么做到修改? 不可以, 只能通过遍历方式一次给里面的元素做修改 2....= '您好啊' document.write() 方法 只能追加到body中 元素.innerText 属性 只识别内容,不能解析标签 元素.innerHTML 属性 能够解析标签...操作类名(className) 操作CSS 如果修改样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名形式 由于class是关键字, 所以使用className去代替 className...是使用新值换旧值, 如果需要添加一个类,需要保留之前类名 可以同时修改多个样式 直接使用 className 赋值会覆盖以前类名 // 使用ClassName修改样式 可修改多个样式 但会覆盖以前类名...是追加和删除不影响以前类名 // 使用ClaaList修改样式 修改样式方便 追加删除不影响以前类名 let num1 = document.querySelector('.one1') // add

1.7K30
您找到你想要的搜索结果了吗?
是的
没有找到

响应式、模版克隆、Proxy 代理。。。JavaScript 框架工作原理你还了解多少?

使用虚拟 DOM 可以减轻“一切从零开始”策略一些成本,但并不能完全解决问题。要求开发人员编写正确备忘录代码是一场失败战斗(有关解决此问题尝试,请参阅 React Forget)。...此外,每次更新都会破坏 DOM,这会重置状态,例如 值等。 注意:使用 innerHTML 也会涉及安全问题,但在本文中,我们假设 HTML 内容是可信。...为什么要刷新更新?主要是因为我们不想进行过多计算。如果每当 a 和 b 都发生变化时就更新,那么我们就会无用地计算两次总和。通过将刷新合并到一个微任务中,我们可以提高效率。...(稍后我们将看到为什么我们需要编译器)。 我们将重复使用之前 state 对象,这次将使用 color 和 text 属性。...当我们将该 state 传递给 render 时,它应该返回应用了该状态 DOM 树: Blue!

16810

自己写面试题,自己想答案

3.考点-预解析 根据以下代码,写出结果 这道题我印象很深刻,因为是我在一年多以前,在Q群看到有人说直自己各种精通时候,我就出这道题提问,一抓一个准,至今那些各种精通的人,没一个回答出来。...这道题,有几个人还是从vue角度解决问题(v-for,data),虽然这样不能说错,但是我题目没提及vue任何东西。考点就是利用innerHTML或者文档碎片形式。...所以理想解决方案应该是这个。...1.如果设计中使用了非标准字体,你该如何去实现? 图片,字体图标代替,如果是比较小英文字体可以使用css3@font-face。...用法讲解 4.Div+css排版时候,从页面渲染和代码可读性角度,应该注意些什么

66920

函数式编程,真香

总之,当我们在设计应用程序时候,我们应该考虑是否遵守了以下设计原则。 可扩展性--我是否需要不断地重构代码支持额外功能? 易模块化--如果我更改了一个文件,另一个文件是否会受到影响?...document.querySelector('#msg').innerHTML = 'Hello World' 这个程序很简单,但是所有代码都是死不能重用,如果想改变消息格式、...和 echo 都是函数,addToDom 很明显也能看出它是函数,那么我们为什么要写成这样呢?...我们所熟知 SQL 语句就是一种很典型声明式编程,它由一个个描述查询结果应该什么断言组成,对数据检索内部机制进行了抽象。 我们再来看一组代码再来对比一下命令式编程和声明式编程。...而声明式是将程序描述与求值分离开来。它关注如何用各种表达式描述程序逻辑,而不一定要指明其控制流或状态关系变化。 为什么我们要去掉代码循环呢?

78820

社招前端一面react面试题汇总

(在构造函数中)调用 super(props) 目的是什么在 super() 被调用之前,子类是不能使用 this ,在 ES2015 中,子类必须在 constructor 中调用 super()...它不但没有问题,而且如果根据以前状态( state)以及属性修改当前状态,推荐使用这种写法。...就去渲染对应组件,若没有定义组件 则报错当根据数据遍历生成标签,一定要给标签设置单独key 否则会报错hooks 为什么不能放在条件判断里以 setState 为例,在 react 内部,每个组件...为什么?Ajax请求应该写在组件创建期第五个阶段,即 componentDidMount生命周期方法中。原因如下。在创建期其他阶段,组件尚未渲染完成。...shouldComponentUpdate 应该返回一个布尔值决定组件是否要重新渲染componentWillUpdate -- 很少使用

3K20

关于Java中Stack类使用

标签(空格分隔): java - 为什么不用Stack类 《Java编程思想》第四版一书中明确不建议我们使用java.util.Stack类,一直保留只是为了兼容以前版本,在17.13.3中提到了原因...PS:Stack是为了专门实现栈而创建类,作者在文中也提到“竟然不是用Vector构建Stack,而是继承Vector”,可见作者也认为额外操作是使用Stack类所不能容忍。...但这和建议使用LInkedList不能同一看待,因为一个是专用类,而另外一个是建议实现Stack一种手段(不能因为可以实现Stack而不能有其他操作,LinkedList毕竟不是为了Stack而生)...- 为什么不用Vector类 Vector由于是线程安全,所以在单线程时候效率会叫ArrayList更低。在Java 1.2 出现ArrayList之后基本上就使用起来代替Vector。...在多线程中ArrayList可以使用Collectiuons.synchronized方法保证多线程环境下安全使用。 在本书17.13.1中提到另一个原因就是又长又难记方法名。

1.4K90

【最佳实践之性能篇】编码惯例与作用域意识

这样一个全局对象可以扩展为命名空间概念。命名空间涉及创建一个对象,然后通过这个对象暴露能力。关于命名空间,最重要是确定一个大家都同意全局对象名称。这个名称要足够独特,不能与其他人冲突。...但是,if语句在这里只是简单检查了这个值是不是null。实际上,字符串、数值还是有很多其他类型都可以通过这里检查,结果就会导致错误。 注意:类型检查要检查是它类型,而不是检查它不能什么!。...比如: let url = window.location.href; let query = url.xxx; 只要对象属性访问超过了1次,就应该这样做提升性能。 2....(valuse[i]); }while( --i >= 0 );// 注意这里是 --i,而没有使用i++<value.length自己想想为什么,不懂评论区评论 可以自行测试一下,博主自测使用后测试循环执行时间比...尽量使用 位操作运算符 在执行数学运算操作时,位操作一定比任何布尔值或数字计算更快。像求模、逻辑与AND、逻辑或OR都很适合使用位操作代替。甚至某些计算可以考虑使用位移操作符代替。 语句最少化 1.

31120

try catch引发性能优化深度思考

开始有点疑惑为什么 style.formatData 值导致这个函数运行效率差别如此之大。...,并且这是 JavaScript 语言一种特殊情况,所以某些浏览器不能非常有效地处理它,并且在捕获异常情况下,将捕获处理程序放在性能关键循环中可能会导致性能问题,这是我们为什么上面会出现 Minor...从性能角度来看,目前 V8 引擎确实在积极通过 try catch 优化这类代码片段,在以前浏览器版本中上面整个循环即使发生在 try catch 代码块内,它速度也会变慢,因为以前浏览器版本会默认禁用...当我们预感代码片段有可能出错,更应该是集中注意力去处理 success 和 error 场景,而非使用 try catch 保护我们代码,更多时候 try catch 反而会让我们忽略了代码存在致命问题...if else 代替,在某些复杂不可测代码中也应该减少 try catch(比如异步代码),我们看过很多 async 和 await 示例代码都是结合 try catch ,在很多性能场景下我认为它并不合理

85420

前端框架选型

最高票回答是你应该使用jQuery插件,jQuery插件可以做任何事情。 历史总是在重演,以前是jQuery,现在可能是react或vue。不同框架有不同应用场景,杀鸡不要用牛刀。...框架决定了什么时候调用库,决定了什么时候要求代码去执行特定功能 ? 而实际上,一个库有时也可以称之为框架,而库里面集成方法称之为库 框架和库区别不由实际大小决定,而由思考角度决定。...(模板集成) 5、Component(组件) 6、Routing(路由) 7、Architecture(架构) 【why】 为什么使用外部解决方案呢?...原理如下:将输入字符串模板通过innerHTML转换为一个无状态DOM树,然后遍历该节点树,去抓取关键属性或语句,进行相关绑定,进而变成了有状态DOM树,最终导致DOM树会与数据模型model进行绑定...这类模板特点是修改数据时,会使有状态DOM树实时更新,运行时性能更好,也会保留 DOM 中已有事件 ?

1.6K60

React入门

6.单向响应数据流 − React 实现了单向响应数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。...script> JSX语法(react使用jsx代替常规javascript) 可以创建一个独立js文件来使用,通过script标签引入 使用多个标签,使用div包裹 支持表达式, js表达式可以直接被解析...不支持if else 可以使用三元表达式代替 相当于是vue中 v-if 直接解析数组 相当于是vue中v-for...标签中注释使用花括号包裹,区别于原先js注释 , 否则的话 , 注释会 直接解析成文本 推荐使用内联样式 直接进行样式绑定 相当于是vue中 v-bind 为什么使用jsx语法...元素用于描述你在页面上看到内容 页面的基本渲染 元素更新 在React中,元素是不能发生突变,要进行元素,一旦创建了元素,就不能修改其子元素或者是相关属性 元素更新措施是: 创建一个新元素并使用

88010

新手学习 react 迷惑点(一)

为什么要用 className 而不用 class React 一开始理念是想与浏览器 DOM API 保持一直而不是 HTML,因为 JSX 是 JS 扩展,而不是用来代替 HTML ,这样会和元素创建更为接近... "hello" 浏览器问题,ES5 之前,在对象中不能使用保留字。...jsx用className而不是class 为什么属性要用小驼峰 因为 JSX 语法上更接近 JavaScript 而不是 HTML,所以 React DOM 使用 camelCase(小驼峰命名)定义属性名称...来自 JSX 简介 为什么 constructor 里要调用 super 和传递 props 这是官网一段代码,具体见:状态(State) 和 生命周期 class Clock extends React.Component...不知道你有没有疑惑过为什么要调用 super 和传递 props,接下来我们解开谜题吧。

67930

大道至简--API设计美学

API 不但利于使用者理解,开发时也会事半功倍,后期维护更是顺风顺水。至于怎么设计API,今天就提下我自己一些建议。如果大家有什么想法,欢迎指点。...一个弹窗这样会话消息,建议使用message这个字样。notice应该像‘公告,告示,声明’之类情况使用。...,type这个参数,我想保留默认值,偷懒不传。...现在API改了,解决方案有两个,要么把整个项目使用这个API方式,都改成第二种传参方式,要么就是对接口进行向下兼容,兼容以前方案。...6.简单 这一步可以说是API设计最高级一步,也是最难开发一步,这就是为什么这篇文章会带有‘大道至简’字样,即使API实现很难,但使用起来简单感觉就是高级API。

53330

AngularDart4.0 指南- 模板语法一 顶

请遵循以下准则: 没有明显副作用 快速执行 简单 幂等性 这些指导方针例外情况应该是在你理解情况下。 没有明显副作用 模板表达式不应该更改目标属性值以外任何应用程序状态。...该属性(Attributes)值是无关紧要,这就是为什么不能通过编写 Still Disabled 启用按钮原因。...您不能使用属性绑定将值从目标元素中拉出。 您不能绑定到目标元素属性读取它。 你只能设置它。 同样,您不能在目标元素上使用属性绑定调用方法。...本指南反复强调,使用属性(property)绑定设置元素属性(property)始终优先于使用字符串设置属性(attribute)。 Angular为什么提供属性(attribute)绑定?...以前缀attr开头,后跟一个点(.)和属性名称代替括号之间元素属性。然后使用解析为字符串表达式设置属性值。

5.1K10

Vue 2x 中使用 render 和 jsx 最佳实践 (2)

因为根据VRrender渲染机制,如果使用箭头函数,那么每当组件state发生改变,推动render渲染执行时候,如果存在箭头函数,每次浏览器都会分配新内存和额外开销执行事件绑定,组件绑定层级越深...JSX -> VR DOM -> DOM 为什么要用VR DOM 很难跟踪状态发生改变:原有的开发模式,我们很难跟踪到状态发生改变,不方便针对我们应用程序进行调试; 操作真实DOM性能较低:...,所以在开发中应该避免频繁DOM操作 不是用了VR DOM性能就一定会变好 React 从来没有说过 “React 比原生操作 DOM 快”。...真正问题是在 “全部重新渲染” 思维模式下,即使只有一行数据变了,它也需要重置整个 innerHTML,这时候显然就有大量浪费。 我们可以比较一下 innerHTML vs. ...这才是为什么要有 Virtual DOM: 它保证了: 不管你数据变化多少,每次重绘性能都可以接受; 你依然可以用类似 innerHTML 思路去写你应用。

74220

如何解决内存泄漏引发血案

什么是内存泄漏 内存泄露是指一块被分配内存既不能使用,又不能回收,直到浏览器进程结束。在 C++ 中,因为是手动管理内存,内存泄露是经常出现事情。...自动垃圾收集是不能代替有效内存管理,特别是在大型,长时间运行Web应用程序中。...obj = {x: 'y'}; obj = null; // 应该这样 2、闭包 1)在闭包中引入闭包外部变量时,当闭包结束时此对象无法被垃圾回收(GC)。...html() 函数 页面中还需要注意一点是使用 jquery html() 函数,该函数不是基于 innerHTML 实现,大量使用同样也会导致系统性能下降。...6、使用事件委托代替事件注册 页面中如果元素过多,且需要为每个元素注册相同 click 事件,这个时候我们优先考虑到使用委托机制,将需要注册 click 事件注册到元素上层或者顶层元素,这样我们就节省了大量

48210
领券