我在这里阅读(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静态对象之间的性能比较它可能感兴趣的人可以阅读下面的答案.静态对象肯定更快,显然只有在不需要多个对象实例时才能使用它们.
为了检测IE,大多数Javascript库都做了各种各样的技巧.
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
在这里阅读了很多文章和一些问题后,我终于成功激活了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)我可以看到不同的缓存行为(我显然开始使用浏览器缓存完全空,我使用"清除所有历史记录"强制在浏览器上删除缓存):
当第一次加载页面时,所有图像都被下载(如果我通过单击浏览器的重新加载页面按钮强制页面重新加载,则会发生同样的事情).这很有道理!
当我浏览网站并返回同一页面时,根本不会下载图像,浏览器甚至不会向服务器询问 …
我怎样才能获得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.
你知道<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中(如果没有突出显示语法,至少像预先格式化或具有灰色背景的东西).
我正在编写一个副本的批处理脚本.我想编写脚本来复制整个文件夹.当我想复制单个文件时,我会这样做
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) 我在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$)因为没有斜线的点应该表示正则表达式中的"任何字符",而\.意思是点字符,但是另外一个表示效果很好,但是你知道为什么?
是否有一种简单可靠的方法来确定当前正在执行的JavaScript文件的URL(在网页内)?
我唯一想到的是扫描DOM src以查找所有脚本属性以查找当前文件的引用方式,然后通过应用它来计算绝对URL document.location.任何人都有其他想法,是否有一些我完全忽略的超级简单方法?
更新:通过DOM访问的脚本元素已经具有src包含完整URL 的属性.我不知道它是多么普遍/标准,但是你可以使用getAttribute("src")哪个将返回[X] HTML中的任何原始属性值.
为了删除"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)
但它也不起作用,他什么也没删除.
我并不想创建一个关于单比静态比全球要好,等我看了几十个关于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) javascript ×4
batch-file ×2
mod-expires ×2
.htaccess ×1
apache ×1
browser ×1
caching ×1
copy ×1
database ×1
delete-file ×1
directory ×1
dom ×1
http-headers ×1
jsdoc ×1
mod-rewrite ×1
oop ×1
performance ×1
php ×1
regex ×1
singleton ×1
src ×1
static ×1
svn ×1
windows ×1