Aklman

Aklman 查看完整档案

北京编辑  |  填写毕业院校  |  填写所在公司/组织 aklman.com 编辑
编辑

软件开发工程师zZz

个人动态

Aklman 关注了用户 · 2019-08-10

BohrTang @coding101

不学习,如何肩负全面建设社会主义现代化任务。

关注 2936

Aklman 关注了用户 · 2019-01-25

justjavac @justjavac

会写点 js 代码

关注 14478

Aklman 关注了用户 · 2019-01-15

许式伟 @xushiwei

七牛云存储(qiniu.com),CEO。前盛大资深研究员,前金山技术总监,WPS Office 2005首席架构师。

关注 201

Aklman 关注了用户 · 2018-12-26

Wall_Breaker @wall_breaker

生死之间,就是我的跃迁之路,全程记录,欢迎见证

关注 627

Aklman 赞了文章 · 2018-04-25

如何优雅的使用 Vim(一):基本配置

如何优雅的使用 Vim(一):基本配置

Vim 十年,青春不再

转眼间,Vim 已用了十年。
从一开始的抵触、不解,到随之而来的习惯、喜欢,再到近几年编辑器层出不穷的盛况下对 Sublime Text 等短暂的尝试,以及最后即现在的回归,这是一个复杂的过程。
目前,我对 Vim 仍停留在配置和使用阶段,并没有为它开发过任何插件。希望接下来十年,能为它做一些贡献。
Vim 是一个难学难上手,即使熟悉了也会让你痛并快乐着的那种编辑器。要教别人用 Vim,就更是难上加难了。

vim_main

如何评价GitHub准备推出下一代文本编辑器Xray? 一文,可以看到时下不少编辑器的尝试。软件行业发展到今天,编辑器远远没有达到一个完美的境界,包括 Vim,这本身就是一件很不可思议的事情。

基础设置

最最基本的一些设置,位于 vimrc 的开头。

" 首先设置 mapleader,后面键盘映射随时要用
" 基本上所有自定义的快捷键都以这个字符打头,比如映射`,w`为`:w`
let mapleader = ","
let g:mapleader = ","

" 不兼容 Vi,最大限度使用新特性
set nocompatible

" 写入文件时,不做备份
set nobackup
set nowritebackup

" 不用交换文件
set noswapfile

" 保存文件的快捷键
nmap <leader>w :w!<CR>

" 移除 Windows 文件结尾的 `^M`
noremap <leader>m :%s/<C-V><C-M>//ge<CR>

" 重新打开文件时,恢复上一次游标位置
" 通过View可以记住很多设置,比如高亮当前行、折行等等,但是往往比较让人费解
set viewoptions=cursor  " 只记住游标
au BufWinLeave ?* mkview
au VimEnter ?* silent loadview

" 检测文件编码时,优先考虑 UTF-8
set fileencodings=utf-8,ucs-bom,gbk,gb2312,big5,latin1

" 不同平台,设置不同的行尾符,即 EOL
" 注意:在 Mac 平台,也是 unix 优先;自 OS X 始,行尾符与 Unix 一致,
"      都是 `\n` 而不是 `\r`
if has("win32")
    set fileformats=dos,unix,mac
else
    set fileformats=unix,mac,dos
endif

" 在断行、合并(join)行时,针对多字节字符(比如中文)的优化处理
set formatoptions+=mM

配色方案

目前主要使用 morhetz/gruvbox,本文所有截图都是 gruvbox 的效果。
配色方案可以通过插件安装,这里先跳过,会有另一篇文章专门介绍插件。

set background=dark
syntax enable
colorscheme gruvbox
au BufEnter * :syntax sync fromstart

格式

缩进选项

" 采用 C 风格的缩进,适用于大多数语言
" 细节调整见下面的 `cinoptions`
" 你也可以尝试 smartindent 和 autoindent
set cindent

" 细节调整,主要为了适应 Google C++ Style
" t0: 函数返回类型声明不缩进
" g0: C++ "public:" 等声明缩进一个字符
" h1: C++ "public:" 等声明后面的语句缩进一个字符
" N-s: C++ namespace 里不缩进
" j1: 合理的缩进 Java 或 C++ 的匿名函数,应该也适用于 JS
set cinoptions=t0,g1,h1,N-s,j1

制表符 vs. 空格

让制表符智能一些。

set smarttab

对程序员来说,用制表符还是用空格,足以引发一场战争。
美剧《硅谷》中,Richard 因为不能接受女友用空格缩进而断然与之分手。
下面的设置并不优雅,各人需求不一样,需做相应调整。

" 先设置缺省情况,然后根据不同文件类型再次重新设置
set expandtab | set tabstop=4 | set shiftwidth=4  " Python, CSS, etc.

" 对 C/C++ 等,制表符和缩进都是两个空格
au FileType c,cpp,html,htmldjango,lua,javascript,nsis
    \ set expandtab | set tabstop=2 | set shiftwidth=2

" Makefile 必须保留制表符,且习惯上占八个空格
" 不过,这年头谁还会写 Makefile?
au FileType make set noexpandtab | set tabstop=8 | set shiftwidth=8

文本宽度

除了缩进,另一个深具争议的话题就是 80列 限制。

虽然现在显示器大了很多,有些语言习惯上仍然遵守这一规则。

通过设置 textwidth,Vim 可以帮我们在输入时或用gq格式化时自动断行。

我发现,用 gq 格式化注释特别方便,超长的注释会自动重新排版,以保证不越过指定的长度。

目前,我仅对 C/C++/Python/Vim 做这种限制。

au FileType c,cpp,python,vim set textwidth=80

一般如果设定了宽度限制,最好能画一条竖线以警示。
设置 colorcolumn 即可。甚至可以设置为多列,比如 "81,101"。
我是所有文件类型都显示这么一条线。

set colorcolumn=81

折行

通常代码不需折行,前面有些语言设置了宽度限制就更不需要了。
实际操作下来,纯文本、Markdown、XML 等比较需要折行,因为它们常常一行太长了。

au FileType text,markdown,html,xml set wrap

" 折行时,以单词为界,以免切断单词
set linebreak
" 折行后的后续行,使用与第一行相同的缩进
set breakindent

用户界面

" 即使在终端,也尽量启用鼠标
if has("mouse") | set mouse=a | endif

" 显示输入中的命令,对 gqq/gcc 这种多个字符的命令特别有用
set showcmd
" 下面几个不解释,自行查看帮助
set scrolloff=7
set wildmenu
set wildmode="list:longest"
set ruler
" 命令行高度为两行
set cmdheight=2

" 永远显示行号
" 另有比较酷的相对行号(`relativenumber`),虽然我用不习惯
set number

set lazyredraw
" 切换缓存时不用保存
set hidden
" 输入模式下,退格键可以退一切字符
set backspace=eol,start,indent
set whichwrap+=<,>,h,l

高亮不想要的空格,比如行尾。

vim_hl_trailing_spaces

" See [http://vim.wikia.com/wiki/Highlight_unwanted_spaces]
" - highlight trailing whitespace in red
" - have this highlighting not appear whilst you are typing in insert mode
" - have the highlighting of whitespace apply when you open new buffers
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches() " for performance

