Month: June 2019

  • PHP高级——autoload(类的自动加载)机制

    通常我们在引用外部 class 时,会直接使用 include(include_once) 和 require(require_once) 函数来把 class 文件包含进来。这种做法在大型项目中并不可取,原因是:大型项目需要引用更多的 class 文件,从而使得代码难以维护且降低整体性能。因此PHP官方提供了这样一种解决方案——autoload 机制。 PHP内部的 autoload 机制: php内部提供两种方法来实现自动装载机制,一种是使用用户自定义的 _autoload 函数。另外一种就是设计一个函数,将执行器全局变量函数指针 autoload_func 指向它,这通常使用C语言在PHP扩展中实现。 如果既实现了__autoload()函数,又实现了autoload_func(将autoload_func指向某一PHP函数),那么只执行autoload_func函数。 autoload 发展史 : 早先,PHP5 在使用一个类的时候,如果这个类没有加载,就会自动运行 _autoload 函数,我们需要自己先实现一个 _autoload 函数,这个 _autoload 函数需要做三件事:根据类名得到实际类文件名,确定该类文件的实际磁盘路径,加载该类文件。这种方法的缺点是:在面对大量的类文件时,该函数编写会变得很复杂,相较于原来维护可能会方便一点点,还是会影响整体性能。 目前,我们采用的是 SPL autoload 机制(Standard PHP library)。这种机制是将函数指针 autoload_func 指向 spl_autoload 或 spl_autoload_call 函数来实现两种加载方式。 spl_autoload($class_name,$file_extensions) 通过使用 spl_autoload_register() 就可以将 autoload_func 指向 spl_autoload()。 接受两个参数,参数一是类名,参数二类文件的扩展名。该函数和 require/include 差不多,不同的是可以指定多个扩展名。不推荐 spl_autoload_call()…

  • 前端——PWA技术

    近些年web技术发展猛烈: 出现了打包工具:webpack、rollup等。 转译工具:babel(转义ES6、7,至大部分浏览器支持的ES5),PostCSS可以模块化编写CSS。 TypeScript 可以转义为 js。 React、Angular、Vue 等现代 web 前端框架。 同构 js 应用,可以将服务端的渲染转移至客户端。 PWA(progressive web apps)技术特点(优势) 开发成本低,迭代快,跨平台强,体验较好。兼具web应用和原生应用的优点。 可以在离线环境下使用,不依赖于网络连接 能够像原生应用一样被添加至主屏,且响应式用户界面。 能在未使用的状态下发起推送通知 与操作系统集成能力进一步提高 从 Hybrid Apps(混合应用)进化至 PWA。 PWA 使用的关键技术 web app manifest:通过一个清单文件,向浏览器暴露web应用的元数据,包括名字、icon的url等,承载着web应用和操作系统集成能力的重任。 Service Worker:用来缓存,同时可拦截处理响应流经的HTTP请求。离线优先的架构。 Push Notification:用来推送消息,不依赖浏览器。 PWA IN CHINA: 国内较为重视IOS,而IOS目前还不支持。 国内android,不自带chrome,可能有兼容问题。 依赖GCM推送的通知不可用,web push protocol 在国内还没实现。 国内 webview 环境复杂,标准不一,比如微信内置的浏览器。 未来,PWA的发展会越来越好,它是一种提高用户体验,加快开发进度,降低开发成本,不依赖于商店应用分发的趋势。 有一次我骗她说我去睡觉了, 但我还在朋友发的说说下面评论, 她没有问我为什么骗她, 而是问我怎么醒了。 —— 网易云音乐

  • 微服务

    58转转的微服务架构 如下图所示: 一、分层,垂直拆分 在网关层面进行用户身份的校验。 在聚合层进行业务逻辑处理。这一块可以根据功能,进行横向的拆分,分为search、trade、info等横向的模块。 在原子层进行 增删改查 等数据库和缓存基础逻辑 二、通信模块 1.用户和微服务网关之间使用 https/http 协议,传输使用 json,使用 REST API。 2.服务器内部之间使用 RPC 协议(数据量小,长连接,数据安全),SCF 和私有协议。 三、微服务控制 1.需要将微服务(主要是网关层、聚合层、原子层三个层面,也许可以加上数据层)的配置信息(host,port,config等信息)存于注册中心,方便进行控制编辑,负载均衡(keepalive,retry)和下游服务发现 四、柔性可用实践 系统降级 =》 数据层降级 =》 柔性可用策略 系统降级:拒绝部分老请求,对新的请求进行响应,使用RPC队列方式;非核心请求丢弃,保留核心请求(核心业务);随机丢弃一定比例的请求 数据层降级: 更新请求:持久化到消息队列,只更新缓存 读请求:读缓存 事后数据补齐:消息队列 -> 持久化到数据库 柔性可用策略: 监控和记录日志,并且能进行报警。微服务监控框架:open-falcon 进程监控:alive 语义监控:模仿用户进行检测返回值是否符合预期。 错误日志监控 数据波动监控:流量的突增突减 ,请求平均耗时和请求异常条数。 机器资源监控:机器资源不足。cpu,内存,磁盘等; 许多人所谓的成熟,不过是被生活磨去了棱角,变得世故而实际了。 那不是成熟,那是精神的早衰和个性的夭亡。 真正的成熟,应当是独特个性的形成,真实自我的发现,精神上的结果和丰收。 —— 周国平《灵魂只能独行》

  • windows 手记

    2022.02.25 WSL 2022.01.16 windows terminal:代替 powershell 或者 CMD 那个不太好看的框框 同时也可以通过编辑“新的配置文件”用来代替 xshell ,非常方便。 安装:在 Microsoft Store 中搜索 windows terminal 下载即可。 docker:将 mysql ,ELK,redis,mongodb 都安装上面,随时可升级。 VirtualBox:用来安装一个 Centos 耍耍,windows 来当作沙盒运行一些未知的软件。 Typora:markdown 的编写软件,下载以前的版本,不收费。 微软必应词典:如名。 github.com:在上面搜索软件,都是开源的。 2019.09.18 最近下班后经常玩电脑,所以一般电脑就没关机,不用了就睡眠模式,结果发现了一个问题。睡眠模式下这货总是半夜自己启动,把屏幕点亮,扰乱我睡眠质量。不能忍,上网搜了一大圈后,解决办法如下: 进入:控制面板-硬件和声音-电源选项-当前的电源计划-高级设置-睡眠-允许使用唤醒定时器!!!禁用!!!ok~ 原文: 平常开发经常用到的软件 Navicat 数据库管理软件,这个软件可以定时备份数据库。 7zip ,小巧快速的开源压缩软件。 TreeSize Free ,快速查看文件夹下目录和文件大小,占比等。 sublimeText 快速编辑文件,markdown式的笔记。 phpstudy 本地测试环境,请用最新的版本,功能更加丰富。 xftp / File Zilla ftp上传软件。 xshell 远程连接工具 git…

  • thinkphp3的小问题

    虽说thinkphp6都已经出来了,但是还是有几个项目是thinkphp3写的,有时候还需要维护增加新的功能,因此遭遇到了很多小问题。 最重要的一点:debug 设置为 false;其次,如果出了问题,首先把 Runtime 目录全部删除。然后,再细细排查。 凡是在controller下引用其他非框架自带的类,一定加 \ ,eg: new \ReflectionFunction(‘xxx’)。原因:TP默认在controller实例其他类,默认会加上命名空间!!! 数据库的报错显示,有时用M()->getError(),有时又得用M()->getDbError(); 模板里面使用 __SELF__,这个模板变量在第一次生成缓存文件后就是固定不变的了,用且谨慎。 同一个方法里,I(‘status’) 不能同时获取 get/post值!!!request.status 可以获取到; 自动验证里验证规则 require 对值为数组的字段会验证失败。 做一个知世故而不世故,历圆滑而弥天真的人。 做到温暖,真诚,懂得换位思考。 —— ?

  • composer——现代PHP的基石

    composer设置,简介