代码优化

Web前端优化最佳实践及工具集锦

十年热恋 提交于 2019-12-01 04:53:57
摘要: 前端的性能对于Web应用的用户体验来说非常重要。不要以为你的Web应用的性能已经足够好了,其实还会有很多可以提升的地方。本文将介绍Google和雅虎关于前端优化的最佳实践以及工具,你可以逐一检验你的Web应用。 前端的性能对于一个Web应用来说非常重要,如果一个Web应用的页面加载速度非常快、对于用户的操作可以及时响应,那么产品的用户体验将会极大地提升。下图显示了页面加载速度对于用户体验的影响。 你的Web页面的速度是否已经足够快了?其实可能还有很多可以提升的地方。Google和雅虎也提出了一些Web应用的前端优化建议,并发布了一些工具,你可以逐一检验你的Web应用,以便达到更高的性能。 这些优化不仅仅可以给用户提供更好的体验,从开发者角度来说,进行优化还可以减少页面的请求数、降低请求所占的带宽、减少资源的浪费。 下面来看看Google和雅虎提供的Web页面优化最佳实践。 一、Google的Web优化最佳实践 1. 避免坏请求 有时页面中的HTML或CSS会向服务器请求一个不存在的资源,比如图片或HTML文件,这会造成浏览器与服务器之间过多的往返请求,类似于: 浏览器:“我需要这个图像。” 服务器:“我没有这个图像。” 浏览器:“你确定吗?这个文档说你有。” 服务器:“真的没有。” 如此一来,会降低页面的加载速度。因此,检查页面中的坏链接非常有必要,你可以通过

Mysql-explain之Using temporary和Using filesort解决方案

家住魔仙堡 提交于 2019-12-01 02:30:51
项目刚刚告一段落,boos又让优化几个主要界面 程序代码方便的优化就不讲了,主要说MySQL的优化 首先查看explain执行计划,让主要查询语句使用索引,索引type级别最好达到ref | ref_eq级别 其次将extra一栏的Using temporary(临时表)、Using filesort(文件排序)拖出去砍了 第一条语句 explain select * from tb_wm_shop where is_delete != 1 and is_authentication = 1 ORDER BY create_time DESC 大家应该知道使用order by的 字段要使用索引,这条语句中create_time已经创建了索引,但是计划中并没有使用该索引,导致出现了Using filesort文件排序,使其查询变慢 解决方法如下: 从where条件开始,依照顺序创建一个组合索引,就可以砍掉Using filesort这个令人讨厌的头颅了 注意:必须依照顺序,在创建组合索引时,where条件的字段在orderBy的字段之前,如果orderBy是多字段,则必须依照顺序创建 详情可参考链接: https://blog.csdn.net/dingxingmei/article/details/49096591 第二条语句 explain select s.* from tb

分析一套源代码的代码规范和风格并讨论如何改进优化代码

谁说胖子不能爱 提交于 2019-12-01 02:08:11
---恢复内容开始--- 我的工程实践题目是 基于opengl的车载虚拟仪表软件开发 ,是一项校企合作的项目,在项目中以前做过的学长也向我们分享了以往做过的相关的项目的源代码,代码主要是由c语言写出,通过调用opengl的api接口规范来实现的图像旋转,拉伸,平移等操作,源代码如下 : #include "config.h" #include "main.h" #include "./lib/lib_opengl.h" #include "./font.h" #include "./resource.h" #ifdef DEBUG_LOCATION #undef DEBUG_LOCATION #endif #define DEBUG_LOCATION "MAIN" pthread_t taskTimer; extern void *threadTimer(void); #define SIZE_OF_BOX 150 int main(int argc, char* argv[]) { float rotate = 0; FT_ULong strW[10] = {0}; u32 delay = 0; InitGL(); initFont(); initResource(); loadImage(IDIMG_BG); enableGlStatus(); //多线程 //pthread

Web自动化测试代码优化方案之定位、操作

