小编try*_*lly的帖子

CSS优化自动更改类名

我正在寻找一种工具来优化我的网站的完整版本.我使用SASSCSS preprocessor,并Uglify创建我的JavaScript文件,和一对夫妇的更多的工具都绑在一起Grunt.此外,标记在这种情况下是单个index.html文件,但在其他项目中,它位于PHP文件或Liquid模板中.

我使用BEM(块,元素,修饰符)来命名我的类,有时,这会导致相当大的classnames,例如navigation__item__link--home甚至更长.

我正在寻找一种工具,可以自动转换最终的构建CSS文件,使其更改类或ID名称.a, .b,但是根据相同的方法更改每个HTML和JavaScript文件,以便相关代码不会得到弄乱.

我当然希望保留原始项目文件,因此我希望该工具能够根据这些规则创建新文件,并且最好能够使用它Grunt.

html javascript css php optimization

7
推荐指数
1
解决办法
1535
查看次数

了解已解析的promise的后续then()处理程序的执行顺序

我正在学习Promise,为了理解它我读了一些关于JavaScript的事件循环.此文章简要介绍了事件循环的工作,如调用堆栈,事件表和消息队列.

但我不知道调用堆栈如何处理包含'return'的行,以及之后会发生什么.下面是我写的一个例子,希望了解Promise如何基于事件循环工作.如果你想试一试,请参阅http://jsbin.com/puqogulani/edit?js,console.

var p1 = new Promise(
  function(resolve, reject){
    resolve(0);
});

p1.then(function(val){
  console.log(val);
  p1.then(function(){
    console.log("1.1.1");
    p1.then(function(){
      console.log("1.1.2");
      p1.then(function(){
        console.log("1.1.3");
      });
    });
  });

  p1.then(function(){
    console.log("1.2");
  })

  return 30;

  //return new Promise(function(resolve, reject){
  //  resolve(30);
  //});

})
  .then(function(val){
  console.log(val/2);
});

p1.then(function(){
  console.log("2.1");
});

console.log("Start");
Run Code Online (Sandbox Code Playgroud)

可以看出,有两个"返回",使用它们中的每一个都会给出不同的输出顺序.具体来说,使用时return 30;,1.1.2, 1.1.3都是经过15,但使用的时候return new Promise(...),1.1.2, 1.1.3是前15.那么当代码达到两个不同的"返回"时究竟发生了什么?

javascript callstack event-loop

7
推荐指数
1
解决办法
152
查看次数

尽管 sw.js 没有改变,但每次页面重新加载时,Service Worker 都会“安装”

我正在使用 Service Worker 来缓存 Web 应用程序的 JS 和 CSS 文件。我主要使用 Google Chrome 示例中的代码,我添加的唯一内容是当“新的或更新的内容可用”时刷新窗口的通知和倒计时。

谷歌示例:https://github.com/GoogleChrome/sw-precache/blob/5699e5d049235ef0f668e8e2aa3bf2646ba3872f/demo/app/js/service-worker-registration.js

然而,这种情况经常发生,我不明白为什么。服务器上的文件肯定没有任何更改,但有时我仍然会看到通知和窗口重新加载。

我预计只有当服务工作人员管理的任何文件实际发生更改时才会发生这种情况(它们都通过 Webpack 进行哈希处理,并且其间绝对没有更改)。

这是我使用的代码,内联于index.html

