小编Mar*_*aio的帖子

Javascript原型操作员性能:节省内存,但速度更快吗?

在这里阅读(Douglas Crockford)使用原型运算符向Javascript类添加方法也保存了内存.

然后我读到了John Resig的文章 "用一堆原型属性实例化一个函数是非常非常快的 ",但他是在谈论以标准方式使用原型,还是他在他的文章中谈论他的具体例子?

例如,正在创建此对象:

function Class1()
{
   this.showMsg = function(string) { alert(string); }
}
var c = new Class1();
c.showMsg();
Run Code Online (Sandbox Code Playgroud)

创建这个对象吗?

function Class1() {}
Class1.prototype.showMsg = function(string) { alert(string); }
var c = new Class1();
c.showMsg();
Run Code Online (Sandbox Code Playgroud)

PS

我知道原型用于创建继承和单例对象等.但是这个问题与这些主题没有任何关系.


编辑:对于JS对象和JS静态对象之间的性能比较它可能感兴趣的人可以阅读下面的答案.静态对象肯定更快,显然只有在不需要多个对象实例时才能使用它们.

javascript performance function-prototypes

48
推荐指数
3
解决办法
2万
查看次数

Javascript IE检测,为什么不使用简单的条件注释?

为了检测IE,大多数Javascript库都做了各种各样的技巧.

  • jQuery似乎在页面的DOM中添加了一个临时对象来检测某些功能,
  • YUI2对其YAHOO.env.ua = function()(文件yahoo.js)中的用户代理进行正则表达式

在阅读了这个答案之后,我想到了这是真的,为了在Javascript中简单地检测IE,我们可以简单地添加到我们的页面:

<!--[if IE]><script type="text/javascript">window['isIE'] = true;</script><![endif]-->

<script type="text/javascript" src="all-your-other-scripts-here.js"></script>
Run Code Online (Sandbox Code Playgroud)

现在,window.isIE为我们所有的Javascript代码设置变量,只需执行以下操作:

if(window.isIE)
   ...
Run Code Online (Sandbox Code Playgroud)

除了这可能导致痛苦,因为它必须在所有页面中添加之外,是否存在我可能不知道的任何问题/考虑因素?


仅供参考:我知道最好使用对象检测而不是浏览器检测,但有些情况下您仍然需要使用浏览器检测.

javascript internet-explorer browser-detection conditional-comments

47
推荐指数
5
解决办法
7万
查看次数

停止浏览器对应该保持缓存的图像发出HTTP请求 - mod_expires

在这里阅读了很多文章和一些问题后,我终于成功激活了Apache mod_expires,告诉浏览器它必须缓存1年的图像.

<filesMatch "\.(ico|gif|jpg|png)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 year"
  Header append Cache-Control "public"
</filesMatch>
Run Code Online (Sandbox Code Playgroud)

谢天谢地,服务器响应似乎是正确的:

HTTP/1.1 200 OK 
Date: Fri, 06 Apr 2012 19:25:30 GMT 
Server: Apache 
Last-Modified: Tue, 26 Jul 2011 18:50:14 GMT 
Accept-Ranges: bytes 
Content-Length: 24884 
Cache-Control: max-age=31536000, public 
Expires: Sat, 06 Apr 2013 19:25:30 GMT
Connection: close
Content-Type: image/jpeg 
Run Code Online (Sandbox Code Playgroud)

好吧,我认为这会阻止浏览器下载甚至向服务器询问有关图像的信息,为期1年.但部分原因:如果您关闭并重新打开浏览器,浏览器不会再从服务器下载图像,但浏览器仍然会向每个图像发送HTTP请求来询问服务器.

如何强制浏览器停止为每个图像发出HTTP请求?即使这些HTTP请求后面没有下载的图像,它们仍然是向服务器发出的请求,这些请求可能会造成延迟,并减慢页面渲染速度!

我已经告诉浏览器它必须将图像保存在缓存中1年!为什么浏览器仍在为每个图像查询服务器(即使它没有下载图像)?!


查看FireBug中的网络图(菜单FireBug> Net> Images)我可以看到不同的缓存行为(我显然开始使用浏览器缓存完全空,我使用"清除所有历史记录"强制在浏览器上删除缓存):

  • 当第一次加载页面时,所有图像都被下载(如果我通过单击浏览器的重新加载页面按钮强制页面重新加载,则会发生同样的事情).这很有道理!

  • 当我浏览网站并返回同一页面时,根本不会下载图像,浏览器甚至不会向服务器询问 …

browser caching mod-expires http-headers

45
推荐指数
5
解决办法
3万
查看次数

使用Apache进行网站图像缓存

我怎样才能获得Apache上的静态内容{被浏览器缓存}而不是{检查新鲜度{每次请求}}?

我正在Apache webserver上托管的网站上工作.最近,我正在使用标题(针对不同类型的内容的Content-Type)进行测试,并看到了很多对图像的条件请求.例:

200 /index.php?page=1234&action=list
304 /favicon.ico
304 /img/logo.png
304 /img/arrow.png
(etc.)
Run Code Online (Sandbox Code Playgroud)

虽然图像文件是静态内容并且由浏览器缓存,但每次用户打开链接到它们的页面时,它们都是有条件请求的,它们发送"304 Not Modified".这很好(传输的数据较少),但这意味着每次页面加载会产生20多个请求(由于所有这些往返行程导致页面加载时间更长,即使启用了Keep-Alive和流水线操作).

如何告诉浏览器保留现有文件而不检查更新版本?

编辑:mod_expires方法工作,即使使用favicon.

apache mod-expires image-caching

