TouchSlide 1.1 在展示显示元素不是100%宽度的时候,将元素宽度改为父级宽度的问题,导致不能显示部分第2个元素。问题是元素被使用了父级宽度导致的,滑动宽度还应加上左右margin的宽度:

微信图片_20191209143351.png

需要修改的地方:

//130行
var slideW= conBox.parentNode.clientWidth;// mainCell滑动距离
//修改为以下内容
    var elW = conBox.children[0].clientWidth; // 元素宽度
    var slideMl= getStyleVal(conBox.children[0], 'marginLeft');
    var slideMr= getStyleVal(conBox.children[0], 'marginRight');
    var slideW= elW + slideMl+slideMr;// mainCell滑动距离

//159行
for ( var i =0; i<tempSize; i++ ){  conBox.children[i].style.cssText="display:table-cell;vertical-align:top;width:"+slideW+"px"  }
//修改为
for ( var i =0; i<tempSize; i++ ){  conBox.children[i].style.cssText="display:table-cell;vertical-align:top;width:"+elW+"px"  }

#列出php-fpm进程,按内存排序
ps -ylC php-fpm --sort:rss

1.png

#列出所有用户的进程
ps aux | grep php-fpm

Linux上进程有5种状态: 

进程状态 含义 对应ps命令的状态码
运行 正在运行或在运行队列中等待 R 运行 runnable (on run queue) 
中断 休眠中, 受阻, 在等待某个条件的形成或接受到信号 S 中断 sleeping 
不可中断 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 D 不可中断 uninterruptible sleep (usually IO) 
僵死 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 Z 僵死 a defunct (”zombie”) process 
停止 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行 T 停止 traced or stopped 

 ps命令有很多参数,具体如下:

命令 含义
e 显示所有进程,环境变量
f 全格式
h 不显示标题
l 长格式
w 宽输出
a 显示终端上地所有进程,包括其他用户地进程
r 只显示正在运行地进程
x 显示没有控制终端地进程
u 以用户为主的格式来显示程序状况
au 显示较详细的资讯
aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示

其中STAT状态位常见的状态字符有
D      //无法中断的休眠状态(通常 IO 的进程); 
R      //正在运行可中在队列中可过行的; 
S      //处于休眠状态; 
T      //停止或被追踪; 
W      //进入内存交换 (从内核2.6开始无效); 
X      //死掉的进程 (基本很少见); 
Z      //僵尸进程; 
<      //优先级高的进程 
N      //优先级较低的进程 
L      //有些页被锁进内存; 
s      //进程的领导者(在它之下有子进程); 
l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); 
+      //位于后台的进程组;

配置:在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。
https://www.php.net/manual/zh/install.fpm.configuration.php

pm string
#设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。
#static - 子进程的数量是固定的(pm.max_children)。
#ondemand - 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时 pm.start_servers 就启动了。
#dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。

pm.max_children int
#pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。
#该选项设置可以同时提供服务的请求数限制。类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量。

pm.start_servers in
#设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

pm.min_spare_servers int
#设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_spare_servers int
#设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.process_idle_timeout mixed
#秒数,多久之后结束空闲进程。 仅当设置 pm 为 ondemand。 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:10s。

pm.max_requests int
#设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 '0' 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。

pm.status_path string
#FPM 状态页面的网址。如果没有设置,则无法访问状态页面,默认值:无。

access.log string
#Access log 文件。 默认值:不设置

access.format string
#access log 的格式。 默认值: "%R - %u %t \"%m %r\" %s"

查看状态:

//查看当前php-fpm总进程数, 其中RSS就是占用的内存情况
ps -ylC php-fpm --sort:rss

下载框架:https://github.com/yiichina/yii

创建一个新的空白应用(cmd 命令):

framework/yiic [appname] [path/to]
  • 入口配置:protected/config/main.php
'components'=>[
    //伪静态配置
    'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),
]
  • 伪静态:.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(.*)\.(css|jpg|js|gif|png|bmp)/
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
//获取配置文件main中的配置值和应用组件
Yii::app()->basePath;
Yii::app()->name;
Yii::app()->params->adminEmail;
//组件配置在main中的components键中
Yii::app()->db;
Yii::app()->cache;
Yii::app()->user;
  • 可以在controller 目录创建 actions (可自定义)目录用于存放action类,达到action复用的目的:
//protected/controllers/post/UpdateAction.php
class UpdateAction extends CAction {
    public function run() {
        // place the action logic here
    }
}

//protected/controllers/ArticleController.php
class ArticleController extends Controller {

    public function actions() {
        return [
            'edit'=>'application.controllers.post.UpdateAction'
        ];
    }
}
  • 可以在action方法中加入参数,可直接获取到get来的参数:
public function actionView($id, $act, $name='joyber') {
    // main中的路由配置中的$id动态参数
    echo $id;
    // $_GET['act']
    echo $act;
    // $_GET['name'] 不存在name参数时默认值:joyber
    echo $name;
    // post xxy
    $xxy = Yii::app()->request->getPost('xxy');
}
  • widget 自定义组件 可以放在components 目录 视图中应用:<?php $this->widget('MyWidget', ['data'=>123]) ?>
//components/MyWidget.php
class MyWidget extends CWidget {

    public $btn;

    public function init() {

        // 此方法会被 CController::beginWidget() 调用
    }

    public function run() {
        // 此方法会被 CController::endWidget() 调用
        parent::run(); // TODO: Change the autogenerated stub
        $this->render('my', ['btn'=>$this->btn, 'name'=>'my test widget']);
    }

}

//view file: components/views/my.php
<input type="text" value="<?=$name?>">
<button><?=$btn?></button>