我正在尝试在将其输出到客户端时优化我的网站的大小.缓存时,我降至1.9MB和29KB.问题是第一个负载包含的图像对于移动设备来说是非常不优化的; 它具有1080p分辨率.
所以我正在寻找一种方法,允许我首先加载低分辨率版本(min.bg.jpg),一旦网站加载,使用高分辨率版本 - 或甚至一个分辨率接近正在使用的设备(NNNxNNN.bg.jpg或只是bg.jpg) .
使用CSS设置背景就像每个人都期望的那样.它应用于正文,整个语句如下所示:
body {
background: url("/cdn/theme/images/bg.jpg");
color: white;
height: 100%;
width: 100%;
background-repeat: no-repeat;
background-position: 50% 50%;
background-attachment: fixed;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想改变它来min.bg.jpg代替第一次加载,然后像这样:
jQuery(function(){
jQuery("body").[...]
});
Run Code Online (Sandbox Code Playgroud)
我以哪种方式异步下载新背景,然后将其作为新的CSS背景图像插入?
为了显示一些差异,这里是我用于测试的主要和迷你版本的示例:
Ingwie@Ingwies-Macbook-Pro.local ~/Work/BIRD3/cdn/theme/images $ file *.jpg
bg.jpg: JPEG image data, EXIF standard
min.bg.jpg: JPEG image data, JFIF standard 1.01
Ingwie@Ingwies-Macbook-Pro.local ~/Work/BIRD3/cdn/theme/images $ du -h *.jpg
1,0M bg.jpg
620K min.bg.jpg
Run Code Online (Sandbox Code Playgroud) 我一直在使用私有Gitlab实例来保存我的所有代码.但由于与我合作的大多数员工现在都有一个Github帐户,我真的很想移动并将我的Gitlab回购镜像给Github.
我的情况:
我知道--mirrorgit 中有切换,但我不确定这是如何工作的.我在网上找到的文档非常糟糕......所以如果有人可以帮助我,那就太好了.:)
我有一个主要在NodeJS上运行的项目.在启动期间,它会创建一个socket.io + http服务器和一些工作者(主要是在特定事件上完成工作的事件监听器).
现在,我想实现一个工作进程,该进程自动检查在同一服务器上通过GitLab托管的git仓库上是否有新的提交.
所以我想知道:
目前该项目作为开发服务器运行,一旦处于生产状态,我可能会关闭自动更新功能.但是,由于我在笔记本电脑上开发但在远程服务器上进行测试,因此自动更新程序会很方便.
我已经使用 ETag 有一段时间了,我对如何使用它们以及它们允许做什么感到满意。
但是,我有时会遇到 ETag 验证请求。在我的服务器上,我可以看到我的浏览器访问了资源 URL,然后得到了“未更改”响应。但是,它仍然是一个请求。
一个聪明的网络服务器(我在 NodeJS 中编写我的代码)如何避免长时间受到验证的影响cache-control: max-age=N?
例如,mymax-age表示 TTL 为 30 天。客户根本不应该在那个时候验证 Etag。那可能吗?
如果你看看Rust,Go,Swift,TypeScript和其他几个,并将它们与C/C++进行比较,我注意到的第一件事是类型如何移动位置.
int one = 1;
Run Code Online (Sandbox Code Playgroud)
比较:
let one:int = 1;
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么?
对我个人来说,这是一个奇怪的阅读类型说明符,因为我很习惯他们在左边.因此,我感兴趣的是为什么类型说明符被移动 - 而这不仅仅是一个,而是许多现代/新语言在桌面上.
我目前正在寻找一种更简洁的方法来从Gravity脚本语言调用本机 C 函数。
到目前为止,最简单的例子是这个:
int add(int lhs, int rhs) {
return lhs + rhs;
}
static void gravity_wrap_add(
gravity_vm* vm,
gravity_value_t* args, uint32_t nargs,
uint32_t retIndex, void* data
) {
int lhs, rhs, rt;
// Unwrap
lhs = VALUE_AS_INT(args[1]);
rhs = VALUE_AS_INT(args[2]);
// Perform call, capture return
rt = add(lhs, rhs);
// Forward the return
gravity_vm_setslot(vm, VALUE_FROM_INT(rt), retIndex);
}
Run Code Online (Sandbox Code Playgroud)
通过使用 C++ (98) 模板或 C 预处理器魔术,是否有生成包装函数的方法?
上面包装函数的一个非常非常复杂的例子是这个:
static void gravity_wrap_add(
gravity_vm* vm,
gravity_value_t* args, uint32_t nargs,
uint32_t retIndex, void* …Run Code Online (Sandbox Code Playgroud) c c++ scripting-language calling-convention gravity-language
我对 Windows 上的 Shell 工作方式感到非常厌倦 - 而且没有那么多选择。所以我考虑过写自己的shell。然而,在阅读有关 autotools 生成的脚本的一些文档时,我注意到有时会使用“SH 兼容”或“POSIX 类兼容 shell”。
据我所知,Bash 脚本与 Fish 不兼容,因为&&它被文字替换and- 这只是我一眼就能发现的区别。
那么,一个 shell 需要“SH 兼容”或“类 POSIX 兼容 shell”吗?除了读取要执行的命令和存储一些变量之外,shell 实际上并没有做很多事情,所以我认为这只是语法上的。或者,我错了吗?
我喜欢从 React 中看到的东西 - 但每当我听说它有无数的插件和模块时,我实际上想知道它还有多少我还没有见过的功能,因为我还没有真正积极地使用 React(尽管我确实这样做了)通过 Babel 插件使用 JSX)。
就我个人而言,我想知道 React 到底有多“重”。我的目标是使我的客户端代码尽可能小 - 我什至正在考虑在服务器上渲染主页的模板,并将较小的模板留给客户端 - 这样我就有一个尽可能完整的“外壳”从服务器发送到客户端,然后随着用户在应用程序中的进展而自行放大。通常,当我看到 React 的用例示例时,我看到人们在客户端上渲染所有内容- 我确信,为此,客户端代码变得非常非常巨大。
因此,在我对我实际上并不确切知道的内容做出任何进一步的假设之前,我想看看 React 单独需要多少。举个例子,考虑一个简单的样板,比如 ToDo-MVC-ish 示例:一个路由器、几个控制器和几个视图/模板。
我正在将我的应用程序转换为能够用作库。为此,我想提供将字符串向量传递给库的默认运行例程的可能性。
我遇到的问题实际上是创建char**. 这是我当前的实现,在源代码中注释掉了,因为它不起作用:
IceTea* IceTea::setupCli(vector<string> strings) {
int argc=strings.size(), i=0;
char* argv[argc];
vector<string>::iterator it;
for(it=strings.begin(); it != strings.end(); ++it) {
argv[i++] = (char*)it->c_str();
}
// Pass the char** to the original method.
return this->setupCli(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
src/IceTea.cpp:132:18: error: no matching member function for call to 'setupCli'
return this->setupCli(argc, argv);
~~~~~~^~~~~~~~
src/IceTea.h:44:13: note: candidate function not viable: no known conversion from 'char *[argc]' to 'const char **' for 2nd argument
IceTea* setupCli(int, const char**);
^
src/IceTea.cpp:124:17: note: candidate …Run Code Online (Sandbox Code Playgroud) 我正在尝试extern和extern "C"一点点,并且意外地在其中一个标识符中输入了一个拼写错误 - 一个$偷偷摸摸的.当我编译代码并得到一个未定义符号的错误并最终看到导致它的原因时,它让我好奇如果它实际上会编译.猜猜是什么 - Clang 确实编译过.
根据我之前读过的文档,标识符的规则基本上是:
a-z,A-Z或0-9和_.但这编译得很好 - 没有任何警告显示:
void __this$is$a$mess() {}
int main() { __this$is$a$mess(); }
Run Code Online (Sandbox Code Playgroud)
看着它:
Ingwie@Ingwies-Macbook-Pro.local /tmp $ clang y.c
Ingwie@Ingwies-Macbook-Pro.local /tmp $ nm a.out
0000000100000f90 T ___this$is$a$mess
0000000100000000 T __mh_execute_header
0000000100000fa0 T _main
U dyld_stub_binder
Run Code Online (Sandbox Code Playgroud)
我可以非常清楚地看到符号名称.
那么为什么Clang会让我这样做,虽然按ANSI标准,它不应该?即使是我安装的GCC 6也没有对此发出警告或错误.
哪些编译器允许使用哪种标识符 - 实际上为什么?
c ×2
c++ ×2
git ×2
auto-update ×1
command-line ×1
compilation ×1
css ×1
etag ×1
github ×1
gitlab ×1
html ×1
http-caching ×1
http-headers ×1
mirror ×1
node.js ×1
reactjs ×1
shell ×1
validation ×1
vector ×1