代码优化

js代码优化

霸气de小男生 提交于 2019-12-05 11:07:30
当自调用函数需要使用外部变量时,应该作为参数传递给函数,这样函数在访问外部变量时不用进行作用域链查找了 (function(window,jQuery){   //................ })(window,jQuery); 使用单个var,在代码块开头声明变量,防止逻辑混乱、减少代码量 var a = 1,b = 2,j; 不需要每次循环都去取数组属性,这会降低性能 for (var i = 0, max = myarray.length; i < max; i++) {} 防止变量、参数为空 function( obj || {} ){obj.a=1;} var obj = obj || {}; 强制new模式,防止构造函数直接调用 function Person(name, city) { if(!(this instanceof Person)) { return new Person(name, city); } } 深拷贝对象: var deepCopy= function(source) { var result={}; for (var key in source) { result[key] = typeof source[key]===’object’? deepCopy(source[key]): source[key]; } return

常见性能优化策略的总结

感情迁移 提交于 2019-12-05 09:38:27
本文要感谢我职级评定过程中的一位评委,他建议把之前所做的各种性能优化的案例和方案加以提炼、总结,以文档的形式沉淀下来,并在内部进行分享。力求达到如下效果: 1. 形成可实践、可借鉴、可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始。 2. 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。 文章在内部分享后,引起强烈分享,得到了不少同事和朋友的认可和好评,觉得对日常的工作有很好的指导作用。考虑到这些经验可能对业界同行也有帮助,所以在美团点评技术团队博客公开。 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如 for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次 等。 数据库 数据库的调优,总的来说分为以下三部分: SQL调优 这是 最常用、每一个技术人员都应该掌握基本的SQL调优手段(包括方法、工具、辅助系统等) 。这里以MySQL为例,最常见的方式是,由 自带的慢查询日志或者开源的慢查询系统

前端文档汇总(含代码规范、开发流程、知识分享,持续更新)

左心房为你撑大大i 提交于 2019-12-05 08:34:30
front-end-Doc 前端文档汇总(含代码规范、开发流程、知识分享,持续更新) 原Github地址 进去后可直接点链接查看文章 综合类 地址 前端文档基本例子 https://github.com/mgbq/front... 前端知识体系 http://www.cnblogs.com/sb1987... 前端知识结构 https://github.com/JacksonTia... Web前端开发大系概览 https://github.com/unruledboy... Web前端开发大系概览-中文版 http://www.cnblogs.com/unrule... Web Front-end Stack v2.2 https://raw.githubusercontent... 免费的编程中文书籍索引 https://github.com/justjavac/... 前端书籍 https://github.com/dypsilon/f... 前端免费书籍大全 https://github.com/vhf/free-p... 前端知识体系 http://www.cnblogs.com/sb1987... 免费的编程中文书籍索引 https://github.com/justjavac/... 智能社 - 精通JavaScript开发 http://study.163.com

第02组 Alpha冲刺(6/6)

坚强是说给别人听的谎言 提交于 2019-12-05 07:34:42
第02组 Alpha冲刺(6/6) 队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 准备“Alpha事后诸葛亮” 提交记录(全组共用) 接下来的计划 完善接口文档 调动组员积极性 还剩下哪些任务 自我反思 学习代码评估、测试 燃尽图(全组共用) 遇到了哪些困难 本人懈怠、不称职 没有参与开发,对项目的掌握相当不充分 后天有面向对象考试 有哪些收获和疑问 收获:沟通很重要 杨世杰 过去两天完成了哪些任务 配合前端修改接口要求 接下来的计划 完善百科相关功能,进一步优化任务相关功能 还剩下哪些任务 完善百科相关功能,进一步优化任务相关功能 燃尽图(全组共用) 遇到了哪些困难 接口调用偶尔失败 有哪些收获和疑问 收获:代码能力进一步提升 林宏海 过去两天完成了哪些任务 基本功能的实现 用户交互 接下来的计划 聊天室 排行榜 赏金功能实现 还剩下哪些任务 聊天室 排行榜 赏金功能实现 燃尽图(全组共用) 遇到了哪些困难 一开始在开发过程中 页面之间数据的逻辑关系没有理清楚,在 队员帮助下解决 有哪些收获和疑问 收获:明天又是美好的一天 林小棠 过去两天完成了哪些任务 了解微信小程序的开发过程 接下来的计划 在大佬的带领下继续学习 还剩下哪些任务 在大佬的带领下继续学习 燃尽图(全组共用) 遇到了哪些困难 时间不够充裕,很多东西都是直接套用,没去理解

LLVM编译原理和使用

你说的曾经没有我的故事 提交于 2019-12-05 06:16:34
LLVM 简介: LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。 LLVM最早的时候是Illinois的一个研究项目,主要负责人是Chris Lattner,他现在就职于Apple. Apple 目前也是llvm项目的主要赞助者之一。 在理解LLVM时,我们可以认为它包括了一个狭义的LLVM和一个广义的LLVM。广义的LLVM其实就是指整个LLVM编译器架构,包括了前端、后端、优化器、众多的库函数以及很多的模块;而狭义的LLVM其实就是聚焦于编译器后端功能(代码生成、代码优化、JIT等)的一系列模块和库。 LLVM 优势: 传统编译器分三个阶段: 前端(Frontend)-- 优化器(Optimizer)-- 后端(Backend) 前端负责分析源代码,可以检查语法级错误,并构建针对语言的抽象语法树(AST);抽象语法树可以进一步转换为优化,最终转为新的表示方式,然后再交给让优化器和后端处理; 最终由后端生成可执行的机器码。 llvm 也分三个阶段,但是设计上略微的有些区别, LLVM不同的就是对于不同的语言它都提供了同一种中间表示:

Python 代码优化常见技巧

社会主义新天地 提交于 2019-12-04 22:26:52
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。 改进算法,选择合适的数据结构 一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是: O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!) 因此如果能够在时间复杂度上对算法进行一定的改进,对性能的提高不言而喻。但对具体算法的改进不属于本文讨论的范围,读者可以自行参考这方面资料。下面的内容将集中讨论数据结构的选择。 字典 (dictionary) 与列表 (list) Python 字典中使用了 hash table,因此查找操作的复杂度为 O(1),而 list 实际是个数组,在 list 中,查找需要遍历整个 list,其复杂度为 O(n),因此对成员的查找访问等操作字典要比 list 更快。 清单 1. 代码 dict.py from time import time t = time() list = ['a','b','is','python','jason','hello',

如何才能做一个合格的前端开发者呢?

梦想与她 提交于 2019-12-04 21:44:54
如何才能做一个合格的前端开发者呢? 第一,必须掌握基本的Web前端开发技术,其中包括:CSS、HTML、SEO、DOM、BOM、Ajax、Java等,在掌握这些技术的同时,还要清楚地了解它们在不同浏览器上的兼容情况、渲染原理和存在的Bug。 第二,在一名合格的前端工程师的知识结构中,网站性能优化、SEO和服务器端的基础知识也是必须掌握的。 第三,必须学会运用各种工具进行辅助开发。 第四,除了要掌握技术层面的知识,还要掌握理论层面的知识,包括代码的可维护性、组件的易用性、分层语义模板和浏览器分级支持,等等。 来源: CSDN 作者: 前端碎碎念 链接: https://blog.csdn.net/zhongqw_00/article/details/88929162

SSE图像算法优化系列三十:GIMP中的Noise Reduction算法原理及快速实现。

橙三吉。 提交于 2019-12-04 19:50:52
  GIMP源代码链接: https://gitlab.gnome.org/GNOME/gimp/-/archive/master/gimp-master.zip   GEGL相关代码链接: https://gitlab.gnome.org/GNOME/gegl/-/archive/master/gegl-master.zip   最近因为要研究下色温算法,顺便下载了最新的GIMP软件,色温算法倒是找到了(有空单独来讲下),也顺便看看GIMP都有些什么更新,嗯,更新还是蛮多的,界面UI上有很多改动,有些已经改的面目全非了。随便瞄了一下Enhance菜单,发现里面有一个Nosie Reduction算法,试了下,还有点效果。于是在github上下载了GIMP的源代码,可是在源代码里搜索相关的关键词确没有发现任何的相关代码,后来才发现很多东西都有个GEGL关键词,结果一百度,原来他是一个单独的软件包,于是有下载了GEGL的源代码,终于在gegl-master\operations\common\里面看到了noise-reduction.c文件。   其核心的代码如下: static void noise_reduction (float *src_buf, /* source buffer, one pixel to the left and up from the starting

解密Go语言之 pprof

最后都变了- 提交于 2019-12-04 15:05:04
相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致。 一般我们使用二分法,或者牛顿迭代法计算一个浮点数的平方根。但在这个函数里,作者使用了一个“魔数”,根本没有迭代,两步就直接算出了平方根。令人叹为观止! 因为它是最底层的函数,而游戏里涉及到大量的这种运算,使得在运算资源极其紧张的 DOS 时代,游戏也可以流畅地运行。这就是性能优化的魅力! 工作中,当业务量比较小的时候,用的机器也少,体会不到性能优化带来的收益。而当一个业务使用了几千台机器的时候,性能优化 20%,那就能省下几百台机器,一年能省几百万。省下来的这些钱,给员工发年终奖,那得多 Happy! 一般而言,性能分析可以从三个层次来考虑:应用层、系统层、代码层。 应用层主要是梳理业务方的使用方式,让他们更合理地使用,在满足使用方需求的前提下,减少无意义的调用;系统层关注服务的架构,例如增加一层缓存;代码层则关心函数的执行效率,例如使用效率更高的开方算法等。 做任何事,都要讲究方法。在很多情况下,迅速把事情最关键的部分完成,就能拿到绝大部分的收益了。其他的一些边边角角,可以慢慢地缝合。一上来就想完成 100%,往往会陷入付出了巨大的努力,却收获寥寥的境地。 性能优化这件事也一样,识别出性能瓶颈,会让我们付出最小的努力

JVM性能调优详解

只谈情不闲聊 提交于 2019-12-04 13:11:59
JVM性能调优详解 https://www.cnblogs.com/secbro/p/11833651.html应该是 jdk8 以前的方法 貌似permsize 已经放弃这一块了. 前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及数据统计工具获得数据、确认是否达到目标。 何时进行JVM调优 遇到以下情况,就需要考虑进行JVM调优了: Heap内存(老年代)持续上涨达到设置的最大内存值; Full GC 次数频繁; GC 停顿时间过长(超过1秒); 应用出现OutOfMemory 等内存异常; 应用中有使用本地缓存且占用大量内存空间; 系统吞吐量与响应性能不高或下降。 JVM调优的基本原则 JVM调优是一个手段,但并不一定所有问题都可以通过JVM进行调优解决,因此,在进行JVM调优时,我们要遵循一些原则: 大多数的Java应用不需要进行JVM优化; 大多数导致GC问题的原因是代码层面的问题导致的(代码层面); 上线之前