带你了解PHP7 性能翻倍的关键

20岁老牌网页程序语言PHP,最快将在10月底释出PHP 7新版,这是十年来的首次大改版,最大特色是在性能上的大突破,能比前一版PHP 5快上一倍,PHP之父Rasmus Lerdorf表示,甚至能比HHVM虚拟机下的PHP程序性能更快。

HHVM 是脸书为自家网站特性而量身客制的PHP优化机制,不见得适用任何网站。但Rasmus Lerdorf表示,新版目标之一就是要让任何网站开发者,就连使用开发框架Drupal、开源电子商务系统Opencart时,都能有不输使用HHVM 技术的性能。在新版发表前夕,他也趁来台参加PHPConf Taiwan年会时,分享PHP 7性能大突破的关键。

一个20年来历经了多 次改版和无数次优化的成熟语言,还能有性能提高一倍的突破绝非易事,Rasmus Lerdorf坦言,不像一般新项目多半容易找出许多改进空间,新版PHP并非修改部分程序就达到了如此的成果。反而是,透过大量细节优化和性能累加 后,PHP 7才具备了不输HHVM的执行性能。

Rasmus Lerdorf与PHP核心贡献团队花了许多心力减少程序运作时搬动的内存位数,由此加速执行的性能。例如,PHP中储存变量的数据架构zval从24位 缩减至16位、Hashtable从72位减少至56位,并检视PHP中的函式,思考有无任何改进性能的空间。

除了从减少内存的使用着手 外,Rasmus Lerdorf更检视CPU的Cache line的运作原理,了解程序代码如何与CPU互动、编译程序如何在新CPU架构下编译程序代码等细节,确保PHP 7的程序代码符合现代CPU的架构。虽然每个项目的优化对性能贡献都低于0.5%,但由于优化的项目很多,或是某项改善的功能会被应用程序反复呼叫,整体 修正的综效结果就能有如此大的进展。
更多 »

PHP实现KMP算法

记得大二的时候,就学过KMP算法,当时还觉得这个算法很有趣。今天,做字符串匹配,却没想到要用它,而用了较笨的方法求解,时间复杂度为O(m*n)。下面重温一下KMP算法。

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。

KMP算法的具体步骤如下:

1.

首先,字符串”BBC ABCDAB ABCDABCDABDE”的第一个字符与搜索词”ABCDABD”的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。

更多 »

数据收集原理简单分析

数据收集原理分析

简单来说,网站统计分析工具需要收集到用户浏览目标网站的行为(如打开某网页、点击某按钮、将商品加入购物车等)及行为附加数据(如某下单行为产生的订单金额等)。早期的网站统计往往只收集一种用户行为:页面的打开。而后用户在页面中的行为均无法收集。这种收集策略能满足基本的流量分析、来源分析、内容分析及访客属性等常用分析视角,但是,随着ajax技术的广泛使用及电子商务网站对于电子商务目标的统计分析的需求越来越强烈,这种传统的收集策略已经显得力不能及。

后来,Google在其产品谷歌分析(Google Analytics)中创新性的引入了可定制的数据收集脚本,用户通过谷歌分析定义好的可扩展接口,只需编写少量的javascript代码就可以实现自定义事件和自定义指标的跟踪和分析。目前百度统计、搜狗分析等产品均照搬了谷歌分析的模式。

其实说起来两种数据收集模式的基本原理和流程是一致的,只是后一种通过javascript收集到了更多的信息。下面看一下现在各种网站统计工具的数据收集基本原理。

流程概览

首先通过一幅图总体看一下数据收集的基本流程。

更多 »

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链接,但不容易直接完成实时的消息推送功能,如聊天室、后台信息提示、实时更新数据等功能,但通过polling、Long polling、长连接、Flash Socket以及HTML5中定义的WebSocket能完成该功能需要。

二、WebSocket简介与消息推送

B/S架构的系统多使用HTTP协议,HTTP协议的特点:

1 无状态协议
2 用于通过 Internet 发送请求消息和响应消息
3 使用端口接收和发送消息,默认为80端口
底层通信还是使用Socket完成。

更多 »

SSD固态硬盘构造和原理你知道多少

随着制造工艺的不断提升 固态硬盘的价格也慢慢降到了大众可以接受的范围 越来越多的人开始为自己的爱机增加一个固态硬盘 可大多数人对固态硬盘的构造和原理一无所知,接下来 就随我一起揭开固态硬盘的神秘面纱.

001.png

1.固态硬盘的特点
2.从沙子到颗粒的蜕变
3.闪存的历史与类型
4.闲话SandForce–神秘的压缩
5.如何爱护自己的固态硬盘

一 固态硬盘与传统硬盘的绝对优势

