脚本

开发自己的脚本引擎(一)先吹吹水,再干事情。

自作多情 提交于 2019-12-06 15:21:16
开发自己的脚本引擎(一)先吹吹水,再干事情。 vczh 其实我很早以前就想写一些关于脚本引擎开发的文章了。后来由于自己要写一些程序而暂停了这个计划。其实写这篇文章的原因很简单,我在开发脚本引擎的时候在网上找不到适合自己看的资料,不过最后还是做成了,那么就贡献一下吧。 在文章的开头我先声明一下,本文章不是学术论文,不是《编译原理》的入门资料。我写的只是我自己知道的一些东西。本文章讨论的技术之可以用来参考,在实际开发过程中还是要结合自己的实际情况进行优化。 记得我第一次开发ARPG的时候是高一,当时基本上处于小鸟状态,为了支持剧情就自己琢磨了一个简单的命令控制脚本。后来觉得不爽就开发了一个语法类似Pascal的。后来由于转到了VC++,就用C++再写了一次脚本引擎。这次语法当然是模仿C++的啦。后来在开发这个脚本引擎的过程中也学到一些东西。 本文章是整个系列文章的第一篇,在这里我就只讲一个大概,具体的实现细节会在接下来的文章中详细描述。 一个脚本引擎的结构是什么样子的呢?我们可以先从其工作流程看起。一开始就需要一些脚本代码(你可以把这些代码写在文件里),然后就用一个东西把这些代码读进去折腾一下,折腾出来的结果就送到另一个东西去运行。这个东西在运行的时候,碰到自己无法处理的事情,就把那些信息扔给你,你接着干,干完了让它继续工作。于是很明显,就是一个编译器和一个虚拟机

webpack优化

浪子不回头ぞ 提交于 2019-12-06 14:47:09
背景: 运行环境:node v11.2.0 ;webpack 4.27.1 性能检测工具:webpack-bundle-analyzer 优化前视图: stat: 12.06M (打包之前输入的文件大小) parsed: 5.51M(打包之后输出的文件大小) gzipped: 1.68M(开启gzip压缩后的文件大小) 从analyzer视图来看,最大的chunk2.47M,较大的也有700多k,500多k,400k等,从这些大chunk入手,进行优化。 问题: 项目体积过大 多个工具被打包到一个chunk,导致chunk过大,加载比较费时 当前页面不需要用到的工具库同时被加载,性能变差 优化项: 1. cdn引入。 externals排除第三方工具库,不打包进项目中。index.html中,script标签引入这些工具库。 优点:减少项目体积 问题:直接在index.html中引入,同样导致不需要的工具库被加载;如果cdn不稳定,有可能导致项目瘫痪; 2.轻量级工具库替换 moment.js替换为更为轻量的dayjs 3.按需引入 有些工具库,用到的方法,可能只是其中几个,但是却把整个库引了进来,加大项目体积。建议考虑按需引入。 排查中,较大的库有element.ui,echarts,c3,d3。 -- element.ui element.ui按需引入方案可见官网 https:

RSYNC远程同步服务

有些话、适合烂在心里 提交于 2019-12-06 14:35:10
rsync安装 yum -y install rsync master: vim /etc/rsyncd.conf uid = nobody        //用户名 gid = nobody        //组别 use chroot = yes      //禁锢在源目录 address = 192.168.200.112 //监听地址 port = 873          //监听端口 log file = /var/log/rsyncd.log //日志文件位置 pid file = /var/run/rsyncd.pid //存放进程ID文件位置 hosts allow =192.168.200.0/24 //允许访问的客户端地址 [wwwroot]          //共享模块名称 path = /var/www/html      //源目标的实际路径 comment = Document Root os www.crushlinux.com //描述信息 read only = yes        //是否为只读 dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z   //同步时不再压缩的文件类型 auth users = backuper       //备份授权用户 secrets file = /etc

日志消费 Flume 启动停止脚本

删除回忆录丶 提交于 2019-12-06 14:32:40
1)在/home/hadoop/shell 目录下创建脚本 f2.sh [hadoop@elk01 shell]$ vim f2.sh 在脚本中填写如下内容 #! /bin/bash case $1 in "start"){ for i in elk-03 do echo " --------启动 $i 消费 flume-------" ssh $i "nohup /bd/flume-1.7/bin/flume-ng agent --conf-file /bd/flume-1.7/conf/kafka-flume-hdfs.conf --name a1 -Dflume.root.logger=INFO,LOGFILE >/bd/flume-1.7/log.txt 2>&1 &" done };; "stop"){ for i in elk-03 do echo " --------停止 $i 消费 flume-------" ssh $i "ps -ef | grep kafka-flume-hdfs | grep -v grep |awk '{print \$2}' | xargs kill" done };; esac v> 2)增加脚本执行权限 [hadoop@elk01 shell]$ chmod u+x f2.sh 3)f2 集群启动脚本 [hadoop@elk01

动态加载js文件的正确姿势