孤者浪人 提交于 2019-12-01 01:49:47
UI自动化测试时,无非是元素定位、对象操作、逻辑验证,但经常出现定位不到元素问题,导致整个用例失败,是一个头疼的问题,那有什么好的解决方案呢? 元素定位 一般采用隐式等待、显式等待,但有时还不能符合我们的要求,所以我用的解决方案是做了一次封装,采用try:except包括定位元素,如果定位失败,采用第二种方式进行定位 def find_element(self, *loc, xpath=None):    """ *loc:表示定位方式、定位元素    xpath:通过xpath方式定位 return:定位到的元素对象    """    try:      return WebDriverWait(self.driver, 20, 2).until(EC.presence_of_element_located(loc))    except TimeoutException:      try:       return WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))      except TimeoutException:        print('元素%s不存在' % loc) 使用方式也很简单,直接调用即可,如果ID方式无法定位到元素

C语言编译全过程

為{幸葍}努か 提交于 2019-11-30 19:33:32
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-- > 预编译处理 ( . c ) -- > 编译、优化程序( . s、 . asm)-- > 汇编程序 ( . obj、 . o、 . a、 . ko ) -- > 链接程序( . exe、 . elf、 . axf等) 1 . 编译预处理 读取c源程序,对其中的伪指令(以 # 开头的指令)和特殊符号进行处理 伪指令主要包括以下四个方面: (1)宏定义指令,如 # define Name TokenString, # undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。 (2)条件编译指令,如 # ifdef, # ifndef, # else, # elif, # endif等。 这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉 (3) 头文件包含指令,如 # include "FileName" 或者 #

优化 Java 代码

我是研究僧i 提交于 2019-11-30 18:29:44
本文来自: CSDN阿里资深工程师教你如何优化java代码 方便记忆,做了代码 格式化处理、作色高亮。 正文: 一、让代码性能更高   1、 需要 Map 的主键和取值时,应该迭代 entrySet    当循环中只需要 Map 的主键时,迭代 keySet 是正确的。但是,当需要主键和取值时,迭代 entrySet 才是更高效的做法,比先迭代 keySet 后再去 get 取值性能更佳。   反例:   Map<String, String> map = ...; for (String key : map.keySet) { String value = map.get(key); ... }   正例:   Map<String, String> map = ...; for (Map.Entry<String, String> entry : map.entrySet) { String key = entry.getKey; String value = entry.getValue; ... }   2、 应该使用Collection. isEmpty检测空   使用 Collection.size 来检测空逻辑上没有问题,但是使用 Collection. isEmpty使得代码更易读,并且可以获得更好的性能。任何 Collection. isEmpty

(WWDC)优化应用启动时间——理论篇

北战南征 提交于 2019-11-30 12:11:27
本文读者: 遭遇应用启动速度慢问题的朋友 希望保持应用启动速度快的朋友 对操作系统知识感兴趣的朋友 内容概览 理论部分 Mach-O 相关知识 虚拟内存相关知识 Mach-O 映像加载过程 从 exec() 到 main() 实践部分 如何度量 优化启动时间 理论部分 Mach-O 相关知识 Mach-O 术语 文件类型: 可执行文件,应用程序主要的二进制文件 Dylib,动态库(也叫做 DSO 或 DLL) Bundle,不可以被链接的 Dylib,只可以进行 dlopen() ,比如:插件 映像:一个可执行文件 或者 dylib 或者 bundle。 框架:带有目录的 dylib ,其目录中包含资源和头文件。 Mach-O Image File 文件被分割为段(segment),并采用大写命名 所有段的大小都是页大小的整数倍(arm64 架构为16KB,其他架构是4KB) 组是段内的子范围,并采用小写命名 常见的段: __TEXT,包含头文件、代码和只读常量(比如C语言字符串常量) __DATA,包含所有读写内容:全局变量、静态变量等 __LINKEDIT,包含如何加载程序的元数据(方法名和地址等信息) Mach-O Universal Files Fat Header 占用一页的大小 列出所有支持的架构和其对应的偏移量 你可能比较好奇,为什么段的大小是页的整数倍? 为什么

做好这两点就可提升网站打开速度

淺唱寂寞╮ 提交于 2019-11-30 07:10:14
  网站图片   很多网站都希望通过对网站内图片进行优化从而达到优化效果的目的,这样做的好处便是让蜘蛛在网站进行爬行的时候能够快速的了解网站的意图,并完成收录。   iis7网站监控   网站是否被劫持、DNS是否被污染、网站打开速度测试的检查。   图片优化不仅仅能够增加网站收录量,还能够方便用户阅读并理解文章内容提高用户体验度。因此有些优化师在进行优化的时候往往会加入大量的图片,却忽略了过量的图片会影响到网站页面的加载速度。基于这样的情况,金策科技建议减少网站内存在的不合理图片或者在不影响用户体验度的情况下对图片进行压缩。   网站代码   不论是什么类型的网站,在用户进入网站的时候,都是js和css支撑着网站的加载工作,所以当网站存在代码冗余问题时,必然会影响到网站页面加载速度。那么金策科技建议可以对网站内代码进行压缩或者精简。   网站打开速度快与否不仅仅关系到用户体验度,还关系到搜索引擎对网站信任度问题。在网速越来越快的现在,已经很少有用户耐心等待读秒加载的过程,利用现有手段改善页面加载速度就显得尤为重要。 来源: https://www.cnblogs.com/goodcola/p/11571104.html

JVM性能优化, Part 2 ―― 编译器

巧了我就是萌 提交于 2019-11-30 07:05:15
ImportNew注:本文是JVM性能优化 – 第2篇 《JVM性能优化, Part 2 ―― 编译器》第一篇 《JVM性能优化, Part 1 ―― JVM简介 》 作为JVM性能优化系列文章的第2篇,本文将着重介绍Java编译器,此外还将对JIT编译器常用的一些优化措施进行讨论(参见“JVM性能优化,Part 1″中对JVM的介绍)。Eva Andreasson将对不同种类的编译器做介绍,并比较客户端、服务器端和层次编译产生的编译结果在性能上的区别,此外将对通用的JVM优化做介绍,包括死代码剔除、内联以及循环优化。 Java编译器存在是Java编程语言能独立于平台的根本原因。软件开发者可以尽全力编写程序,然后由Java编译器将源代码编译为针对于特定平台的高效、可运行的代码。不同类型的编译器适合于不同应用程序的需求,使编译结果可以满足期望的性能要求。对编译器基本原理了解得越多,在优化Java应用程序性能时就越能得心应手。 什么是编译器 简单来说,编译器就是将一种编程语言作为输入,输出另一种可执行语言的工具。大家都熟悉的javac就是一个编译器,所有标准版的JDK中都带有这个工具。javac以Java源代码作为输入,将其翻译为可由JVM执行的字节码。翻译后的字节码存储在.class文件中,在启动Java进程的时候,被载入到Java运行时中。 标准CPU并不能识别字节码

《编写优雅的前端业务代码》听后感

二次信任 提交于 2019-11-30 06:11:30
这场知乎live主要拿了一份现实工作中的业务代码进行一步步地优化分析。每个人的收获都是不一样的。我就以我的水平去总结一下这场live,也说说我的收获。 原来的代码一共300行不到的js,用jquery写的。整个代码结构,就是前面定义少许变量,然后一堆函数,一堆事件的绑定,中间夹杂着几个函数的调用,算是初始化的功能吧。对这份代码的整体感受,代码格式整洁,有些注释,太多DOM操作,太多样式的计算看得有点眼花缭乱。 对于我这种小白水平的来说,如果要我去优化。我会做的不多,最多就是把那些函数的调用放在一块,省得找来找去的。可能会调换一下代码的顺序,更好读一些。一个函数如果业务太多,拆分成多个子函数来实现。提取一些复用的函数和变量。 然后,我们看下大神是怎么做的。 第一次优化 这一次在结构上是比较大的修改,算是一次大重构。首先用经典的立即执行函数写法把所有代码包起来( 主要作用应该是避免污染全局变量 ),一般jquery的插件都可以看到。而原始代码用的仅仅是 $(function(){ //some code }) ,主要是为了保证在dom加载完毕之后才执行代码。 然后在代码结构上,将代码写成模块的形式。定义了一个构造函数(来模拟类), 函数内部做了一些初始化操作的事情,然后在把那些方法定义在它的原型对象(prototype)上,顺便把这个类暴露给全局变量,然后在dom加载完毕之后进行实例化