高亮当前行。

vim_hl_cursorline

set cursorline

不过,我一般不用,因为闪烁的游标就已经很清楚了。

搜索

首先,搜索时忽略大小写(ignorecase)。但是,如果搜索模式里有大写字母,就不再忽略大小写(smartcase)。

set ignorecase
set smartcase

即时显示匹配结果(incsearch),并高亮所有结果(hlsearch)。

set incsearch
set hlsearch
map <silent> <leader><CR> :nohlsearch<CR>

替换时,缺省启用g标志,即,同一行里的所有匹配都会被替换。

set gdefault

切换窗口

切换窗口的键盘映射:

map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

以及,直接用方向键切换缓存的键盘映射:

map <right> :bn<CR>
map <left>  :bp<CR>
map <up>    :bf<CR>
map <down>  :bl<CR>

缩写(Abbreviation)

当前日期、时间、文件名这些内容,用缩写来输入是再方便不过了。
当然,缩写本身的名字不能太常见,下面这些都以 x 打头,一般不会出现在正常的文本中。

iabbrev xname <YouName>  " 改成你自己的名字
iabbrev xmail <YouEmail> " 改成你自己的电邮
iabbrev xfile <c-r>=expand("%:t")<CR>
if exists("*strftime")
    iabbrev xdate <c-r>=strftime("%Y-%m-%d")<CR>  " 当前日期
    iabbrev xtime <c-r>=strftime("%H:%M:%S")<CR>  " 当前时间
endif

删除行尾空格

前面用户界面一节已经提到如何高亮行尾空格,下面设置可以删除行尾空格。

# 这个函数通过替换命令删除行尾空格
func! DeleteTrailingWS()
    exec "normal mz"
    %s/\s\+$//ge
    exec "normal `z"
endfunc

" 保存时自动删除行尾空格
au BufWrite * :call DeleteTrailingWS()
map <leader>W :call DeleteTrailingWS()<CR>

" 移除只包含空格的行里的空格(有点绕口)
" 貌似有了前面的函数,这个就没有什么必要了
map <F3> :%s/\s*$//g<CR>:noh<CR>''<CR>

结语

配置是无穷无尽的,是乐趣也是包袱。
这篇文章,并不是我的 Vim 配置的全部,而我的 Vim 配置,也经常性的在变。
此外,我主要写 C++ 和 Python,可能并不适合你。但是道理是一样的,总是免不了折腾。
所以,没有现成适用于所有人的配置,都是在别人的基础上不断收集和改进而成。

为了避免文章太长,常用插件的介绍就另起一篇吧。

<全文完>

查看原文

赞 9 收藏 18 评论 5

Aklman 关注了用户 · 2018-04-13

有明 @youmingdot

支持一下杭州本土网站。

Laravel - 艺术家成长之路系列讲座

SF | 有明的技术交流群,欢迎大家加入交流分布式、服务化、设计模式、算法、Laravel、Docker、Swoole。QQ 群:666093315,进群还有讲座优惠福利

关注 1310

Aklman 关注了用户 · 2018-04-06

summerblue @summerblue

刻意练习,每日精进

关注 11014

Aklman 收藏了文章 · 2018-04-06

PHP 5.6,7.0,7.1,7.2 和 HHVM 运行效率比较

image.png

我们每年都会尝试深入了解不同版本的 PHP 和 HHVM 在各种平台的性能基准。 今年,我们全面对 20 种不同平台/配置中的四种不同的 PHP 引擎和 HHVM 进行了基准测试; 包括 WordPress,Drupal,Joomla!,Laravel,Symfony 等。 我们还测试了流行的电子商务解决方案,如 WooCommerce,Easy Digital Downloads,Magento 和 PrestaShop。

我们一直鼓励 WordPress 用户利用最新的 支持的 PHP 版本 版本。 它们不仅更安全,而且还提供了额外的性能改进。 当然,我们并不是在谈论 WordPress,这在大多数平台上都是如此。 今天我们将向您展示 PHP 7.2 如何战无不胜!?

今年的结果推翻了以往测试中 HHVM 的领先地位。 我们很高兴看到 PHP 7.2 在速度方面处于领先的引擎。 需要注意的是,WordPress 不再支持 HHVM  ,后续会完全移除。 我们不再鼓励我们的客户迁移到 HHVM,并告知他们它对各平台支持不足的情况。

这对于开发人员和使用者来说都是好消息,因为这让他们精力转移到 PHP 上来,同时能够为每个人提供更快的网站和 web 服务。

PHP & HHVM 基准测试 (2018)

每一次测试,我们都使用每个平台的最新版本,并用15个并发用户进行一分钟的主页测试。以下是我们测试环境的具体配置。

  • 计算主机:8x Intel(R) Xeon(R) CPU @ 2.20GHz (由 Google 云平台 提供支持,并在独立的容器中运行 )
  • 操作系统:Ubuntu 16.04.3 LTS
  • Docker 环境:Debian 8、Nginx 1.13.8、MariaDB 10.1.31
  • PHP 引擎: 5.6、 7.0、7.1、 7.2
  • HHVM: 3.24.2
  • OPCache:WordPress、Joomla 和 Drupal 三个平台, 我们使用官方 docker 镜像。其他平台我们都使用开启 OPcache 的镜像并使用以下php.ini 配置文件。

    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    opcache.enable_cli=1

这些测试由 WordPress 的贡献者和支持工程师 Threatq Firdaus 在 Kinsta 完成。他贡献了 WordPress 的核心代码和翻译了印尼版的 WordPress

PHP

PHP : Hypertext Preprocessor(超文本处理器)。它是当今网络上最流行的脚本语言之一。据 W3Techs 称,所有服务器端编程语言的网站中,超过83%使用 PHP  。

HHVM

由于 PHP 的性能问题,Facebook 的 PHP 团队开发了 HipHop 虚拟机(HHVM)。它是一个使用即时(JIT)编译技术将 PHP 代码转换为机器语言以在 PHP 代码和运行它的底层硬件之间建立协同作用的系统。

测试的平台和配置

我们的测试包括以下20个平台/配置。 在某些平台下,由于缺乏对特定 PHP 版本的支持,我们不得不测试多个版本。 点击下面的标题直接跳到对应的测试记录和结果。 测试数据以每秒请求数来衡量。 当然请求数越多越好。

WordPress 4.9.4

要测试是第一个平台当然是我们最喜欢的: WordPress (我们可能有点偏向于每天生存和呼吸着这个CMS ?)。 WordPress 核心是你可以用来创建漂亮的网站,博客,或者app的开源软件。 实际上, WordPress 支持着互联网上超过 全部网站29% 。 您访问的超过1/4的网站可能由 WordPress 提供支持。

针对 WordPress 基准测试, 我们使用免费的 Twenty Seventeen theme。 我们使用来自 wptest.io 的虚拟内容及模拟15个用户的并发来基准测试首页一分钟。

  • 帖子数量: 10 个 / 页根据 wptest.io 生成
  • “搜索” 侧边栏是侧边栏上唯一发布的内容
  • Docker Image 源自于 https://hub.docker.com/_/word...