十年热恋 提交于 2019-12-06 14:22:01
最近在做一个为网页生成目录的工具 awesome-toc ,该工具提供了以jquery插件的形式使用的代码,也提供了一个基于 Bookmarklet (小书签)的浏览器插件。 小书签需要向网页中注入多个js文件,也就相当于动态加载js文件。在编写这部分代码时候遇到坑了,于是深究了一段时间。 我在这里整理了动态加载js文件的若干思路, 这对于理解异步编程很有用处,而且也适用于Nodejs 。 代码整理在了 https://github.com/someus/how-to-load-dynamic-script 。 硬编码在html源码中的script是如何加载的 如果html中有: <script type="text/javascript" src="1.js"></script> <script type="text/javascript" src="2.js"></script> 那么,浏览器解析到 <script type="text/javascript" src="1.js"></script> 会停止渲染页面,去拉取 1.js (IO操作),等到 1.js 的内容获取到后执行。 1.js执行完毕后,浏览器解析到 <script type="text/javascript" src="2.js"></script> 进行和 1.js 类似的操作。

JS的并行加载与执行顺序

浪子不回头ぞ 提交于 2019-12-06 14:21:35
JavaScript文件(下面简称脚本文件)需要被html文件引用才能在浏览器中运行。在html文件中可以通过不同的方式来引用脚本文件,我们需要关注的是,这些方式的具体实现和这些方式可能会带来的性能问题。 当浏览器遇到(内嵌)<script>标签时,当浏览器无从获知JavaScript是否会修改页面内容。因此,这是浏览器会停止处理页面,限制性JavaScript代码,然后再继续解析和渲染页面。同样的情况也会发生在使用src属性加载JavaScript的过程中(即外链JavaScript),浏览器必须先花时间下载外链文件中的代码,然后解析并执行它。在这个过程中,页面渲染和用户交互完全被阻塞了。 也就是说,每当浏览器解析到<script>标签(无论是内嵌还是外链)时,浏览器会(一根筋的)优先下载、解析并执行该标签中的JavaScript代码,而阻塞了其他所有页面内容的下载和渲染。 五种引用脚本的方式: 1.惯例的做法 最传统的方式是在head标签内插入<script>标签,然而这种常规的做法却隐藏着严重的性能问题,根据上述对<script>标签特性的描述,我们知道,在该例中,当浏览器解析到<script>标签时,浏览器会停止解析其后的内容,而优先下载脚本文件,并执行其中的代码,这意味着,其后的test.css样式文件和<body>标签都无法被加载,由于<body>标签无被加载

泛微OA常用js代码块

风流意气都作罢 提交于 2019-12-06 14:16:50
01.泛微系统alert提示框 Dialog.alert("警告框"); 02.checkbox被选中监听事件,监听checkbox复选框 打开表单首先隐藏行 如果checkbox被选中 显示行 <!-- script代码,如果需要引用js文件,请使用与HTML中相同的方式。 --> <script type="text/javascript"> jQuery(document).ready(function() { jQuery(".mainTd_6_0").parent().hide(); jQuery("#field6421").click(function() { if(jQuery("#field6421").attr("checked") == true) { jQuery(".mainTd_6_0").parent().show(); } else { jQuery(".mainTd_6_0").parent().hide(); } }); }); </script> 03.提交验证表单结束日期不能少于开始日期 <!-- script代码,如果需要引用js文件,请使用与HTML中相同的方式。 --> <script type="text/javascript"> jQuery(document).ready(function() { checkCustomize =

Linux 下利用 Lsof 恢复误删文件

别等时光非礼了梦想. 提交于 2019-12-06 13:44:25
原理:在Linux系统的/proc 分区下保存着进程的目录和名字,包含fd(文件描述符)和其下的子目录(进程打开文件的链接),那么如果删除了一个文件,还存在一个 inode的引用:/proc/进程号/fd/文件描述符。我们只要知道当前打开文件的进程pid和文件描述符fd就能利用lsof工具列出进程打开的文件。 一、将 ls 的手册过滤掉主要控制符后重定向到文件ls.txt 中,并用more查看,CTRL + Z 暂停查看操作 1: [root@localhost script]# man ls |col -b > ls.txt 2: [root@localhost script]# more ls.txt 3: LS(1) User Commands LS(1) 4: 1: [1]+ Stopped more ls.txt 2: [root@localhost script]# 3: [root@localhost script]# jobs 4: [1]+ Stopped more ls.txt 5: 二、假设误删文件 ls.txt 1: [root@localhost script]# rm ls.txt 2: rm:是否删除 一般文件 “ls.txt”? y 三、利用lsof找到进程6511、并拷贝恢复,只能在这个文件被使用或调用的情况下有效 3: [root

<script>元素

你离开我真会死。 提交于 2019-12-06 13:11:45
使用script标签 script标签的六个属性:src/type/async/defer/charset/language已弃用 使用的两种方式:在页面中嵌入JavaScript代码/引入外部的JS文件 向页面中嵌入JavaScript代码 只需要指定type属性,包含在script中的代码将从上至下执行 使用< script >嵌入代码时遇到字符串< /script >就结束,所以在代码中使用字符串< script >时需要转义 <script> function fun(){ console.log('<\/script>') } </script> 引入外部的JS文件 需要指定src属性,不能在HTML文档中使用这种语法,不符合HTML规范 文件扩展名.js不是必须的,因为浏览器不会检查JavaScript文件的扩展名,但是这样使用服务器语言如JSP等生成JS代码也可以,但是服务器还是需要看扩展名决定为响应应用哪种mine类型,所以不加扩展名时请确保服务器能返回正确的mime类型 设置src的script标签中间不可以嵌入JavaScript代码,即使嵌入也不会执行 src也可以指向外部域的JS文件,但是这有一定的安全隐患;如果想要引用外部域的代码请确保该域可信赖。 标签的位置 javascript语言是单线程机制。所谓单线程就是按次序执行,执行完一个任务再执行下一个