JavaScript优化小记

开源大模型本地部署实战:Llama、DeepSeek、Qwen选型与工程落地指南 大语言模型(LLM)本地部署已成为AI工程化核心环节,其本质不是比拼参数量或榜单分数,而是考察模型架构、推理引擎、量化支持、IDE集成与多模态扩展能力的系统性适配。Llama以纯净Transformer结构成为通用底座,依赖llama.cpp和GGUF量化实现跨平台轻量推理;DeepSeek深度优化代码与数学推理,通过原生OpenAPI、FlashAttention-2及tensor parallelism显著降低API延迟;Qwen则采用模块化设计,支持视觉编码器(Qwen-VL)、生物计算(Qwen-B 阅读详情

前段时间接到一个任务:对项目组的Web项目主画面进行性能优化。

画面情况是:监控设备数量200多台,画面每10秒钟查询并更新数据,如果不对比缓存每10s进行更新,那么在IE浏览器下15分钟不到增长了88MB(用F12内存工具查看),而且会一直增长,直至浏览器崩溃...

以JS生成的html代码主要结构如下(填入HTML上的DIV标签内,$('').html(...)):

<ul >
<li><a><img /></a><div></div></li>
<li><a><img /></a><div></div></li>
...
<li><a><img /></a><div></div></li>
<ul>


网上找了sIEve工具对web页面进行了分析,

结论是:

1,每10秒钟内存会增加1MB多但是释放的不过十几KB,js循环中大量DOM节点建立(UL,内部包括LI/DIV/A节点),但是从未释放,以至内存占用曲线就是上升直线,DOM对象曲线中观察DOM数量也是不停增加。最主要的是js中建立的UL元素始终是orphan(孤立)节点。

2,每10秒钟为画面中的一组checkbox绑定一次jquery.ui.button操作,每次都生成了很多DIV /SPANdom对象,都是孤立节点,占用的内存始终没被浏览器释放;

于是,针对结论1写了个函数准备每次重画UL列表前主动清除内部节点包括UL标签本身:


	var releasememory3 = function(obj){		

		$(obj).find("a").unbind();
		$(obj).find("li").unbind();
		$("#rightmenu ul > li").unbind();

		var li0 = $(obj).find("li").eq(0);		
		removeLIAllsibling(li0);
		li0 = null;			
	}
	var removeLIAllsibling = function(_elem){//
		var _parentElement = _elem.parentNode;
		if(_parentElement){
			
			for (var i=0;i<_parentElement.childNodes.length;i++){
				 var childNode = _parentElement.childNodes[0];  // li
				                            
				 var div0 = childNode.getElementsByTagName("DIV");//div
				 for(var j=0;j<div0.length;j++){//div
					 div0[j].innerHTML = '';
					 childNode.removeChild(div0[0]);
				 }
				 div0= null;
				 
				 var a0 =  childNode.getElementsByTagName("A");//A
				 for(var k=0;k<a0.length;k++){//A					 
					 var img0 = a0[k].getElementsByTagName("IMG");//IMG
					 for(var m=0;m<img0.length;m++){
						 a0[k].removeChild(img0[0]);
					 }
					 img0 = null;
					 a0[0].onclick = null;
					 childNode.removeChild(a0[0]);
				 }
				 a0 = null;				 	
				 childNode.onclick = null;
				 _parentElement.removeChild(childNode);
			}
      	}
		_parentElement = null;
	};

测试结果是此releasememory3函数成功清除了孤立节点IMG/DIV/A/LI,但是无法清除UL节点。


由于js建立的UL标签始终是孤立节点,故把ul放在JSP的html部分,在js中仅仅生成li节点;

再次测试清除,IMG/DIV/A/LI都可以释放;

从sIEve测试结果看这样改写后的LI/A/DIV/IMG节点都不再是孤立节点每次更新HTML DIV中的ul内部节点都可以被浏览器释放。结论1的问题解决。


针对结论2,由于循环不断给html画面上的input控件绑定juery.ui.button操作,查看jquery.ui.button.js库文件,确实每次都会建立span对象并绑定很多事件,这部分不属于画面代码,比较难以主动清除,所以,解决办法是只作一次jquery.ui.button的绑定操作,循环中只更新input label标签中的变化内容text属性。问题2解决。


比较明显的2个内存泄露问题解决。


列举问题可能的原因:

1, Js代码DOM孤立节点、

2, js全局变量滞留内存、

3, js代码DOM对象注册匿名函数闭包导致的循环引用、

4, js对象dom对象相互引用导致内存不释放、

5,一般 js闭包导致的循环引用导致内存不释放、

6, js隐式对象转换导致的对象创建不释放、

7, js中DOM节点增加顺序错误导致内存不释放、

8, js大量循环重复重写同一对象属性(新建很多对象不释放)

9, DOM对象绑定事件未清除(可能在引用库比较多)

10,卸载页面时直接解绑事件、删除全局变量(无法解决页面不跳转时的内存增长,解决画面切换时的内存增长)


引用其他经验者的一段启发性文字:

 IE下的内存泄露原因就是循环引用,IE的垃圾回收器不能很好处理这种引用。 
会产生泄露的循环引用,只有孤立的DOM对象(脱离DOM树)。 
孤立的DOM对象间的循环引用,孤立的DOM对象与JS对象的循环引用。 
为什么是孤立的DOM对象呢?在离开页面时(刷新,跳转)会删除整个DOM树,在DOM树上的对象也会被删除,就算有循环引用,此时被打断。 
孤立的DOM对象有:一、用JS创建但未加入DOM树。二、从DOM树中删除的。 
所以避免泄露,就尽量不要让这样的DOM对象产生。 
有时候这样对象又不可避免,那就不要让这样对像产生循环引用。 
最常见的循环引用是由闭包产生,其执行环境中的变量(包括参数)引用了DOM对象。





硬件电路(22)-TTL和232切换电路 工作中会遇到TTL和232电平的通信的状态,为了实现一种便捷的切换方式,参考了一些文章,提供一种电路方便大家使用。 阅读详情

相关推荐

提升仿真效率:Synopsys VCS高级编译选项优化技巧(2023最新版)

本文深入探讨了Synopsys VCS 2023版本中的高级编译选项优化技巧,帮助工程师提升仿真效率。通过并行编译、智能代码分析、精准覆盖率采样等策略,结合真实案例展示如何显著缩短仿真周期并优化资源使用,适用于数字芯片验证和大型SoC设计。

weixin_30338481的博客 113

JS 性能优化小记

【JS语法层面的性能优化】 先看一个2万次的遍历性能开销图(Chrome 版本 83.0.4103.61(正式版本) (64 位)) 发现了什么?同样是forEach 执行效率截然不同,所以不能简单的对比 for for...of forEach 性能上的差异,理所当然的认为性能开销所差无几,建议使用for 循环 不建议使用forEach ,因为forEach在不同语境表现性能表现差异极大 此外Array.prototype.includes() 方法明显的有性能问题,数据量大量时不建议使用,

sflf36995800的博客 887

MaxENT生态位模型实战:从数据准备到论文发表的完整指南

本文提供MaxENT生态位模型从数据准备到论文发表的完整实战指南,涵盖物种分布数据处理、环境变量筛选、参数优化及结果可视化等关键步骤。特别介绍如何通过R语言进行高级建模优化,提升模型AUC值,并分享海洋生物专题研究中的数据处理技巧。适合生态学研究者快速掌握这一强大的物种分布预测工具,产出高质量研究成果。

tensor9flow的博客 302

NX工程图避坑指南:唐康林老师视频里没细说的10个实用技巧与隐藏设置

本文深入解析NX工程图中10个易被忽视的实用技巧与隐藏设置,涵盖视图更新、剖面线自定义、标注样式统一等核心问题。特别针对UG/NX8.5/NX10用户,提供从首选项设置到打印优化的完整解决方案,帮助工程师避开常见陷阱,提升制图效率与规范性。

weixin_28683689的博客 575

Fast DDS源代码走读

DDS, PDP, EPD, DataWriter, DataReader

weixin_43082062的博客 713

js 正则学习小记之匹配字符串优化篇

原文:js 正则学习小记之匹配字符串优化篇昨天在《js 正则学习小记之匹配字符串》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的。从性能上来说,他非常糟糕,为什么这么说呢,因为 传统型NFA引擎 遇到分支是从左往右匹配的,所以它会用 \\. 去匹配每一个字符,发现不对后才用 [^"] 去匹配。比如这样一个字符串: "1234...

weixin_34150830的博客 81

​​手把手教你学PCIE--ATU 的 Bar 匹配模式与地址匹配模式详解​

摘要: ATU(地址转换单元)提供两种地址匹配模式:Bar匹配模式基于PCI设备的BAR寄存器自动映射虚拟地址(只需配置物理基址),适用于标准PCI设备DMA;地址匹配模式需显式配置虚拟与物理地址范围,适合自定义映射场景。核心区别在于匹配依据(BAR自动推导vs人工定义),Bar模式简化配置,地址模式更灵活。

MHD0815的博客 380

js 正则学习小记之匹配字符串字面量优化篇

昨天在《js 正则学习小记之匹配字符串字面量》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的。从性能上来说,他非常糟糕,为什么这么说呢,因为 传统型NFA引擎 遇到分支是从左往右匹配的,所以它会用 \\. 去匹配每一个字符,发现不对后才用 [^"] 去匹配。比如这样一个字符串: "123456\'78\"90"共 16 个字...

weixin_33939843的博客 157

机加工机器人系列编程:Fanuc M-710iC_(2).FanucM-710iC机器人的硬件配置

Fanuc M-710iC 机器人是一种广泛应用在汽车零部件制造行业中的工业机器人。它的本体结构设计紧凑、稳定,适用于多种加工任务。了解机器人的本体结构是进行编程和维护的基础。

zhubeibei168的博客 992

YOLOv8集成CPCA(Combined Parallel Convolutional Attention)注意力机制模块YOLOv8深度教程

YOLOv8集成CPCA注意力模块教程摘要 本教程详细介绍了如何将YOLOv8 CPCA(Combined Parallel Convolutional Attention)注意力模块集成到YOLOv8目标检测框架中。CPCA模块结合了通道注意力和多尺度空间注意力机制,通过全局池化和双路径融合增强通道特征,并利用多尺度深度可分离卷积捕获空间上下文信息。YOLOv8 教程包含完整的实现步骤:创建CPCA模块代码、修改YOLOv8模型解析逻辑、编写自定义配置文件,YOLOv8YOLOv8YOLOv8YOLOv8

FJN110的博客 1620

初学JS小记(二)——dom操作与优化

一、什么是DOM       DOM其实是针对html和xml提出的一个API(应用编程接口)。什么意思呢?就是为了我们更好的操作html或者xml中的元素,而提出来一系列的操作标准,并且将这些标准用代码实现了。我们在实际中,只需要操作这些接口就可以访问、增加、删除文档中的元素。       DOM将这个文档描绘成一个多层次的节点树,一切的操作都是在这个节点树上进行的。DOM1其实就是最开始的W3...

远走的兔子博客 481

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1172

【初级前端】VUE工作问题小记

近期觉察到,每日梳理记录工作中的问题及知识点,便于更好的回顾知识,提高工作效率!

zhengjingID的博客 912

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JavaScript(JQ)事件委托以及JS闭包小记

一开始看的时候有些晕,可以监听DOM元素的方法太多,主要是写在<script></script>,下面列出来理清楚: JS原生: document.getElementById("menuultest").onmouseover = function(ev){ }; JQ:该段参考自https://codeplayer.vip/p/j7sq1 // jQue...

lan_学习分享 1919

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

javaScript小记

javaScript小记 (1),更快渲染页面 <body> xxx代码 <script src="xxx.js"></script> </body>

qq_35132189的博客 304

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript小记(持续更新)

学习js遇到的疑问和js基础都记录在这里,持续更新中。 1、正则表达式 /b+/g 至少出现一次b(1~n次) /b*/g 可以不出现b,也可以出现一次或多次(0~n次) /b{n,m}/g 最少出现n次b,最多出现m次b(n~m次) /colou?r/g 可以匹配color或colour,?表示前面的字符最多只出现一次(0次或1次) 2、代码回收规则 1.全局变量不会被回收 2...

二熊不是熊二的博客 2398

【js】selector小记

当selector值改变时,显示改后的option值: A B C function route(){ var selector = document.getElementById("seletor"); var text = selector.options[selector.selectedIndex].text; ale

xn_28的专栏 1599

JavaScript Dom编程艺术 小记

花了大概一个星期的时间看完了这本《JavaScript Dom编程艺术》,据说是前端入门必看的图书,写的还算是不错,语言活泼,讲解循序渐进,很容易跟着读者的思路走。 平稳退化 如果正确使用了JavaScript脚本,就可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你的网站,这就是所谓平稳退化,就是说虽然某些功能无法使用,但最基本的操作还是能顺利完成。 作者在本书中的很多...

mrhou的博客 409

matter.js使用小记

之前一直想看box2d,后面发现了matter.js,听说文档比较全面,稍微看了下也没觉得有多全面(????),拖了很久才来写了个相对完整的例子,记录一下。 先说下整体感觉,使用的时候发现了一些bug(也可能是我使用姿势不对),性能不是太好,文档形式是API加demo,有些功能需要自己尝试,建议把官方demo都看一遍,试一试。并且因为是个物理引擎,如果用来写游戏,有些你想要不遵守物理法则的时候就得想点办...

u011393161的博客 2831

JavaScript 继承小记

面向对象编程很重要的一个方面,就是对象的继承。A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。 大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承。传统上,JavaScript 语言的继承不通过 class(ES6 引入了class 语法),而是通过“原型对象”(prototype)实现。那么在JS中常见的继承方式有几种...

终极冥帝 145

博客园样式优化小记

趁休息在家,对博客园的官方主题样式做了下细调,算是符合了点个人审美,为后续在园子写博文增加点"审美动力"。 纯原生 js,css,未使用 jQuery,你可以按你习惯修改、简化、优化 js 部分。 目前的一些不足: 因时间原因,目前"悬浮目录"部分仅支持 h2,h3,即("##"和"###"),如果你改写了该部分,期待你的分享:) 通过本文你可以获得: 至少是跟我一样的主题布局...

asxza28042的专栏 199

博客优化小记

趁着周末把博客优化了一下,主要优化以下几点: 阅读统计和访客统计 添加评论 升级hexo版本和NexT版本 配置SEO 静态文件cdn加速 使用gulp压缩文件 添加lazyload 添加站内搜索 阅读统计和访客统计 阅读统计和访客统计使用的都是不蒜子,因为使用的是NexT主题,只需要添加一下配置就可以了。 添加评论 原本评论插件使用的是 disqus,但配置后了之后才发现已经被q...

超超不会飞 326

grayscale.js 网站快速变为灰色主题小记

需求:甲方会长去世,要求把网站改成灰色以示哀悼; 接到需求,开始是想改样式和图片,但是想着512当时那么多网站都改变过,一定有简便一点的方法,到网上看了几篇帖子,大多都是改样式的,只有一个是用js实现的,而且可以实现全局效果(大快我心),兼容性也很好(在Opera 9,FF2 / 3,Safari 4,IE6 / 7中成功测试)测试后只是加载效率低了点,其他没别的问题。这就是grayscale...

懒得安分的博客 1万+

JS小记

好记性不如烂笔头。 1、document.ElementFromPoint:根据坐标获得元素 2、有时候要操作DOM页面,但是得不到预期结果,很可能是因为页面还没加载完成,在console控制台可以看到“Uncaught TypeError,cannot read property 'xxx' of   null”。通常等页面加载完成再进行相应操作,写法如下: document.addE...

weixin_33896069的博客 388
上一篇: MyEclipse_ServerView报错解决方法
下一篇: Loadrunner11以Java Vuser进行socket压力测试
johnsearcher
博客等级 码龄17年 12粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值