<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cjd6568358的专栏]]></title><description><![CDATA[点滴记录我的进步历程]]></description><link>https://blog.youkuaiyun.com/cjd6568358</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cjd6568358]]></copyright><item><title><![CDATA[改造小蚁摄像头支持免费无限容量云储存（支持小容量SD卡篇）]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/141528262</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/141528262</guid><author>cjd6568358</author><pubDate>Sun, 25 Aug 2024 13:43:51 +0800</pubDate><description><![CDATA[实际测试下来发现，小蚁官方固件对小于4G容量的内存卡做了限制，一旦插入根本不录制视频了，同时也导致上一步的云存储失去了作用。把脚本放到后台的环境变量可执行目录里，这里是放到/home/base/tools/下。这里的思路是检测内存卡之前替换掉正版的cat命令 使它永远输出大于4GB的容量误导固件，检测完之后再把cat还原。2.修改/home/base/init.sh，在执行chkdisk命令的前后加上以下逻辑，通过上一篇的操作，我们成功将网盘挂载到了小蚁摄像头上，同时也避免了内存卡的频繁读写。]]></description><category></category></item><item><title><![CDATA[改造小蚁摄像头支持免费无限容量云储存（Samba挂载篇）]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/141527575</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/141527575</guid><author>cjd6568358</author><pubDate>Sun, 25 Aug 2024 13:08:53 +0800</pubDate><description><![CDATA[插卡摄像头最大的一个问题就是频繁的读写会导致内存卡寿命急速下降，哪怕是市面上支持NAS转存的摄像头也是先录制到SD卡里，然后把SD卡上的视频再转存到NAS。所以改造视频文件直接录制在云存储上，避免内存卡频繁的读写是一件一劳永逸且很有必要的事情。和常规NAS转存的思路不一样的是我们可以用ssh访问摄像头，所以对摄像头的权限是最高的，可以决定自定义挂载位置，而摄像头生成视频的目录是固定的，所以把Samba直接挂载到摄像头生成视频的目录上，这样就可以直接在云存储上生成视频文件，同时也避免了SD卡的读写损耗。]]></description><category></category></item><item><title><![CDATA[s-nail最新配置格式]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/141527267</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/141527267</guid><author>cjd6568358</author><pubDate>Sun, 25 Aug 2024 11:43:38 +0800</pubDate><description><![CDATA[可以考虑注释掉s-nail.rc文件的bsdannounce/fwdretain命令。默认的s-nail配置文件运行时会报警告。但还是会报如下警告，提示格式即将废弃。使用网上的邮件配置虽然可以运行。改成以下格式就可以消除警告。]]></description><category></category></item><item><title><![CDATA[微信小程序内原生与H5通信方案-一次记录滚动位置引发的血案]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/115013039</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/115013039</guid><author>cjd6568358</author><pubDate>Sat, 20 Mar 2021 11:39:59 +0800</pubDate><description><![CDATA[很久都没有更新了,分享一点干货吧.

最近做一个小程序项目,特点是页面超多,开发周期紧,性能要求不高,都用小程序原生语法写的话 估计要分包,这样就复杂了.于是项目采用了webview嵌套H5的方案,使用vue开发,周期短,开发效率高.

写H5页面不可避免的会遇到记录滚动位置的需求.常见使用场景是从列表页点击跳转至详情页,再返回列表页需要保持滚动位置不变.

这时候在小程序中一般有3种解决方案

