1. 在server->start()之前,不要将资源连接用于共用(static或设置到server->var中) worker或task是从主进程中fork,进程间不能共用资源连接
  2. 尽可能在start前加载足够少的文件、对象

php使用blpop时,隔一段时间连接被关闭,做以下检查

  1. redis.conf 配置 timeout = 0
  2. php设置配置  default_socket_timeout, 如 ini_set(‘default_socket_timeout’, -1);

当数据量与搜索并发增大后,服务压力明显,通过以下方式改进

  1. 将索引分段分布到几台服务器,使用 index:local/agent合并索引索引
  2. 将建索引分离到单独服务器,使用indexer –nohup建立.tmp索引文件,使用–check创建 .new索引文件,将.new索引文件复制到搜索服务器,重启搜索服务 seached –stopwait && searchd
  3. 如果是随时间增量,分断索引更新频率
  4. 使用lvs进行负载均衡
  5. 增量索引使用
  6. 部分不好实现的业务使用其它搜索引擎,如 Elasticsearch

 

常用于创建唯一dom

使用动态组件

组件的数据实始化使用function返回,否则无法初始化,如

状态改变的hook, 使用了route的组件,如果需要记得写router.activeate

其它

数据(特别是复杂的对象)的改变尽量使用set函数或watch,如

使用computed属性来设置动态变量

在线编辑器

加载编辑器js等相关资源,在组件事件函数中渲染组件

官方文档说明:
http://rc.vuejs.org/guide/components.html#Component_Option_Caveats
http://vuejs.org/guide/components.html#activate_Hook

根据请求的api获取class, 即需要一个Api class loader,  api格式如 xxx.xxx.xx

需要一个api 的基类,根据请求参数返回结果

弄个js客户端

接口文档及web接口测试

1233

加一个接口日志及统计收工

有需要web在线查看对象文档需求,简单测试可行

 

Phalcon的注解(Phalcon\Annotations\*)

 

Reflection
注解反射对象, 获取类方法,属性,类等的注释

常用方法, 返回 Collection, 可遍历的对象集合(Annotation)

Reflection的使用参考:

Annotation 注解类
获取单个注解的名称、参数表达式等

注解示例

 

PHP相关工具参考:

doctrine/annotations
https://github.com/doctrine/annotations

PHP反射相关接口参考:

http://php.net/manual/zh/book.reflection.php

一直没有时间整理之前的笔记,现在打算每个星期花点时间整理一下,以存根

错误(Error)

php程序自身不能正常的执行,根据严重情况分为多种错误等级

  • 致命错误:语法、未定义调用(对象、函数)等,立即中断流程执行,属于程序严重bug,  必须立即修复
  • 其它错误:php执行未达预期的结果, 程序流程继续执行,潜在bug需要记录错误,并修复
  • 用户错误:使用trigger_error主动抛出,不中断程序执行流程

错误处理机制

  • 非致命错误:set_error_handle(error_function, error_types)
  • 致命错误:程序只能中止执行,在中止前可以通过 注册 register_shutdown_function, 使用 error_get_last获取相关错误信息,以便于记录查阅
  • 记录错误日志: 可以使用error_reporting来设置当前脚本的错误报告级别,在php.ini配置或通过ini_set()函数设置log_errors = on, error_log = LOG_FILE来记录错误日志

异常(Exception)

大多数应用于应用逻辑未达预期,中断当前业务流程处理,直到将流程控制权交给适合的错误处理者,利于程序多层结构,每层处理自己能处理的错误,避免各层对错误大量if判断处理的存在,便于程序将正常处理代码与错误处理代码进行分离

异常处理机制

  • 立即处理:在当前异常发生后立即处理,及时采取补救措施不影响业务逻辑的完整性, 比如为保证数据一至性等需求
  • 上层处理:处理当前层能处理的错误
  • 集中处理:最后一道处理异常的机会, 比如集中记录异常,显示错误信息提示,根据异常类型作出合适的跳转等,也可通过set_exception_handler()捕获未处理的异常

函数无阻塞测试

函数有阻塞测试

如果当前goroutine不发生阻塞,它是不会让出CPU给其他goroutine的, 所以例子一中的输出会是一个一个goroutine进行的,而sleep函数则阻塞掉了 当前goroutine, 当前goroutine主动让其他goroutine执行, 所以形成了逻辑上的并行, 也就是并发。

真正并行

runtime调度器

runtime调度器是个很神奇的东西,但是我真是但愿它不存在,我希望显式调度能更为自然些,多核处理默认开启。
关于runtime包几个函数:

  • Gosched 让出cpu
  • NumCPU 返回当前系统的CPU核数量
  • GOMAXPROCS 设置最大的可同时使用的CPU核数
  • Goexit 退出当前goroutine(但是defer语句会照常执行)

参考:
http://blog.csdn.net/kjfcpua/article/details/18265461