cst是美国时间还是中国时间?
这属于代码的实现问题,从题主的描述来看,应该还没到理论层面(否则会问为什么而不是怎么做了)。 这个问题其实很容易解决,但题主既然已经问了,我就写个简单易懂的答案好了。在回答之前先说一下什么是代码执行的时间线。
以Java为例,一个Java程序的执行会被编译成bytecode然后加载到内存中执行。那么这个时候如果考虑最坏的情况,这个程序可能执行的每一步都需要网络请求来加载class文件,那么理论上而言这个程序需要2倍于它运行时间的网络请求才能执行完成。当然这是理论值。实际上会比这个要快一些。 bytecode虽然经过优化,但是相对于原生code还是慢一些。于是问题变成了如何优化bytecode的加载速度。
在Java中可以通过各种手段来解决这种性能问题,比如线程池,缓存甚至异步加载等等。但这些都是后话了。 如果考虑最好情况,也就是bytecode加载速度比Java代码还要快,那么理论上说,只要网络允许,任何时间差都可以被利用起来。这样看来,只要把当前时间减去程序启动时间就可以了。 但是事实显然没有这么理想。因为不同机器上运行的Java虚拟机对bytecode的理解是不一致的,于是就会存在Java代码在执行的过程中去网络加载bytecode的情况(这种情况是存在的,虽然概率极小)。在这种情况下,cst显然就不是开始执行的时间了,而应该是网络请求结束的时间。
为了达到性能上的最优,就应该让网络请求的时间尽可能短。所以可以采取的手段包括压缩编码、流式传输以及同步加载等等。 说了这么多,相信题主也已经明白了。其实实现起来并不复杂。重点是要明白时间差的原理和优化的方向即可。