1. 固态硬盘没有噪音。因为固态硬盘没有风扇和机械马达,工作时噪音值为0分贝。某些高端或大容量产品装有风扇,所以仍然会产生噪音。
2. 固态硬盘是不需要用磁头,快速随机读取,读延迟极小。根据相关测试:两台电脑在同样配置的电脑下,搭载固态硬盘的笔记本从开机到出现桌面一共只用了18秒,而搭载传统硬盘的笔记本总共用了31秒,两者几乎有将近一半的差距。
3. 基于DRAM的固态硬盘写入速度极快。
4. 启动快,没有电机加速旋转的过程。
5. 低容量的固态硬盘比同容量硬盘体积小、重量轻。但这一优势随容量增大而逐渐减弱。直至256GB,固态硬盘仍比相同容量的普通硬盘轻。
6. 相对固定的读取时间。由于寻址时间与数据存储位置无关,因此磁盘碎片不会影响读取时间。
7. 低容量的基于闪存的积海固态硬盘在工作状态下能耗和发热量较低,但高端或大容量产品能耗会较高。
8. 固态硬盘比传统的硬盘工作温度范围更大。典型的硬盘驱动器只能在5到55摄氏度范围内工作。而固态硬盘可在-10~70摄氏度工作,一些工业级的固态硬盘还可在-40~85摄氏度,甚至更大的温度范围下工作。
9. 内部不存在任何机械活动部件,不会发生机械故障,也不怕碰撞、冲击、振动。这样即使在高速移动甚至伴随翻转倾斜的情况下也不会影响到正常使用,而且在笔记本电脑发生意外掉落或与硬物碰撞时能够将数据丢失的可能性降到最小。
更多 »

PhoneGap是什么

PhoneGap是什么

PhoneGap是为移动应用开发者准备的,使用HTML、JavaScript和CSS等Web技术创建跨平台移动应用的基于标准的开源开发框架。使用PhoneGap,Web应用开发者的开发范畴被进一步拓展到类本地应用(混合应用)的开发领域。总的来说,PhoneGap从以下三个方面帮助开发者。

打包:对于标准的Web应用,消费者需要打开移动设备上的浏览器,输入URL后才能访问。而PhoneGap可以打包Web应用为本地应用格式,比如iOS的ipa、Android的apk。对于消费者来说,通过PhoneGap打包的应用和使用本地SDK(比如iOS的Objective-C、Android的Java)开发的应用没什么区别。消费者需要到移动应用商店下载这些应用,安装运行。为了方便起见,在下文中我把这些使用Web技术开发、通过PhoneGap打包成本地格式的移动应用统称为“PhoneGap应用”。

访问智能移动设备本地特性:智能移动设备上的现代浏览器提供了一些本地特性的访问,比如GPS。然而,对于移动应用开发来说,需要能够访问更多的本地特性,比如设备摄像头、设备信息、通讯录等。
更多 »

基于第一个PhoneGap(cordova)的应用详解

PhoneGap是一套能让你使用HTML5轻松调用本地API接口和发布应用到商店的应用开发平台。官方说有低成本,低开发周期,轻量化等优点,这些咱暂时也没法证明,略过不表。但是有一条跨平台,却是很明显的优势。因为它采用HTML5+JavaScript的模式来开发应用。PhoneGap用JavaScript统一封装了几大平台的本地api(Andriod,IOS,WP8/7,WINRT)等等。。这样的话从一个平台移植到另外一个平台只需要把HTML代码跟JS原封不动的拿过去,打包一下就可以了。PhoneGap后来被Adobe收购,然后又贡献给了开源社区,现在由Apache管理,改名cordova。

为了给昨天的html5画图板移植到移动设备上,我决定采用phoneGap平台,这样只要编写一边就可以多出运行了。
更多 »

could not get wglGetExtensionsStringARB

现象: 启动应用程序时,在Emulator中,提示“could not get wglGetExtensionsStringARB”。

原因分析: device space不足。

解决办法:

选择AVD-Edit-Device中,选择一个较小的尺寸就可以了。毕竟,我们只是测试而已。

另外,可以将Intener storage, Memory等设置的大一些,应该就可以了。

Eclipse下启动AVD Manager失败,提示找不到.android/avd/AndroidXXX.ini地解决办法

缘由是: D:\Java\android\.android/avd/Android4.1.ini 这个目录下基本没有这个.ini ,甚至连android 这个目录都没有。默许的android会在Administrator 外面创立这些文件来放emulator的也就是C:\Documents and Settings\Administrator\ 这个目录下你应该会看到 .android文件夹 处理方法是:

1、设置环境变量:ANDROID_SDK_HOME值为你的SDK目录。如我的是:变量名 ANDROID_SDK_HOME 值为 D:\java\android_sdk
更多 »

如何学习unity3d

第一步首先了解unity3d的菜单,视图界面。这些是最基本的基础,可以像学word操作一样,大致能明白有几个菜单,几个基本的视图,各自起什么作用的就可以了。

第二步理解场景里面的坐标系统,输入系统,简单的向量概念。Unity3D的坐标系统及向量概念如果不理解清楚,不理解世界坐标,局部坐标的关系,即使一个简单的移动,缩放,旋转的几行代码,也会困惑你半天。

第三步学习创建基本的场景的一些基本概念:游戏对象,组件,脚本。在界面上分别体现在层次视图,项目视图及属性视图,要理清楚彼此之间的关系。
更多 »

Copyright © All Rights Reserved · 菁菁博客 Since 2012 · Proudly powered by WordPress