/* eslint-env browser */
'use strict';
function reloadApp(delay) {
  var t = delay || 0;
  var message = 'New or updated content is available. Reloading app in {s} seconds';
  var getMessage = function() { return message.replace('{s}', t) }
  var div = document.createElement('div');
  div.id = 'update-notification';
  div.innerHTML = getMessage();
  document.body.appendChild(div);
  var intervalID = setInterval(function() {
    t = t - …
Run Code Online (Sandbox Code Playgroud)

javascript service-worker

7
推荐指数
1
解决办法
2778
查看次数

当前分支及其跟踪的分支的任何Git快捷方式?

我想做这样的事情:

$ git fetch origin
$ git rebase -i origin/a_very_very_very_long_branch_name
Run Code Online (Sandbox Code Playgroud)

在哪里,我的本地分支名称与a_very_very_very_long_branch_name.

因此,当我执行这种命令时,我不想一次又一次地复制和粘贴长分支名称.

Git中有当前分支名称的快捷方式吗?

git branch shortcut

6
推荐指数
1
解决办法
816
查看次数

iPhone上的HTML上传(iOS):文件名始终相同(image.jpg,image.png,...)

我使用非常简单的代码在响应式网站上传文件.但是当我使用上传图像时iPhone,图像名称始终image.jpg与实际图像名称无关.

针对此问题的任何解决方法?

我创建了这个带有小代码的示例页面,用于调试目的:

<?php

    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        print "<pre>";
        echo 'post object info:';
        print_r($_FILES);
        print "</pre>";
    }

?>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>File Upload Test for iphone</title>
</head>
<body>
    <form enctype="multipart/form-data" method="POST">
        <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
        <input name="userfile" type="file" /> <br />
        <input type="submit" value="Send File" />
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

演示:http://codepad.viper-7.com/VnTfb3/55dev

html iphone post file-upload ios

6
推荐指数
1
解决办法
4174
查看次数

strace:&lt;未完成...&gt;和&lt;...已恢复&gt;的顺序

我正在编写一个脚本,用于分析以跟踪的文件访问strace

跟踪中包含一些已被另一个进程中断的调用。strace使用<unfinished ...><... close resumed>(在close通话中断的情况下)标记向他们显示。

[pid 26817] 12:48:22.972737 close(449 <unfinished ...>
[pid 28708] 12:48:22.972797 fcntl(451, F_SETFD, FD_CLOEXEC <unfinished ...>
[pid 26817] 12:48:22.972808 <... close resumed> ) = 0 
Run Code Online (Sandbox Code Playgroud)

该进程及其所有线程均已通过以下方式跟踪

strace -f -tt -p <pid>
Run Code Online (Sandbox Code Playgroud)

手册页不确定调用何时完成。

如果正在执行系统调用,同时正在从不同的线程/进程调用另一个系统调用,则strace将尝试保留这些事件的顺序,并将正在进行的调用标记为未完成。呼叫返回时,它将被标记为已恢复。

尽管我假设是这样,但resumed标记自然会指示该呼叫现在已经结束。我想问是否是这样。

可以将上述跟踪摘要重构为

一种

[pid 28708] 12:48:22.972797 fcntl(451, F_SETFD, FD_CLOEXEC <unfinished ...>
[pid 26817] 12:48:22.972808 close(449) = 0
Run Code Online (Sandbox Code Playgroud)

还是应该重建为

[pid 26817] 12:48:22.972737 close(449) = 0 
[pid 28708] 12:48:22.972797 fcntl(451, F_SETFD, FD_CLOEXEC <unfinished …
Run Code Online (Sandbox Code Playgroud)

linux strace

6
推荐指数
1
解决办法
7375
查看次数

是否可以查看JVM热点编译器生成的机器代码?

我想知道,是否可以了解HotSpot编译器在编译给定的Java字节码类或方法时生成的实际机器代码?

java bytecode machine-code

6
推荐指数
1
解决办法
606
查看次数

strace:在dup2(A,B)中的任何意义; 接近(B)`?

我正在尝试了解strace在oracle JVM中运行的Java应用程序服务器.

我经常看到这些线条:

[pid 10465] 23:04:59.658453 dup2(215, 274) = 274
[pid 10465] 23:04:59.658616 close(274)  = 0
Run Code Online (Sandbox Code Playgroud)

在这种情况下215是一个UNIX套接字:

java    10387 XXX  215u  unix 0xffff880037962cc0      0t0 153294021 socket
Run Code Online (Sandbox Code Playgroud)

FD 274是一个开放的 TCP套接字.

这些"呼叫对" A在多分钟内使用相同的套接字重复多次.

我的理解dup2(A, B)是它创建了一个B指向/引用同一文件/套接字的文件描述符A,B如果它仍然打开则首先关闭.

Opengroup说

dup2()函数将使文件描述符fildes2引用与文件描述符fildes相同的打开文件描述并共享任何锁,并返回fildes2.如果fildes2已经是有效的打开文件描述符,则应首先关闭它,除非fildes等于fildes2,在这种情况下,dup2()将返回fildes2而不关闭它.

到目前为止,我唯一的猜测是,这是JVM的一种奇怪的,未经优化的行为.不是吗?它有什么意义呢.

如有必要,我会添加更多上下文调用.

java jvm file-descriptor system-calls strace

6
推荐指数
1
解决办法
579
查看次数

可以中断同步块/方法吗?

虽然我知道 Re-EntrantLocks 和 之间的理论差异synchronized,但我对以下几点感到困惑。

从一篇关于 Javarevisited比较synchronizedLock对象的文章中看到这个声明:

Java 中 ReentrantLock 和 synchronized 关键字之间还有一个值得注意的区别是,在等待 Lock 时可以中断 Thread 的能力。在synchronized关键字的情况下,线程可能会被阻塞等待锁定,无限期并且无法控制。ReentrantLock 提供了一个叫做 lockInterruptably() 的方法,可以用来在线程等待锁的时候中断它。类似地,如果锁定在特定时间段内不可用,则可以使用带超时的 tryLock() 超时。

根据上述声明,我确实尝试在同步方法(即阻塞等待)上中断线程等待(),但它确实抛出了 InterruptedException。但这种行为与上述声明中的内容相矛盾。

// this method is called from inside run() method of every thread. 
public synchronized int getCount() {
        count++;
        try {
            Thread.sleep(3000);
            System.out.println(Thread.currentThread().getName() + " gets " + count);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return count;
}

....
....
t1.start();
t2.start();
t3.start();
t4.start();

t2.interrupt();
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

Thread 1 gets 1 …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization interrupted-exception

6
推荐指数
1
解决办法
3423
查看次数

缓存优先服务工作者:如何绕过更新资产上的缓存?

这是场景:

您有一个当前通过SW缓存的网站.您部署的新版本包含具有缓存清除版本的更新SW.该公司随后宣布了新功能.然而,人们访问该网站,即使SW破坏了它仍然提供以前的缓存,同时在后台更新其缓存.因此,为新功能而来的访问者看不到它们.

这是ServiceWorkers的预期体验吗?有什么建议的策略来解决这个问题?

service-worker

6
推荐指数
1
解决办法
2903
查看次数