为什么不让浏览器能够直接跑PHP?而只有Javascript

为什么现在的浏览器只能跑JavaScript而不是其他的脚本语言比如PHP呢?

我觉得不管是用什么语言做后端,只要是想更新内容就得用Ajax,这东西写一两个还可以,
如果需求要写几十个,并且每一个都要正确地渲染真的好麻烦,用js库需要修改的时候,而且读别人写的JS真的觉得好累
这个东西5年前到现在都没有任何变化,

我一直在想为啥浏览器不能就像PHP get_file_contens()那样直接获取远端数据呢?一行代码就搞定了,
或许PHP才是一个比较适合做浏览器的内置脚本语言。
所以,我想象了一个能支持PHP脚本的浏览器,就是内置了一种经过修改的PHP解释器的浏览器
将PHP开始和结束标签为:<!? 和?!>,来运行web中PHP前端脚本的内容:(<? ?>标签中间的内容还是正常的由后端先执行)

举个粟子:

index.php:

<form action="" method="get">
 <label>Your username:</label>
 <input id="username" type="text">
 <br>
 <div id="message"></div>
 <!?
 $div =& $browser->DOM->element->div;
 $id =& $browser->DOM->all_id;
 listener::match($id['username'][innerText],'admin'){
 $id['message'][innerText] = 'Hello, administrator';}
 ?!>
 <br>
 <label>Select a car:</label>
 <select name="car">
 <!?
 $car_json = file_get_contents('http://www.xxx.com/simple_form_select_backend.php');
 $car_json_decode = json_decode($car_json,1);
 foreach ($car_json_decode as $key=>$value){
 echo "<option value=\"$key\">$value</option>";
 }
 ?!>
 </select>
</form>
simple_form_select_backend.php:
<?php
$cars = array("Volvo","BMW","SAAB");
echo json_encode($cars);

如果我们以后写网站能这样写的话简直爽爆了有木有?!用file_get_contents()直接从服务器取出文本(数组数据),然后反序列化就可以用了,只需两行代码!!当然还可使用任何其他从服务器交互数据的办法,甚至进行加密,因为你写就是PHP代码呀~~只需当成两个PHP环境之间来交互数据(那么可以使用任何方法,比如get,post,socket等等)。当数据传到前端后,使用在浏览器上的PHP dom parse engine将内容直接放在你想要的位置上。

要不然你就想象一下用JS写一个能监听表单里<input>的内容并输出内容到某个id里,而且下面的下拉框里的内容时用Ajax从服务器获取的,要写多少行代码。。

我真的好想找一个这样的浏览器。。没有人能告诉我的话那我就自己写一个浏览器好了,写了一个计划文档在这:http://blog.getexampapers.com...
有人有建议或者能够指导的记得叫我~~

阅读 13.1k
14 个回答

为什么不用js把php的内置函数都实现一遍呢?

已经有人写过了啦!
而且这是在浏览器中的完整的php运行环境哦。
不仅是实现内置函数哦。连php语法也是支持的

https://github.com/niklasvh/p...

在线DEMO:
http://phpjs.hertzen.com/cons...

当你按下run code按钮时,是没有网络请求的哦。也就是说,它就是在浏览器给你执行了php代码。

js能成为浏览器的唯一语言自然有自身的努力,当然还要考虑历史的进程。
说白了,浏览器的公司还是得看利益的。。

所以这是后端程序员的反击么?
当年NodeJS杀入服务端的仇还记着是吧……

不过要是题主顺便用php造了webpack,react,vue等等的轮子,我还是很看好你的....

首先楼主的构想是可实现的,浏览器内置一个php解释器,只需用php实现一些浏览器的宿主api。客户端世界有自己的法则,首先脚本和资源要从远程获取,这不难,把原来直接从磁盘读文件改为先经过网络获取远程磁盘的文件;然后是脚本本身不能搞多线程,因为多个线程都去修改ui的话很容易造成混乱,因此一些耗时的操作不能做成同步,因为线程还需要响应用户操作什么的,不能耗在这,这也不怕,php有协程来帮忙做异步;想直接操作数据库?不要冒这个险,客户端世界谁也不能相信,要能做js的轮子大军早就做了,不过可以参考pouchdb的做法在服务器转发一下,也不必把链接字符串暴露在客户端了。

楼主说的php前端模板语法很赞,只是get_file_contents在这里并不适用,因为它不能马上返回数据,用户也就不会马上看到渲染出来的选项,这期间还不能做其他事情。怎么办?参考js的做法。

我觉得对比php, JS在前端开发有这几个优势:

  • 异步编程

  • 先发优势

其中异步编程是JS的核心优势,效率高. 以题主的代码来举例:
file_get_contents在网络不佳的情况下,会阻塞很长的时间,所以在这方面其实是不如JS的。

先发优势更不用多说,关于JS的轮子遍地开花.

当然,我觉得题主还是很有想法的,至少我就从来没想过这个问题,我还是建议题主大胆尝试的。

我以前查过,链接还在,希望对题主有帮助 :)

http://stackoverflow.com/questions/8946906/why-is-javascript-the-only-client-side-scripting-language-implemented-in-browser

不过现在 JavaScript 已经很强大了,拥有庞大的社区。同时 JavaScript 也在不断的发展和升级。

http://babeljs.io/

我感觉想在增加其他语言到浏览器中可能不太现实。成本是一回事,社区的反对声肯定会不小。还有个问题就是,假设浏览器支持使用 php,那么安全问题怎么解决?

看了题主的要求现在的mvvm的模式就很符合。
把大量的dom操作简化几乎所有的操作都放到前端只有需要的数据通过api获取。
然后题主要有那么多闲情搞php替代javascript就去吧,希望不要是像typescript一样的只是转换版。
最后还是javascript……
然后题主能让所有浏览器都搞上吗。。想了一下三大浏览器感觉gg。
最后题主你提出了一个想法,快去做吧。

因为php还不够流行呗, 除非前端人员大部分都会php, 否则没人愿意去学一门新的语言来解决一个已经很好解决的问题

新手上路,请多包涵
新手上路,请多包涵

这问题很无语O__O "...

新手上路,请多包涵

后端所有逻辑 你全放在浏览器上跑 你自己想吧~ 每次抓取数据 都远程访问一次服务器

js的诞生之初只是为了实现浏览器一些简单的操作,比如提醒用户某个输入框的值是否需要填写,当初的网速很慢,流量很贵,如果通过服务端去检验成本太高。
在浏览器上为了检验一个输入框引入php这类当时看起来很重型的语言,并不是很符合要求,终于,一个非常简单的简单轻量的语言js就诞生了。
js现在的很多强大的功能都是经过了十几二十年的发展才变成这样的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题