性能

提高HTML5 canvas性能的几种方法!

我是研究僧i 提交于 2019-12-12 16:00:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 简介 HTML5 canvas 最初起源于苹果(Apple)的一项实验,现在已经成为了web中受到广泛支持的2D 快速模式绘图 (2D immediate mode graphic )的标准。许多开发者现在利用它来实现众多的多媒体项目、可视化醒目以及游戏等等。然而,随着我们构建的应用程序的复杂度的增加,我们难免会遇到所谓的性能问题。 已经存在众多优化canvas性能的方法了,但是还没有一篇文章将这些方法系统的整理并加以分析。本文的目的就在于将这些方法整理、巩固以使其曾为开发者们更容易理解、消化、吸收的资源。本文囊括了适用于所有计算机绘图环境(computer graphics environments)的最基本的优化方法,以及特定于canvas的优化方法。其中特定于canvas的优化方法可能会随着canvas实现方式的更新而发生变化。特别的,当浏览器开发商实现了canvas GPU 加速时,我们探讨的某些优化方法可能会显得并不是特别有效,这些情况我们会在特定的地方标注出来。 请注意,本文侧重点不在于讨论HTML5 canvas的用法。如果想了解canvas的具体用法可以参见HTML5 Rocks网站中 canvas相关的文章 。比如 Dive into HTML5 chapter 以及 MDN tutorial

php函数的实现原理及性能分析

