一些让我悲催编程经历

rm命令

有一次,项目出了点问题,为了图方便就直接ssh上去了。问题解决后准备delete测试文件,结果不小心直接使用rm -rf命令把项目整个程序删除了,而备份文件不是最新的程序。结果花了将近一周才把程序重新部署到线上,恢复访问。从那以后,我每次登陆服务器时,不轻易敲rm这个命令,心里有恐惧感。

升级程序版本

我一直喜欢把软件升级到最新的版本,有一次我发现MySQL又出新版本了,我于是赶紧下载,解压,编译,安装。但总是在某个地方出错安装始终进行不下去,而每一次编译MySQL都需要十多分钟特别耗时。最终我是放弃了最新版本的安装,而站点也因为我的升级操作停止运行了将近一天的时间。其实因为升级程序导致站点不能访问的状况已经有好几次,升级服务器软件的操作要谨慎,因为极有可能不兼容导致环境出问题。

list的for循环

我习惯这样使用for去遍历list,如:

for ($i = 0, $k = count($list); $i < $k; $i++) {
  ...
}

但是for里面再有一个list需要遍历时,我习惯性又这么写:

for ($i = 0, $k = count($list1); $i < $k; $i++) {
  for ($i = 0, $k = count($list2); $i < $k; $i++) {
    ...
  }
}

结果服务器被跑宕机了。

form表单上传

有一次做一个上传功能,却怎么也接收不到file的数据,代码看了N遍就在快要崩溃放弃的时候才发现原来是我漏写了enctype="multipart/form-data"

在for循环里发起http请求

当时正在做一个项目,老大说为了划分模块应该都采用谁负责模块谁出接口的模式进行开发工作,后来程序如期开发完成,测试也通过并上线。有一天收到产品邮件说某些用户打开一个要好几分钟,开始我怀疑是那用户的网络有问题,最后深入调查才发现原来这个用户数据量太大,for循环300多次请求接口数据。。。后来优化后,再打开那个需要五六分钟时间才能打开的页面时直接是秒开。

JavaScript字符串拼接

这是我在上家公司的同事发现的一个问题,当时是遇到站点在IE6下执行速度很慢,其它浏览器都很正常。JavaScript脚本在IE6下也不报错,肉眼一行行检查也没发现有什么问题。最后做测试时才发现当你使用JavaScript拼接大量的字符串时,这种写法

var str = '';
 
for (var i = 0; i < 100000; i++) {
  str += i + ',';
}
 
console.log(str);

这种写法是最慢的,而最好的写法是这样:

var arr = [];
 
for (var i = 0; i < 100000; i++) {
  arr.push(i);
}
 
console.log(arr.join(','));

这两种方式有很大的效率差距

注意浏览器缓存

刚开始学程序的时候,并不知道浏览器会有缓存这一事,结果我明明是修改了程序,但刷新后还是旧的内容。于是我只好改一次,然后关闭浏览器重新开启。这种调试模式程序了很长时间,后来我才发现再调试的时候可以关闭浏览器的缓存,或者直接在访问的url加个时间戳就轻松解决被缓存的问题。

服务器端与浏览器端

刚开始学习PHP的时候因为总是在本机安装appserv集成环境开发,因此对服务器端与客户端的概念还不是很清楚。有一次我写一个功能,使用opendir出本机某个目录下的图片文件列表时,为了更直观一点,我竟然直接把遍历出来的文件地址写到img的src属性里,结果调了大半天,图片就是没显示..,做Web开发得要明白服务器端与浏览器端的区别!

debug与console

刚写JavaScript的时候,糊里糊涂。每次出错调试时就在需要调试的行数alert阻断查看,如果遇到object甚至for in挨个alert看。后来开始接触一些调试工具后,发现原来断点调试时那么的棒,想起之前的调试艰辛内牛满面。就算不用断点,console也是特别有效的跟踪排查手段

分享

TITLE: 一些让我悲催编程经历

LINK: https://www.qttc.net/341-some-panic-of-history.html

NOTE: 原创内容,转载请注明出自琼台博客