image.png

WordPress 基准测试

基准测试结果

  • WordPress 4.9.4 PHP 5.6 基准测试结果: 49.18 请求/秒
  • WordPress 4.9.4 PHP 7.0 基准测试结果: 133.55 请求/秒
  • WordPress 4.9.4 PHP 7.1 基准测试结果: 134.24 请求/秒
  • WordPress 4.9.4 PHP 7.2 基准测试结果: 148.80 请求/秒 ?
  • WordPress 4.9.4 HHVM 基准测试结果: 144.76 请求/秒

PHP 7.2 证明比 HHVM 稍快而获胜。 这与 2016 年 HHVM 明显获胜的基准测试有显著的变化。 PHP for WordPress 也更加稳定。 我们遇到了 HHVM 许多第一手问题。

WordPress 4.9.4 + WooCommerce 3.3.1

WooCommerce 是一个为 WordPress 构建的完全可自定义的开源电子商务平台。这也是目前最流行的电子商务结局方案之一,为互联网上超过 42%的电商平台 提供支持。

针对下一个测试,我们将 WordPressWooCommerce 一起安装。我们使用免费的 电商店面主题

image.png

WordPress + WooCommerce 基准测试

基准测试结果

  • WordPress 4.9.4 + WooCommerce 3.3.1 PHP 5.6 基准测试结果: 34.47 请求/秒
  • WordPress 4.9.4 + WooCommerce 3.3.1 PHP 7.0 基准测试结果: 84.89 请求/秒
  • WordPress 4.9.4 + WooCommerce 3.3.1 PHP 7.1 基准测试结果: 86.04 请求/秒
  • WordPress 4.9.4 + WooCommerce 3.3.1 PHP 7.2 基准测试结果: 92.60 请求/秒 ?
  • WordPress 4.9.4 + WooCommerce 3.3.1 HHVM 基准测试结果: 69.58 请求/秒

WooCommerceHHVM 中表现挣扎,同时 PHP 7.2 略微超过 PHP 7.1

WordPress 4.9.4 + Easy Digital Downloads 2.8.18

Easy Digital Downloads (EDD), 由 Pippin Williamson 开发,是一款免费的 WordPress 电子商城插件,专注于帮助开发者销售网上商品。

看了 WooCommerce 的表现后,我们将 WordPress EDD 一起安装。 我们采用的是免费的 EDD 入门主题

image.png

WordPress + Easy Digital Downloads 基准测试

基准测试结果

  • WordPress 4.9.4 + EDD 2.8.18 PHP 5.6 基准测试结果: 76.71 请求/秒
  • WordPress 4.9.4 + EDD 2.8.18 PHP 7.0 基准测试结果: 123.83 请求/秒
  • WordPress 4.9.4 + EDD 2.8.18 PHP 7.1 基准测试结果: 124.82 请求/秒
  • WordPress 4.9.4 + EDD 2.8.18 PHP 7.2 基准测试结果: 135.74 请求/秒 ?(最佳)
  • WordPress 4.9.4 + EDD 2.8.18 HHVM 基准测试结果: 127.74 请求/秒

WordPressEDD的测试中, PHP 7.2 仍然胜出。

Drupal 8.4.4

Drupal 是一个开源的 CMSContent Management System,即"内容管理系统"),由于它的模块化系统和强大的开发者社区而流行。它在2000年推出, 据 W3Techs 报道,Drupal 在所有网站中占比 2.2% ,在 CMS 市场中占比 4.4% (详细调查) 。

对于 Drupal 的基准测试,我们采用 Bartik 8.4.4 主题。注意! Drupal 8.4.x 不兼容 PHP 7.2 (详细信息),因此,我们没有测试 PHP 7.2

image.png

Drupal 基准测试

基准测试结果

  • Drupal 8.4.4 PHP 5.6 基准测试结果: 7.05 请求/秒
  • Drupal 8.4.4 PHP 7.0 基准测试结果: 15.94 请求/秒
  • Drupal 8.4.4 PHP 7.1 基准测试结果: 19.15 请求/秒
  • Drupal 8.4.4 PHP 7.2 基准测试结果: (不兼容)
  • Drupal 8.4.4 HHVM 基准测试结果: 19.57 请求/秒 ?

由于 Drupal的最新版不支持 PHP 7.2HHVM 赢下了这局。 看 PHP 的前一个版本(7.1)的性能表现,我们可以大胆推测 PHP 7.2 将会更快!

Joomla! 3.8.5

Joomla! 是一个发布网页内容的免费而开源 CMS,最初发布于2005年8月17日。 他建立于 model--view--controller web 应用框架中,根据 W3Techs 他被互联网上 3.1%的所有网站 使用。

针对 Joomla! 基准测试, 我们使用免费的 Beez3 框架

image.png

Joomla! 基准测试

基准测试结果

  • Joomla! 3.8.5 PHP 5.6 基准测试结果: 26.42 请求/秒
  • Joomla! 3.8.5 PHP 7.0 基准测试结果: 41.46 请求/秒
  • Joomla! 3.8.5 PHP 7.1 基准测试结果: 41.17 请求/秒
  • Joomla! 3.8.5 PHP 7.2 基准测试结果: 42.36 请求/秒
  • Joomla! 3.8.5 HHVM 基准测试结果: 51.84 请求/秒 ?

Joomla! 我们可以看到在各个版本的 PHP 中稳步的性能提升。 但 HHVM 仍然领先。

Magento 2 (CE) 2.1.11 + 2.2.2

Magento 是用 PHP 编写的流行的开源电子商务平台,于2008年3月31日发布。 根据 W3Techs,它支持 所有互联网的1.2%

对于 Magento 2 的基准测试,我们使用免费的 Luma 主题。我们使用了两个版本,因为 2.1.11 是唯一支持 PHP 5.6 的版本。 我们安装了样本数据和默认主题。对于其它的测试,我们使用 2.2.2 版本。Magento 2 目前还不支持 PHP 7.2 或者是最新版本的 HHVM。

image.png

Magento 2 基准测试

测试结果

  • Magento 2 (CE) 2.1.11 PHP 5.6 基准测试结果:10.75 请求/秒
  • Magento 2 (CE) 2.1.11 PHP 7.0 基准测试结果:20.87 请求/秒
  • Magento 2 (CE) 2.1.11 PHP 7.1 基准测试结果:29.84 请求/秒 ?
  • Magento 2 (CE) 2.1.11 PHP 7.2 基准测试结果:不支持
  • Magento 2 (CE) 2.1.11 HHVM 基准测试结果:不支持

由于 PHP 7.2 和最新版本的 HHVM 都不支持 Magento 2,所以 PHP 7.1 是明显的赢家。通过每个版本都可以获得一致的性能提升,这一点令人印象深刻。

Grav CMS 1.3.10

Grav 是一个简单易用但功能强大的开源 CMS ,不需要数据库,有时也被称为平面文件 CMS 。