寵の児 提交于 2019-12-09 20:12:53
前言 在任何语言中,函数都是最基本的技术单元之一。对于php的函数,它具有哪些特点?函数调用是怎么实现? php函数 的性能如何,有什么使用建议?本文将从原理出发进行分析结合实际的性能测试尝试对这些问题进行回答,在了解实现的同时更好的编写php程序。同时也会对一些常见的php函数进行介绍。 php函数的分类 在php中,横向划分的话,函数分为两大类: user function(内置函数) 和 internal function(内置函数)。前者就是用户在程序中自定义的一些函数和方法,后者则是php本身提供的各类库函数(比如sprintf、 array_push等)。用户也可以通过扩展的方法来编写库函数,这个将在后面介绍。对于user function,又可以细分为function(函数)和method(类方法),本文中将就这三种函数分别进行分析和测试。 php函数的实现 一个php函数最终是如何执行,这个流程是怎么样的呢? 要回答这个问题,我们先来看看php代码的执行所经过的流程。 从图1可以看到,php实现了一个典型的动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令 (opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。Php本身是用c实现的,因此最终调用的也都是c的函数,实际上,我们可以把php看 做是一个c开发的软件。

C#语言struct结构体适用场景和注意事项

≡放荡痞女 提交于 2019-12-09 19:26:44
在C#语言中struct结构体和class之间的区别主要是值类型和引用类型的区别,但实际上如果使用不当是非常要命的。从Win32时代过来的人对于struct一点不感觉陌生,但是却反而忽略了一些基本问题。我们知道C#在涉及到本地代码的地方大量使用了struct,很大程度上是为了移植代码的需要。很多时候,感觉结构比较简单的类改为struct可能会提高性能,但这种感觉在绝大多数情况下其实是错误的。那么我们自己在编写代码的时候究竟在什么情况下适合定义struct而不是class呢? 选用struct的原则 通过阅读微软的技术文章 Choosing Between Class and Struct ,可以了解到选择使用struct的一些准则。 考虑 定义struct而非class,如果类型的实例很小而且通常存活期都很短或者一般都嵌入到其它对象中使用 避免 定义struct除非类型满足以下全部特征: 逻辑上表达了一个单一值,类似基本数据类型(int, double) 实例大小低于16字节 不可改变 不会被频繁装箱 个人总结了一些使用场景和注意的地方。 对于初学者或者一般情况,请使用class不要考虑struct。当程序需要考虑性能而进行优化的阶段再考虑struct问题 定义struct时,尽量作为私有类型或内部类型,不要公开 struct的属性不要定义公开的set方法,也就是不可改变

一个前端工程师眼里的NodeJS

亡梦爱人 提交于 2019-12-09 13:29:35
JavaScript单线程的误解   在我接触JavaScript(无论浏览器还是NodeJS)的时间里,总是遇到有朋友有多线程的需求。而在NodeJS方面,有朋友甚至直接说到,NodeJS是单线程的,无法很好的利用多核CPU。   诚然,在前端的浏览器中,由于前端的JavaScript与UI占据同一线程,执行JavaScript确实为UI响应造成了一定程度上的麻烦。但是,除非用到超大的循环语句执行JavaScript,或是用阻塞式的Ajax,或是太过频繁的定时器执行外,JavaScript并没有给前端应用带来明显的问题,所以也很少有朋友抱怨JavaScript是单线程而不能很好利用多核CPU的问题,因为没有因此出现性能瓶颈。   但是,我们可以用Ajax和Web Worker回应这个误解。当Ajax请求发送之后,除非是同步请求,否则其余的JavaScript代码会很快被执行到。在Ajax发送完成,直到接收到响应的这段时间里,这个网络请求并不会阻塞JavaScript的执行,而网络请求已经发生,这是必然的事。那么,答案就很明显了,JavaScript确实是执行在单线程上的,但是,整个Web应用执行的宿主(浏览器)并非以单线程的方式在执行。而Web Worker的诞生,就是直接为了解决JavaScript与UI占用同一线程造成的UI响应问题的

tomcat的性能与最大并发(1000)

情到浓时终转凉″ 提交于 2019-12-07 14:16:18
当一个进程有 500 个线程在跑的话,那性能已经是很低很低了。Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。 当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。 具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。 操作系统对于进程中的线程数有一定的限制: Windows 每个进程中的线程数不允许超过 2000 Linux 每个进程中的线程数不允许超过 1000 另外,在 Java 中每开启一个线程需要耗用 1MB 的 JVM 内存空间用于作为线程栈之用。 Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。 Tomcat 默认的 HTTP 实现是采用阻塞式的 Socket 通信,每个请求都需要创建一个线程处理。这种模式下的并发量受到线程数的限制,但对于 Tomcat 来说几乎没有 BUG 存在了。 Tomcat 还可以配置 NIO 方式的 Socket 通信,在性能上高于阻塞式的,每个请求也不需要创建一个线程进行处理,并发能力比前者高。但没有阻塞式的成熟。 这个并发能力还与应用的逻辑密切相关,如果逻辑很复杂需要大量的计算

php--------使用 isset()判断字符串长度速度比strlen()更快

主宰稳场 提交于 2019-12-07 10:32:07
isset()速度为什么比strlen()更快呢? strlen()函数函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化、哈希查找,会跟随被调用的函数一起执行。因此在某些情况下,合理使用isset()可以加速你的程序。因为isset()是一种语言结构,它的执行不需要函数查找和字母小写化等。 具体通过 isset() 和 strlen() 判断字符串长度示例如下: $str='http://www.phpernote.com/php-template/436.html'; if(strlen($str)<5){echo "未满5";} if(!isset($str{5})){echo "未满5";} 下面我们来详细的分析一下strlen()和isset()这两个函数。 PHP strlen() 函数 定义和用法 strlen() 函数返回字符串的长度。 语法:strlen(string) 参数:string 描述:必需。规定要检查的字符串。 strlen() 函数实例 <?php echo strlen("Hello world!"); ?> 结果将输出: 12 PHP isset() 函数

Web服务器处理HTTP压缩之gzip、deflate压缩

﹥>﹥吖頭↗ 提交于 2019-12-07 10:26:29
一、什么是gzip gzip是一种数据格式,默认且目前仅使用deflate算法压缩data部分; Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台。当应用Gzip压缩到一个纯文本文件时,效果是非常明显的,大约可以减少70%以上的文件大小。这取决于文件中的内容。 利用Apache中的Gzip模块,我们可以使用Gzip压缩算法来对Apache服务器发布的网页内容进行压缩后再传输到客户端浏览器。这样经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。 网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是Gzip与搜索引擎的抓取工具有着更好的关系。例如 Google就可以通过直接读取gzip文件来比普通手工抓取更快地检索网页。在Google网站管理员工具(Google Webmaster Tools)中你可以看到,sitemap.xml.gz 是直接作为Sitemap被提交的。 而这些好处并不仅仅限于静态内容,PHP动态页面和其他动态生成的内容均可以通过使用Apache压缩模块压缩,加上其他的性能调整机制和相应的服务器端 缓存规则,这可以大大提高网站的性能。因此,对于部署在Linux服务器上的PHP程序,在服务器支持的情况下,我们建议你开启使用Gzip Web压缩。 PS:详情参考: http:/

25条提高iOS App性能的建议和技巧

折月煮酒 提交于 2019-12-05 10:24:25
这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri , 他是 Movile 的一个iOS开发者 . Check out his personal website or follow him on Twitter . 原文地址 当我们开发iOS应用时,好的性能对我们的App来说是很重要的。你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢就会让你得到不好的评论。 然而,由于IOS设备的限制有时很难工作得很正确。我们开发时有很多需要我们记住这些容易忘记的决定对性能的影响。 这是为什么我写这篇文章的原因。这篇文章用备忘录的形式集合了25个技巧和诀窍可以用来提高你的app性能。所以耐心的阅读来给你未来的App一个很不错的提高。 Note:在优化代码之前,必须保证有个需要解决的问题!不要陷入"pre-optimizing(预优化)" 你的代码。 勤 用 Instruments分析你的代码,发现任何一个需要提高的地方。 Matt Galloway 写了一个使用 Instruments优化代码的 的教程 以下这些技巧分为三个不同那个的级别--- 基础,中级,高级 。 基础 这些技巧你要总是想着实现在你开发的App中。 1. 用ARC去管理内存(Use ARC to Manage Memory) 2. 适当的地方使用reuseIdentifier(Use a

Python/Ruby/Go/Node 之四国大战

喜夏-厌秋 提交于 2019-12-05 03:30:35
Python Flask vs Ruby Sinatra vs Go Martini vs Node Express 本文授权转载自 zybuluo 博客 。 题外话一: 最近一段时间,Cloud Insight 接连发布了三种语言(Python, Node, Ruby)的SDK,Cloud Insight Agent 也迎来了重大突破,发布了 Windows 监控 的第一个版本,总算可以松口气写点东西了~ 题外话二: 偶然的机会看到一篇 blog ,文中详细的介绍了 Flask (Python), Sinatra (Ruby) 以及 Matini (Golang) 这三类微型框架的用法,并提供了各个框架在 Docker 下的部署方式。然而,美中不足的是没有提供各个框架的性能对比情况,经过一番搜罗,发现了一篇对现今主流框架做 性能对比的文章 ,找到两者的结合点,于是才有了今天这篇文章~ 回归正题,之所以选择 Flask(Python), Sinatra(Ruby), Matini(Golang) 和 Express(Node),主要是经验所限以及个人比较喜欢这类微型框架,下面我们就对各个框架在同等条件下的性能表现一探究竟。 本文源码地址: https://github.com/startover/fibonacci-webapp-benchmark 环境准备: Docker

数据库性能优化之SQL索引优化4

。_饼干妹妹 提交于 2019-12-05 01:31:13
温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走。 很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句。这类SQL语句性能不好的首要原因是缺乏高效的索引。没有索引除了导致语句本身运行速度慢外,更是导致大量的磁盘读写操作,使得整个系统性能都受之影响而变差。 解决这类系统的首要办法是优化这些没有索引或索引不够好的SQL语句。 一、创建索引的关键 优化SQL语句的关键是尽可能减少语句的logical reads。这里说的logical reads是指语句执行时需要访问的单位为8K的数据页总数。logical reads 越少,其需要的内存和CPU时间也就越少,语句执行速度就越快。不言而喻,索引的最大好处是它可以极大减少SQL语句的logical reads数目,从而极大减少语句的执行时间。 创建索引的关键是索引要能够大大减少语句的logical reads。一个索引好不好,主要看它减少的logical reads多不多。 运行set statistics io命令可以得到SQL语句的logical reads信息。 set statistics io on select au_id,au_lname ,au_fname from pubs..authors where au_lname =