43
推荐指数
2
解决办法
6万
查看次数

JSDoc在文档中添加实际代码

你知道<code />JSDoc中是否有某种标签吗?我需要在我的文档中添加代码片段,如下所示:

/**
 * This function does something see example below:
 *
 * var x = foo("test"); //it will show "test" message
 *
 * @param {string} str: string argument that will be shown in message
 */
function foo(str)
{
   alert(str);
}
Run Code Online (Sandbox Code Playgroud)

我需要将注释中的代码作为代码显示在JSDoc中(如果没有突出显示语法,至少像预先格式化或具有灰色背景的东西).

javascript documentation jsdoc

43
推荐指数
6
解决办法
2万
查看次数

批处理/批处理一次复制文件夹和内容

我正在编写一个副本的批处理脚本.我想编写脚本来复制整个文件夹.当我想复制单个文件时,我会这样做

copy %~dp0file.txt file.txt 
Run Code Online (Sandbox Code Playgroud)

如果我有一个具有此结构的文件夹,是否有一个命令可以同时复制整个文件夹及其内容,同时保留确切的结构.

mainfolder/
  file1.txt
  file2.txt
  insidefolder/
     file3.txt
     file4.txt 
     file5.txt
Run Code Online (Sandbox Code Playgroud)

windows directory copy batch-file

35
推荐指数
3
解决办法
12万
查看次数

mod_rewrite RewriteCond - 只是域名部分所需的NC标志?还有一些

我在htaccess这些类型的规则中多次看到过:

RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
Run Code Online (Sandbox Code Playgroud)

要么

RewriteCond %{HTTP_HOST} !^www\.domain\.it$ [NC]
Run Code Online (Sandbox Code Playgroud)

NC当仅检查域部分时,为什么标记是必需的?

我注意到浏览器总是将域名中的大写字母转换成小写字母,所以[NC]在这种情况下我看不出该标志是什么值得使用的.

我的意思是,如果我们检查网址的剩余部分,我理解[NC]在Unix系统上标记原因的需要www.domain.com/index.html是不同的文件,www.domain.com/INDEX.HTML但是NC当我们只检查RewriteRule中的域部分时,我不理解标记的需要.


由于您花时间阅读上述内容,我还要问一个NC旗帜没有直接关系但与之相关的小问题RewriteCond

RewriteCond上面显示的两个都运行良好,我认为只有点之前的斜线才能工作(!^www\.domain\.it$)因为没有斜线的点应该表示正则表达式中的"任何字符",而\.意思是点字符,但是另外一个表示效果很好,但是你知道为什么?

regex .htaccess mod-rewrite case-insensitive

35
推荐指数
2
解决办法
6万
查看次数

什么是我的脚本src URL?

是否有一种简单可靠的方法来确定当前正在执行的JavaScript文件的URL(在网页内)?

我唯一想到的是扫描DOM src以查找所有脚本属性以查找当前文件的引用方式,然后通过应用它来计算绝对URL document.location.任何人都有其他想法,是否有一些我完全忽略的超级简单方法?

更新:通过DOM访问的脚本元素已经具有src包含完整URL 的属性.我不知道它是多么普遍/标准,但是你可以使用getAttribute("src")哪个将返回[X] HTML中的任何原始属性值.

javascript dom absolute-path src

33
推荐指数
4
解决办法
2万
查看次数

Windows批处理文件删除.svn文件和文件夹

为了删除"myfolder"中的所有".svn"文件/文件夹/子文件夹,我在批处理文件中使用这个简单的行:

FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X")
Run Code Online (Sandbox Code Playgroud)

这有效,但如果没有".svn"文件/文件夹,批处理文件会显示一条警告:"系统找不到指定的文件." 这个警告非常嘈杂,所以我想知道如何让它理解,如果它没有找到任何".svn"文件/文件夹,他必须跳过RD命令.

通常使用通配符就足够了,但在这种情况下我不知道如何使用它们,因为我不想删除扩展名为.svn的文件/文件夹,但我想删除名为"的文件/文件夹". svn",所以如果我这样做:

FOR /R myfolder %%X IN (*.svn) DO (RD /S /Q "%%X")
Run Code Online (Sandbox Code Playgroud)

它不会删除名为".svn"的文件/文件夹了.我也尝试了这个:

FOR /R myfolder %%X IN (.sv*) DO (RD /S /Q "%%X")
Run Code Online (Sandbox Code Playgroud)

但它也不起作用,他什么也没删除.

svn batch-file delete-file

25
推荐指数
1
解决办法
2万
查看次数

PHP - 一个DB抽象层使用静态类vs单例对象?

我并不想创建一个关于单比静态比全球要好,等我看了几十个关于SO类似问题的问题,但我不能想出一个回答这个具体问题更好的讨论,所以我希望有人可以用一个(或多个)真实的简单例子来回答这个问题,而不仅仅是理论上的讨论.

在我的应用程序中,我有一个典型的DB类来抽象数据库层并在数据库上执行任务而无需在代码中随处写入mysql_connect / mysql_select_db / mysql...

我可以把这个类写成静态类:

class DB
{
   private static $connection = FALSE; //connection to be opened

   //DB connection values
   private static $server = NULL; private static $usr = NULL; private static $psw = NULL; private static $name = NULL;

   public static function init($db_server, $db_usr, $db_psw, $db_name)
   {
      //simply stores connections values, without opening connection
   }

   public static function query($query_string)
   {
      //performs query over alerady opened connection, if not open, it opens connection …
Run Code Online (Sandbox Code Playgroud)

php database oop singleton static

24
推荐指数
1
解决办法
1万
查看次数