对于 Grav CMS 的基准测试,我们使用了免费的 Clean Blog 框架。值得注意的是 Grav CMS 已经不再与 HHVM 编译器兼容,它已经从 Travis 中 删除了 HHVM 环境

image.png

Grav CMS 基准测试

测试结果

  • Grav CMS 1.3.10 PHP 5.6 基准测试结果:34.83 请求/秒
  • Grav CMS 1.3.10 PHP 7.0 基准测试结果:53.37 请求/秒
  • Grav CMS 1.3.10 PHP 7.1 基准测试结果:53.37 请求/秒
  • Grav CMS 1.3.10 PHP 7.2 基准测试结果:55.12 请求/秒 ?
  • Grav CMS 1.3.10 HHVM 基准测试结果:不支持

我们可以再次看到最新版本的 PHP (7.2) 在 Grav CMS 中是明显的赢家。

October CMS 1.0.433

October CMS 是一个基于 Laravel 的免费、开源、自主托管的模块化 CMS 平台。它最初于2014年5月15日发布。

对于 October CMS 基准测试,我们使用了免费的 Clean Blog 主题。需要注意的是 October CMS 不再支持 PHP 5.6 和 HHVM。即使我们可以通过删除 PHP 检查来欺骗安装程序,但它在配置向导中出现了会报500错误导致安装失败。

  • 文章数量:5 在左边有两个边栏 (最新帖子和 Follow me)

image.png

October CMS 基准测试

测试结果

  • October CMS 1.0.433 PHP 5.6 测试结果:不支持
  • October CMS 1.0.433 PHP 7.0 测试结果:43.83 请求/秒
  • October CMS 1.0.433 PHP 7.1 测试结果:47.95 请求/秒
  • October CMS 1.0.433 PHP 7.2 测试结果:48.87 请求/秒 ?
  • October CMS 1.0.433 HHVM 测试结果:不支持

即使不支持两个引擎,我们可以看到 PHP 7.2 再次获胜。

很高兴看到这些小众的内容管理系统不再支持旧版本的 PHP。尽管这不是一个很大的优势。因为当谈到 WordPress 和其他平台占有大部分市场份额时,由于其兼容性问题,发展得比较缓慢。

Laravel 5.4.36 + 5.6

Laravel 是一个非常流行的用于开发Web应用程序的开源PHP框架。它由Taylor Otwell创建,并于2011年6月发布。

对于Laravel基准测试,我们使用了纯HTML主题。 测试运行多次并取平均值。 您可以在此电子表格中看到更多详细信息。

  • 帖子数量: 10 个使用 Blade 模板foreach循环展示
  • 数据库有一个 1posts
  • 这个表包含六个字段 post_titlepost_contentpost_authorcreated_atupdated_at
  • 关闭session
  • 在进行基准测试前运行 composer dump-autoload --classmap-authoritative, php artisan optimize --force, php artisan config:cache, php artisan route:cache

image.png

Laravel 5.4.36 基准测试

基准测试结果

  • Laravel 5.4.36 PHP 5.6 基准测试结果: 66.57 req/sec
  • Laravel 5.4.36 PHP 7.0 基准测试结果: 114.55 req/sec
  • Laravel 5.4.36 PHP 7.1 基准测试结果: 113.26 req/sec
  • Laravel 5.4.36 PHP 7.2 基准测试结果: 114.04 req/sec 
  • Laravel 5.4.36 HHVM 基准测试结果: 394.31 req/sec ?

HHVM以较大优势获胜。

需要注意的是,Laravel 5.6与HHVM不兼容,并且需要PHP 7.1或更高版本。

image.png

Laravel 5.6 基准测试

基准测试结果

  • Laravel 5.6 PHP 5.6 基准测试结果: 不兼容
  • Laravel 5.6 PHP 7.0 基准测试结果: 不兼容
  • Laravel 5.6 PHP 7.1 基准测试结果: 411.39 req/sec
  • Laravel 5.6 PHP 7.2 基准测试结果: 442.17 req/sec ?
  • Laravel 5.6 HHVM 基准测试结果: 不兼容

如果您将Laravel 5.6 PHP 7.2基准测试结果与Laravel 5.4.36的基准测试结果进行比较,差异是惊人的! Laravel在最新版本的PHP中运行效率非常好。

Symfony 3.3.6 + 4.0.1

Symfony 是一组可重用的 PHP 组件集合,同时也是一个用于创建 web、APIs、微服务和 web services 程序的 PHP 框架。它发布于2005年10月22日。

对于 Symfony 的基准测试,我们使用 Symfony Demo  和 MySQL (默认情况下使用的是SQLite)。测试被多次运行然后取结果的平均值。有一个重要的点需要注意,就是 HHVM 不能很好的工作并抛出了500错误。你可以在这个 表格 中查看更多的信息。

  • 文章数量: 10
  • 测试的URL: /en/blog/
  • composer dump-autoload -o, php bin/console doctrine:database:create, php bin/console doctrine:schema:create, php bin/console doctrine:fixtures:load, php bin/console cache:clear --no-warmup --env=prod

image.png

Symfony 3.3.6 基准测试

基准测试结果

  • Symfony 3.3.6 PHP 5.6 基准测试结果: 81.78 req/sec
  • Symfony 3.3.6 PHP 7.0 基准测试结果: 184.15 req/sec
  • Symfony 3.3.6 PHP 7.1 基准测试结果: 187.60 req/sec
  • Symfony 3.3.6 PHP 7.2 基准测试结果: 196.94 req/sec ?
  • Symfony 3.3.6 HHVM 基准测试结果: 不支持

PHP 7.2 再次成为冠军!

请注意 Symfony 4.0.1 的运行环境需要 PHP 7.1或以上。同时,HHVM再次不能正常工作并抛出 500 错误。

image.png

Symfony 4.0.1 基准测试

基准测试结果

  • Symfony 4.0.1 PHP 5.6 基准测试结果: 不支持
  • Symfony 4.0.1 PHP 7.0 基准测试结果: 不支持
  • Symfony 4.0.1 PHP 7.1 基准测试结果: 188.12 req/sec
  • Symfony 4.0.1 PHP 7.2 基准测试结果: 197.17 req/sec ?
  • Symfony 4.0.1 HHVM 基准测试结果: 不支持

这里没有惊喜,PHP 7.2 再次登顶。

PyroCMS 3.4.14

PyroCMS 是一个开源同时本质上是允许你更快的在框架上构建网站和应用的 Laravel 扩展。

针对 PyroCMS 基准测试,我们使用免费的 Accelerant 主题 (默认 PyroCMS 主题)。 需要着重注意的是 PyroCMS 不能在 HHVM 中运行,可能是由于依赖 Laravel

  • 帖子数量: 5
  • 调试模式开启 (APP_DEBUG=true)

image.png

PyroCMS 基准测试

基准测试结果

  • PyroCMS 3.4.14 PHP 5.6 基准测试结果: 不支持
  • PyroCMS 3.4.14 PHP 7.0 基准测试结果: 27.33 请求/秒
  • PyroCMS 3.4.14 PHP 7.1 基准测试结果: 27.81 请求/秒
  • PyroCMS 3.4.14 PHP 7.2 基准测试结果: 29.28 请求/秒 ?
  • PyroCMS 3.4.14 HHVM 基准测试结果: 不支持