1.使用keepalive组件缓存当前页面.这种方案的弊端在于每个业务页面的滚动容器并不相同,有些是基于body]]></description><category></category></item><item><title><![CDATA[浏览器/node环境下 big5/gbk编码的字符串 urlencode]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/109565712</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/109565712</guid><author>cjd6568358</author><pubDate>Sun, 08 Nov 2020 22:03:37 +0800</pubDate><description><![CDATA[浏览器端


function urlencode(str, charset, callback) {
  //创建form通过accept-charset做encode
  var form = document.createElement("form");
  form.method = "get";
  form.style.display = "none";
  form.acceptCharset = charset;
  if (document.all) {
    //如果是IE那么就调用d]]></description><category></category></item><item><title><![CDATA[vue react history模式下 微信SDK调用失败解决方案]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/84835632</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/84835632</guid><author>cjd6568358</author><pubDate>Wed, 05 Dec 2018 14:48:46 +0800</pubDate><description><![CDATA[这里只考虑所有官方的解决方案都尝试过的情况，不考虑因为一些低级原因导致以上的错误。

单页应用下前端路由自己维护history,通常都有几十个页面，其中某些页面需要调用微信JSSDK实现某些功能，但是在微信中经常会遇到invalid signature、the permission value is offline verifying之类的报错。

而通常这类问题只要通过刷新下当前页面就可以解决。...]]></description><category></category></item><item><title><![CDATA[JS正则截取首尾单双引号中间内容]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/73359733</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/73359733</guid><author>cjd6568358</author><pubDate>Fri, 16 Jun 2017 23:59:05 +0800</pubDate><description><![CDATA[var testStr="\"dsad'''''\"asdsadf\"";
var reg = /^["|'](.*)["|']$/g;
testStr.replace(reg,"$1");]]></description><category></category></item><item><title><![CDATA[借助ajaxPrefilter ajax预处理函数实现ajax拦截器]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/72782148</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/72782148</guid><author>cjd6568358</author><pubDate>Sat, 27 May 2017 16:12:03 +0800</pubDate><description><![CDATA[最近在用requireJS+jquery重构PC官网，原来的代码太冗余，很多方法和变量都重复定义，也没有全局配置的地方。习惯了模块化开发和全局配置的我简直不能忍。
原来的代码每次发ajax请求都需要手动序列化JS对象，添加时间戳/token，觉得太麻烦。于是想实现一个ajax的拦截器，能够自动帮我们处理这些。
网上找到了一个hookAjax的库，原理类似于修改原生xmlhttprequest对]]></description><category></category></item><item><title><![CDATA[单页应用（SPA）前端javascript如何阻止按下返回键页面回退]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/70077935</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/70077935</guid><author>cjd6568358</author><pubDate>Tue, 11 Apr 2017 18:27:13 +0800</pubDate><description><![CDATA[这几年单页应用很流行，利用html5新特性history.pushState/replaceState 可以操作URL无刷新动态加载html内容，达到比较好的用户体验。
不过经常会遇到这样一个问题，那就是用户总是习惯于按返回键来返回上一页，移动端页面有弹框的时候，用户期望按下返回键来关闭弹框，这时候却发现返回到了上一页。。。其中的技术原理我们前端同学都知道，不过用户不理解啊，你也没办法解释给他们]]></description><category></category></item><item><title><![CDATA[使用fetch上传文件失败的解决方案]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/54346383</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/54346383</guid><author>cjd6568358</author><pubDate>Wed, 11 Jan 2017 18:41:56 +0800</pubDate><description><![CDATA[下午在工作中遇到了一个问题，就是用fetch上传excel文件，开始以为很简单，结果花了一下午才解决。
一开始使用fetch(url,formData) ，也设置了content-type:multipart/form-data，但是后台怎么也拿不到文件，用ajax可以正常上传。
比较了一下两个请求的区别在于，ajax请求中content-type:multipart/form-data; b]]></description><category></category></item><item><title><![CDATA[nginx/tomcat添加自定义header 403  forbidden]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/53164692</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/53164692</guid><author>cjd6568358</author><pubDate>Mon, 14 Nov 2016 21:47:15 +0800</pubDate><description><![CDATA[#
# Wide-open CORS config for nginx
#
location / {
     if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET,]]></description><category></category></item><item><title><![CDATA[angular2.0 webpack css url 图片路径问题]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/51926618</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/51926618</guid><author>cjd6568358</author><pubDate>Sat, 16 Jul 2016 21:57:55 +0800</pubDate><description><![CDATA[基于angular 2.0 rc4 github上的一个种子项目二次开发 angular2-seed
需要修改的几个地方:
webpack.config.js
增加以下配置项，需要注意的是必须先安装 node-sass、css-to-string-loader、sass-loader、url-loader


footer.ts




footer.scss]]></description><category></category></item><item><title><![CDATA[使用nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/51871039</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/51871039</guid><author>cjd6568358</author><pubDate>Sun, 10 Jul 2016 14:00:14 +0800</pubDate><description><![CDATA[今天给大家介绍的是在前后端分离的趋势下，前端同学们利用nginx来开发和调试自己的前端项目。
换做以前，大家正常的前端调试流程可能是这样的。
1、首先搭建好后台的语言环境
2、把后台代码拉到本机
3、通过启动 tomcat或者是apache。
4、打开网页正常调试
这样的好处是整个流程每个人很熟悉，没什么坑。接口调试不通那就找后台吧。
坏处是
1、前端同学需要熟悉基本的后台程序运行]]></description><category></category></item><item><title><![CDATA[常见的网站性能优化]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/51870922</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/51870922</guid><author>cjd6568358</author><pubDate>Sun, 10 Jul 2016 12:48:07 +0800</pubDate><description><![CDATA[网站部署优化：
1、公共库存放CDN，尽量有自己的图片服务器
2、项目图片素材合成雪碧图(核心是减少HTTP请求)
3、JS、CSS合并、打包、压缩
4、JS脚本放底部、CSS脚本放头部

        5、开启GZIP压缩
6、合理使用缓存(包括304、application cache)


代码层面：
JS：1、尽量减少操作DOM的次数(因为会触发浏览器重绘机制)，如]]></description><category></category></item><item><title><![CDATA[JS性能优化笔记]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/51202817</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/51202817</guid><author>cjd6568358</author><pubDate>Wed, 20 Apr 2016 17:45:55 +0800</pubDate><description><![CDATA[查看原文

一、 让代码简洁：一些简略的表达方式也会产生很好的优化

eg：x=x+1;在不影响功能的情况下可以简写为x++;

 

二、 变量名方法名尽量在不影响语意的情况下简单。（可以选择首字母命名）

eg：定义数组的长度可以取名为：ArrLen而不需要取为ArrayLength。

 

三、 关于JS的循环，循环是一种常用的流程控制。

JS提供了三种循]]></description><category></category></item><item><title><![CDATA[angularJS实现无刷新文件下载]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/49364255</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/49364255</guid><author>cjd6568358</author><pubDate>Fri, 23 Oct 2015 17:45:01 +0800</pubDate><description><![CDATA[$scope.getExcel = function () {
            $http.post("/production/statistics/export", {
                storeId: $scope.$parent.currStore.storeId,
                date: $scope.$parent.ledgerDate.get]]></description><category></category></item><item><title><![CDATA[JS获取指定年月天数]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/49364199</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/49364199</guid><author>cjd6568358</author><pubDate>Fri, 23 Oct 2015 17:38:00 +0800</pubDate><description><![CDATA[function getMonthDays(year, month) {
    var tmpList = [];
    var endDay = new Date(year, month, 0).getDate();
    for (var i = 1; i ; i++) {
        tmpList.push(i 10 ? "0" + i : i.toString())
    }]]></description><category></category></item><item><title><![CDATA[搞定git操作只需三步]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/45970865</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/45970865</guid><author>cjd6568358</author><pubDate>Mon, 25 May 2015 16:10:57 +0800</pubDate><description><![CDATA[git操作实在太繁琐,逼不得已总结出了下面三步,当作私人笔记。省的后面再找
1、克隆远程指定分支代码到本地.
git clone -b deve(远程仓库分支名) --single-branch http://......................git(远程仓库分支路径)



2、从远程指定分支拉取最新代码并合并到本地当前分支
git pull origin deve(远程]]></description><category></category></item><item><title><![CDATA[那些年之cordova踩过的坑]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/45745835</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/45745835</guid><author>cjd6568358</author><pubDate>Fri, 15 May 2015 15:53:39 +0800</pubDate><description><![CDATA[私人笔记
如果安装的是crosswalk with cordova 整合版的话 添加插件的方法是
需要的环境 nodejs、git
1、npm安装 plugman

npm install -g plugman
2、CD到当前项目根目录


cd F:\music
3、安装ngcordova插件(这一步千万别信官网教程坑死你不偿命，照我的来)


plugman inst]]></description><category></category></item><item><title><![CDATA[关于Angular 指令的理解]]></title><link>https://blog.youkuaiyun.com/cjd6568358/article/details/45576281</link><guid>https://blog.youkuaiyun.com/cjd6568358/article/details/45576281</guid><author>cjd6568358</author><pubDate>Fri, 08 May 2015 10:19:04 +0800</pubDate><description><![CDATA[之前虽然一直都在用这套框架，但是对于指令还是知之甚少，感觉是蛮复杂的东西。看了之后也没有真正理解。
   最近在做一个Angular的小项目，卡在了Angular的生命周期和自定义指令上。纠结了好几天，终于今天在地铁上灵光一闪想通了。所以赶紧把它记下来，免得后面忘记了。
  我们一直都说angular的加载流程是先载入HTML片段，其中在加载标签的时候加载了所有的JS库，包括我们自己写的所有的]]></description><category></category></item></channel></rss>