PyroCMS 的测试结果非常相近, 但 PHP 7.2 再次表现的很好。

Pagekit 1.0.13

Pagekit 是一个由 YOOtheme 创建的开源模块化轻量 CMS。它是各种工具的集合,为创建更美好的网站服务。Pagekit 发布于 2016 年春。

在 Pagekit 基准测试中,我们使用的是免费的 One theme (Pagekit 默认主题).

  • 文章数: 5
  • 关闭缓存
  • 测试 URL: /blog

image.png

Pagekit 基准测试

测试结果

  • Pagekit 1.0.13 PHP 5.6 基准测试结果:51.70 请求/秒
  • Pagekit 1.0.13 PHP 7.0 基准测试结果: 108.61 请求/秒
  • Pagekit 1.0.13 PHP 7.1 基准测试结果: 112.30 请求/秒
  • Pagekit 1.0.13 PHP 7.2 基准测试结果: 116.18 请求/秒 ?
  • Pagekit 1.0.13 HHVM 基准测试结果: 61.16 请求/秒

Pagekit 运行在 HHVM 时看起来有些捉急,而 PHP 7.2 显然再次领跑各测试引擎。

Bolt CMS 3.4.8

Bolt CMS, 或者叫 Bolt,是一个开源的内容管理工具,他力求尽可能简单直白。 他基于 SilexSymfony 组件,使用 Twig 以及 SQLiteMySQL 或者 PostgreSQL

针对 Bolt CMS 基准测试, 我们使用免费的 Bolt Base 2016 主题。 着重注意的是 HHVM 不受支持 (#6921)。

  • 帖子数量: 5
  • 经过测试的网址: /entries
  • Session 仍处于启用状态

image.png

Bolt CMS 基准测试

Benchmark Results

  • Bolt CMS 3.4.8 PHP 5.6 基准测试结果: 33.45 请求/秒
  • Bolt CMS 3.4.8 PHP 7.0 基准测试结果: 60.21 请求/秒
  • Bolt CMS 3.4.8 PHP 7.1 基准测试结果: 67.96 请求/秒
  • Bolt CMS 3.4.8 PHP 7.2 基准测试结果: 72.05 请求/秒 ?
  • Bolt CMS 3.4.8 HHVM 基准测试结果: 不支持

我们可以在这里看到很不错的指标,每一次新发布的 PHPBolt CMS 可以看到一致的性能提升。

Anchor CMS 0.12.6 (pre-release)

Anchor 是一个超级简单,开源且轻量级的博客系统,可以使你专注于写作。
对于 Anchor CMS的基准测试,我们使用 Visual Idiot 编写的免费 默认主题

  • 帖子数:5

image.png

Anchor CMS 基准测试

基准测试结果

  • Anchor CMS 0.12.6 PHP 5.6 基准测试结果: 495.33 req/sec
  • Anchor CMS 0.12.6 PHP 7.0 基准测试结果: 546.02 req/sec
  • Anchor CMS 0.12.6 PHP 7.1 基准测试结果: 565.00 req/sec ?
  • Anchor CMS 0.12.6 PHP 7.2 基准测试结果: 561.73 req/sec
  • Anchor CMS 0.12.6 HHVM 基准测试结果: 487.71 req/sec

PHP 7.1 和 PHP 7.2 的测试结果非常接近,但是 PHP 7.1 在我们的性能测试中表现更快一些

PrestaShop 1.7.2.4

PrestaShop 是一个流行的并且快速增长的开源电子商务解决方案。它最初发布于2008年7月31日,同时根据 W3Techs的数据,它在互联网中的使用率是  0.6%

对于 PrestaShop 的基准测试,我们使用免费的  传统主题。请注意PrestaShop 不支持 HHVM

  • 产品数量: 7 (默认样品产品)
  • 测试 URL: /index.php
  • 页面缓存: 关闭, Smarty 缓存: 开启

image.png

PrestaShop 基准测试

基准测试结果

  • Prestashop 1.7.2.4 PHP 5.6 基准测试结果: 61.96 req/sec
  • Prestashop 1.7.2.4 PHP 7.0 基准测试结果: 108.34 req/sec
  • Prestashop 1.7.2.4 PHP 7.1 基准测试结果: 111.38 req/sec
  • Prestashop 1.7.2.4 PHP 7.2 基准测试结果: 111.48 req/sec ?
  • Prestashop 1.7.2.4 HHVM 基准测试结果: 不支持

测试结果是不相伯仲的,但是 PHP 7.2 勉强的挤进去成为领导者。

Craft CMS 2.6.3011

Craft CMS 是面向开发人员,设计人员和Web专业人员的专注内容管理系统,为客户提供灵活性和易用性的强大功能。

对于 Craft CMS 基准测试,我们使用免费的 默认主题.

  • 文章数量:5
  • 测试的 URL:/index.php?p=news
  • CraftCMS 带有自己的 Dockerfile。我们将其定制为与nginx兼容。

image.png

Craft CMS 基准测试

基准测试结果

  • Craft CMS 2.6.3011 PHP 5.6 测试结果:131.04 请求/秒
  • Craft CMS 2.6.3011 PHP 7.0 测试结果:266.54 请求/秒
  • Craft CMS 2.6.3011 PHP 7.1 测试结果:272.14 请求/秒
  • Craft CMS 2.6.3011 PHP 7.2 测试结果:280.02 请求/秒 ?
  • Craft CMS 2.6.3011 HHVM 测试结果:26.28 请求/秒

Craft CMS 在 HHVM 上表现的不好,但 PHP 7.2 又再一次是最快的。

Fork CMS 5.2.2

Fork 是一个使用 Symfony 组件的易用的开源 CMS。对于 Fork CMS 的基准测试,我们使用免费的默认 Fork 主题。需要注意的是 Fork CMS 需要 PHP 7.1 或更高的环境并且它不支持 HHVM。

  • 文章数量:2 (来自 ForkCMS 的默认样品数据)
  • 测试 URL:/modules/blog

image.png

Fork CMS 基准测试

测试结果

  • Fork CMS 5.2.2 PHP 5.6 测试结果:不支持
  • Fork CMS 5.2.2 PHP 7.0 测试结果:不支持
  • Fork CMS 5.2.2 PHP 7.1 测试结果:10.68 请求/秒
  • Fork CMS 5.2.2 PHP 7.2 测试结果:12.83 请求/秒 ?
  • Fork CMS 5.2.2 HHVM 测试结果:不支持

在性能方面,PHP 7.2 击败了 PHP 7.1。

升级 Kinsta 到 PHP 7.2

如果上述结果还不能说服你,我们不知道还有什么了。一个善意的提醒,如果你使用的是 Kinsta 客户端我们在 2017 年 12 月发布了 PHP 7.2 。如果你想看到性能的提升,你可以在你的 MyKinsta 仪表盘中轻松切换到 PHP 7.2 。

image.png

在 Kinsta 中切换到 PHP 7.2

如果你担心它与第三方插件不兼容(这有可能发生),这就是为什么我们使用分段站点的原因。 ? 你可以尝试它而不需要担心破坏你的生产环境。

基准测试结果

你可以清楚地从上面的测试中看到,纵观所有平台的性能时,php 7.2是领先的。?

  • 在上面测试的20个测试配置中,有14个可以表明 PHP 7.2 是最快的引擎。而有其中的两个(Drupal 和 Magento)目前还不支持 PHP 7.2,所以有可能是16个。
  • 就 WordPress 而言,php 7.2是所有测试中最快的(stock WordPress site,WooCommerce 和 Easy Digital Downloads)。
  • 在许多基准测试结果中,你可以轻松地发现每个发布的新版本php的性能提升模式。这就是为什么测试您的网站,插件等是非常重要的事情,坚持定期升级计划,你的访问者和客户会因为他们所期望的速度而感谢你!
  • 如果你的托管服务提供商不提供更新 PHP 的版本,那么你现在就应该考虑迁移它。

我们对PHP 7.2感到非常兴奋,并希望你也是!我们很乐意听到你对我们基准测试的想法,甚至你曾经升级过的体验。可以在下方评论中告诉我们。

讨论请前往 —— https://laravel-china.org/top...
查看原文

Aklman 收藏了文章 · 2018-03-23

【译】PHP:40+开发工具推荐

PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如Facebook、Digg和WordPress。和其它脚本语言相比,例如Python和Ruby,Web开发者有很多不错的理由皮偏爱PHP。
对于PHP开发者,在互联网上有很多可用的开发工具,但是找到一个合适的PHP开发工具是很难的,需要花费很多努力和时间。今天,就为开发者介绍45个方便的PHP工具。

Plates

Plates是一个简单易用的PHP模板系统。Plates是为那些喜欢使用本地模板而不是编译模板的人设计的。

Laravel

Laravel是一个有着优雅表达语言的开源框架。

Parsedown

一个Laravel的Parsedown包装器,能够将markdown编译成HTML。Parsedown运行很快,并支持GitHub flavored markdown.

Guzzle

Guzzle是一个PHP版的HTTP客户端,让PHP很容易的和HTTP/1.1协议一起使用,并能减少Web服务带来的痛苦。

Hoa

Hoa是一组PHP库,它创建了工业和研究之间的桥梁。

PHP-CPP

PHP-CPP是一个C++写的PHP扩展库。它提供了一个良好的文档记录和易于使用的类的集合,可以使用和扩展构建本地PHP扩展。

Twig

Twig是一个快速、安全和稳定的PHP模板引擎。

Requests for PHP

Requests是用PHP写的HTTP库。

The Prettifier

Prettifier为一些编程语言,如CSS/HTMl/XML/PHP/SQL/Perl等,提供了一个在线编辑、格式和语言高亮的平台。

Geocoder PHP

Geocoder是一个构建geo应用很好的库,为geocoding操作提供了一个抽象层。

Slim Starter

Slim Starter由Xsanisty创建,是创建高级Web应用的解决方案。

Mink

Mink是一个PHP库,可以让你以交互的方式在浏览器中测试Web APP,它移除了两种浏览器模拟器之间的API差异,为你提供一个更准确的测试环境。

Forp

Forp是用C写的PHP分析器。Forp是轻量级的PHP扩展,它提供了一个简单的PHP数组或JSON输出,其包含了完整的脚本调用堆栈和CPU和内存使用情况。forp是非侵入性,并提供PHP注释来完成工作。

Belt

对PHP开发者来说,Belt是一个非常有用的工具,它提供了超过60个有用的函数。

Icon Generator for PHP

Icon Generator允许你生成基于彩色背景的Icon图标,这和Gmail的类似。

Rainloop

Rainloop是一个免费开源的PHP Web邮件应用,它有现代的用户接口,支持SMTP + IMAP。

Pattern Lab

Pattern Lab不仅是一个前端框架,也是一个PHP驱动的静态网站生成器、项目模式库和前端风格指南。

Composer

Composer是一个独立的PHP管理插件,在你项目的根目录创建一个组合器文件,再运行一个命令,则你所有的依赖都可以下载使用了。

Directus

Directus是用Backbone.js创建的免费开源的、客户端友好的数据库GUI,它提供了丰富的功能用户快速开发和自定义数据库解决方案管理。

PHP Debug Bar

Debug可以很容易的集成到任何项目中,并能显示来自应用任何部分的分析数据。它来自于PHP内置数据收集器的特性和受欢迎的项目。

Phalcon PHP

Phalcon PHP是C扩展的一个Web框架,提供了高性能和低资源消耗。

Pinboard

Pinboard是一个MySQL存储引擎,为PHP的MYSQL使用情况提供了实时监控/统计数据服务的只读接口。

Casebox

Casebox是一个开源的PHP/MYSQL驱动的Web应用,用于存储和管理记录、任务和文件。它有一个类似桌面的界面,我们可以创建一个unlimited-level目录用于优先存储结构化的东西。

Munee

Munee是一个一体化库,开源处理很多与Web资源优化和操作相关的事情。Munee也有很强大的缓存功能,可以在服务器和客户端缓存资源。

ImageWorkshop

ImageWorkshop是一个基于GD库的开源类,可以帮助你用PHP管理图像。这个类很像PS、GIMP一类的图像编辑软件:你可以添加许多层或层组,每一层都有一个背景图像。

Sylius

Sylius为PHP而设计的免费开源的电子商务解决方案(基于Symfony2),它能够管理任何规模的商店和复杂的产品类别。

Pico

Pico是一个开源的CMS应用,没有多余的东西,这才是最重要的。它使用平面文件作为数据库,用PHP构建。简单的说,不用设置什么,这个APP就能运行。

PHP MyFAQ

PHP MyFAQ是一个稳定开源的PHP F.A.Q. 应用,为构建一个很好的F.A.Q.系统提供了很多功能,并提供了强大的管理界面来管理类别、条目、用户和查看统计数据。A###PHP Documentor
PHP Documentor能读取代码的结构,文件系统结构、类、函数和介于两者之间的,并生成文档。

CakePHP

CakePHP是一个开源的Web应用框架,遵循MVC模式,并有PHP编写。它仿照Ruby on Rails的概念,在MIT许可下发布的。

CodeIgniter

CodeIgniter是一个强大的、开源的PHP框架。

Monsta FTP

Monsta FTP是一个PHP云件,并能将FTP文件管理放置在Web浏览器中,你可以在浏览器中进行文件的拖放。

XAMPP

XAMPP是一个免费和开源的跨平台web服务器解决方案,主要包括Apache HTTP服务器、MySQL数据库、PHP和Perl编写的脚本解释器。

NetBeans

NetBeans是开源的,并允许你使用Java, HTML5, PHP, C/C++等快速开发桌面、移动和Web应用。

Aura

Aura为PHP5.4+提供了独立的库包。这些包可以单独使用,具有一致性、也能自我组合成一个完整的框架。

PHPCheckstyle

PHPCheckstyle是一个开源功能,能帮助PHP程序员保持一致的编码风格。该工具检查输入PHP源代码和报告任何违反给定的标准。

PHP Mess Detector

PHP Mess Detector易于配置,前端用户友好。它能检查代码中的潜在问题,包括可能的错误,次优的代码,未使用的参数,等等。

Kohana

Kohana一个基于PHP5的优雅的、开源和面向对象HMVC框架,由一群志愿者维护和开发。它的目标是迅速,安全,和轻量。

Sabberworm

用PHP编写的一个CSS文件解析器。Sabberworm允许提取CSS文件到一个数据结构,操纵结构和输出(优化的)CSS。

Nette

Nette框架是一个PHPweb开发的工具。它被设计成尽可能友好、易用。它侧重于安全性和性能,绝对是最安全的PHP开发框架之一。

PHP Markdown

这是一个库包,包含了PHP Markdown解析器和额外的功能扩展。Markdown是一个text-to-html的转换工具。

Yii 2

Yii 2完整重写它的先前版本1.1,Yii也是最流行的PHP开发框架之一。Yii是一个高性能的PHP框架,最适合开发Web 2.0应用程序。

PHP Sandbox

PHP Sandbox利用PHPParser来防止沙箱运行不安全的代码。它利用FunctionParser分解传递到沙箱的调用,这样,即使没有转换成字符串,PHP调用也可以在沙箱中运行。

译文出处:http://www.ido321.com/1546.html

英文原文:40+ tools for writing better PHP

查看原文

Aklman 收藏了文章 · 2018-03-23

开发人员面试工作经验大纲

面试时可能问到的公司情况:包括公司的地址,什么时候创建的,公司的规模(小公司、中型公司、大公司),公司的人员(主要讲开发团队,包括项目经理,项目主管,开发人员、测试人员)、项目周期:

需求分析

1.相关系统分析员向用户初步了解需求,然后用word列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。
2.系统分析员深入了解和分析需求,根据自己的经验和需求用WORD或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚列出系统大致的大功能模块,大功能模块有哪些小功能模块,并且还列出相关的界面和界面功能。
3.系统分析员向用户再次确认需求。

概要设计

首先,开发者需要对软件系统进行概要设计,即系统设计。概要设计需要对软件系统的设计进行考虑,包括系统的基本处理流程、系统的组织结构、模块划分、功能分配、接口设计、运行设计、数据结构设计和出错处理设计等,为软件的详细设计提供基础。

详细设计

在概要设计的基础上,开发者需要进行软件系统的详细设计。在详细设计中,描述实现具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试。应当保证软件的需求完全分配给整个软件。详细设计应当足够详细,能够根据详细设计报告进行编码。

编码

在软件编码阶段,开发者根据《软件系统详细设计报告》中对数据结构、算法分析和模块实现等方面的设计要求,开始具体的编写程序工作,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候吗?从来没有!

测试

测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能。软件测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。以上都很好理解,不再解释。总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会有不可预料的问题存在。完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,直到这个软件被彻底淘汰为止。

软件交付

在软件测试证明软件达到要求后,软件开发者应向用户提交开发的目标安装程序、数据库的数据字典、《用户安装手册》、《用户使用指南》、需求报告、设计报告、测试报告等双方合同约定的产物。
《用户安装手册》应详细介绍安装软件对运行环境的要求、安装软件的定义和内容、在客户端、服务器端及中间件的具体安装步骤、安装后的系统配置。
《用户使用指南》应包括软件各项功能的使用流程、操作步骤、相应业务介绍、特殊提示和注意事项等方面的内容,在需要时还应举例说明。

验收

用户验收。

维护

根据用户需求的变化或环境的变化,对应用程序进行全部或部分的修改

软件开发的时间:小型项目,团队人员6人左右,6个月;
中型项目,团队人员10人左右,12个月

示范如下:

我以前所在的深圳神柯软件开发公司在深圳龙岗区百花楼2层104,公司有员工100左右,该公司的主要业务是开发在线教育产品,如中小学1对1互助学习系统。我在公司进行了XXX在线教育系统的开发,所在的团队有15个人,包括项目经理、系统分析人员、架构师、开发人员、数据库设计人员、前端开发人员、测试人员等,软件周期从需求分析、概要设计、详细设计、编码、测试、软件交付、用户验收、维护,大概花了15个月。

以上内容虚构仅供参考

查看原文

Aklman 收藏了文章 · 2018-03-23

PHP小知识点

深入理解 PHP 之:Nginx 与 FPM 的工作机制

这篇文章从 Nginx 与 FPM 的工作机制出发,探讨配置背后的原理,让我们真正理解 Nginx 与 PHP 是如何协同工作的。

PHP 那些琐碎的知识点

作者记录的 PHP 的很奇特、很难记的知识点。

使用 RSA 和 AES 加密传输数据 js 到 php(前端非对称加密)

使用对称和非对称结合对前端传输进行加密, 理论上和 https 的破解难度是一样的.

如何组织 PHP 中的异常

这篇文章的目的是探讨一些在实际中怎么使用异常的方式。

说说 PHP 的魔术方法及其应用

魔术方法在特定的事件下触发,这真的很酷。作者在文中讲了什么是魔术方法及其应用。

探索 PHP 与 Vue 通用直出模板方案

我们通常说的 “页面直出”,其实就是服务端渲染(SSR, Server-Side Render)。最初的 JS SPA 方案有个常见的问题,就是脚本没有加载执行完时,页面中没有内容。不仅影响访问体验,还不利于 SEO。

php 大数据量及海量数据处理算法总结

下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。

PHP 易错知识点整理

  1. 注意echo和print的区别 PHP中echo和print都是输出的作用,但是两者之间还是有细微的差别。echo输出后没有返回值,但print有返回值,当其执行失败时返回flase。因此可以作为一个普通函数来使用,例如执行$r = print "Hello World"…


基于 RabbitMQ 和 Swoole 实现的一个完整的异步任务系统

基于 RabbitMQ 和 Swoole 实现的一个完整的异步任务系统,包括多进程消费,异常重试等等。

PHP 技术百问

作者整理的关于 PHP 的技术问题与精华回复。包括了概念普及问题、新手上路问答、PHP 上云常见问题、PHP 进阶大牛指导、常见故障排查等。

php 生成随机红包算法

如何在 1.3s 生成 30W 个随机红包。

PHP 实现定时任务的几种方式和详解

定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等。如果非要用 php 实现定时任务,那么文章中的几个方法是可以参考的。

PHP 异步编程: 手把手教你实现 co 与 Koa

关于 PHP 的干货分享。

PHP 高级编程之消息队列

讲解消息队列以及消息队列的使用场合和实现消息队列框架的实现等等。

php 源码阅读

作者分享了阅读 PHP 源码的一些理解。

php 模板引擎的原理与简单实例

模板引擎其实就是将一个带有自定义标签的字符串,通过相应的规则解析,返回 php 可以解析的字符串,这其中正则的运用是必不可少的,所以要有一定的正则基础。

PHP 底层的运行机制与原理

PHP 说简单,但是要精通也不是一件简单的事。我们除了会使用之外,还得知道它底层的工作原理。了解 PHP 底层实现的目的是什么?动态语言要像用好首先得了解它,内存管理、框架模型值得我们借鉴,通过扩展开发实现更多更强大的功能,优化我们程序的性能。

正则表达式学习笔记

正则表达式对于我来说一直像黑暗魔法一样的存在。手机正则去网上搜,邮箱正则去网上搜,复杂点的看看文档拼凑一下,再复杂只能厚着脸皮让其他同事给写一个。从来没有系统的学习过,今天准备拿下它。 1. 学习目标: 了解正则表达式语法 在IDE中使用正则表达式 在javascript 中使…

PHP 安全性漫谈

本文所讨论的安全性环境是在 Linux+Apache+Mysql+PHP。超出此范围的安全性问题不在本文范畴之内

成为高级 PHP 程序员的第一步——调试(xdebug 配置篇)

PHP 调试的 xdebug 的配置篇。

Composer的安装与使用以及自动加载的实现

昨天周一,是项目部后端团队的技术分享日,正好是我来负责这次分享,分享的题目之前就已经订好了,是《Composer的安装与使用》。今天手头不忙,总结一下,分享过程中掌握的Composer知识点。总所周知,Composer 是 PHP 的一个依赖管理工具。它允许我们在自己的项目中申…

Kafka-php - 使用纯粹的 PHP 编写的 kafka 客户端

「唯一一个原生 PHP 实现的 Kafka php client 微博广告出品」

PHP 错误与异常的日志记录

提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志、error 日志以及 PHP 的 error 日志。虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用。再者运行的应用程序中的配置也会影响到日志记录的方式及内容。

PHP:打造一个无限极评论模块

作者不采用插件完成无限极评论的过程。

演讲实录:使用 Go 开发秒杀系统的实践

应对百万秒杀,不是写了一手好代码就能完成。

理解数组在 PHP 内部的实现

数组在 PHP 内部的实现

2016 第二届 PHP 全球开发者大会回顾(文末附演讲嘉宾所有资料下载)

继前年的 “PHP7 初探”、去年的“高性能的 PHP ” 主题后,2017 第三届 PHP 全球开发者大会的活动主题是“高可用的 PHP ”,本次活动,我们将在 PHP7 这个日趋成熟的 PHP 版本之上,与大家探讨 PHP 开发和运维中的高可用性挑战。

用二级缓存提高缓存命中率和内存使用效率

一直都没找到二级缓存在 php 中应用的比较好的资料和案例,由于范凯 RobbinWeb 应用的缓存设计模式和 Hibernate 二级缓存的启示,记下这篇二级缓存在 Eloquent ORM 中的应用。

如何快速搭建一个管理后台 - 权限管理

处理权限控制是做后台系统时迈不过的一道坎,这篇文章分享了,权限控制到底控制什么,如何去控制等~

spa 实例 github: https://github.com/chen-wen/v...

PHP7 内核知识

作者断断续续用了一个月左右总结出的知识分享。

新兴的 web 服务器 caddy

caddy 是一个像 Apache, nginx, 或 lighttpd 的 web 服务器。 你要问 nginx 已经很好了,为什么要用 caddy 呢?

PHP 内核分析:Zend 虚拟机

PHP 是一门解释型的语言。诸如 Java、Python、Ruby、Javascript 等解释型语言,我们编写的代码不会被编译成机器码运行,而是会被编译中间码运行在虚拟机(VM)上。运行 PHP 的虚拟机,称之为 Zend 虚拟机,这篇文章深入内核,探究 Zend 虚拟机运行的原理。

OPCache 源码分析 (PHP)

这篇文章主要从 Opcache 源代码的角度, 对其主要流程进行分析介绍.

PHP 类的自动加载机制

我们在常见的 PHP 的框架如 YII、TP 中通常写好一个类只需写好相应的命名空间就可以实现类的使用。那么你知道为什么不再需要使用 include 文件了吗? 框架是怎么帮你做到这个文件的引用的呢?其中的原理就是——类的自动加载。

搞懂 nginx 的 rewrite 模块

nginx rewrite 模块讲解

php 数组练习题 | 海诺博客

整理了几个培训新手程序员的 数组题目,用于培养数据结构意识,发布在这里希望跟大家一起探讨下,新手程序员培训数据结构怎么培训,尤其是快速培训数据结构意识。

2017 百度前端技术学院——正则表达式入门

正则表达式入门

知道这 20 个正则表达式,能让你少写 1,000 行代码

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。

Redis 常见 7 种使用场景 (PHP 实战)

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 本篇文章,主要介绍利用 PHP 使用 Redis,主要的应用场景。 简单字符串缓存实战 $redis->connect('127.0.0.1',…

OAuth 2.0 第三方平台授权及 OAuth Scribe 库介绍

OAuth 2.0 第三方平台授权及 OAuth Scribe 库介绍

PHP 面向对象基础总结

一些有关面向对象的基础知识的总结。

查看原文

Aklman 关注了专栏 · 2018-03-20

Salamander

上帝在我很小的时候送给我了两个苹果,一个红苹果,一个蓝苹果。红苹果代表疯狂,蓝苹果代表思考

关注 45

Aklman 回答了问题 · 2018-03-20

解决问问关于引用与指针的区别

一句话:引用的本质在内部实现一个指针常量。引用作为其它变量的别名而存在,因此在一些场合可以代替指针。

我给你看几个有关指针的图

1.指针定义和使用
01指针定义和使用
2.野指针
野指针
3.万能指针
万能指针
4.指针修改常量
指针修改常量
5.指针和数组
指针和数组
6.多级指针
多级指针
7.指针数组
指针数组
相关解答地址:引用与指针的区别

关注 3 回答 2

Aklman 关注了用户 · 2018-03-20

汤青松 @songboy

《PHP Web安全开发实战》 作者

关注 5936

Aklman 关注了用户 · 2018-03-20

关注 18

Aklman 关注了用户 · 2018-03-20

韩天峰 @hantianfeng

Swoole 开源项目创始人

关注 3195

Aklman 关注了用户 · 2018-03-20

洪旭 @manager

欢迎关注我的微博:@码云

关注 88

Aklman 关注了用户 · 2018-03-20

kumfo @kumfo

程序生存法则:ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎
1.不要写死
2.不要相信产品⎝≧⏝⏝≦⎠
设计生存法则:
1.不要相信这是最终效果图
2.不要相信产品

测试生存法则:
1.不要立flag
2.不要相信程序
产品生存法则:
1.不要相信任何人
2.注意人身安全
运营生存法则:
1.不要相信任何人
2.躲在产品身后

关注 2070

Aklman 关注了用户 · 2018-03-20

member @var

擅长计算机开关机、Windows系统的安装。
请大家不要向我付费提问

关注 143

Aklman 关注了用户 · 2018-03-20

cevin @cevin

PostgreSQL布道者

叫我杠头,抬杠就是毕生追求 你不痛快我就痛快了

关注 91